Я часто слышу термин, что язык A написан на языке B. Например, PHP написан на C , C # написан на C ++ .
Может кто-нибудь объяснить, что это значит и если это даже правильно? Это как-то связано с компилятором интерпретатора, используемым языком?
Кроме того, каковы факторы, на которых основан выбор языка реализации?
s/written/implemented/
и это намного понятнее.Ответы:
Большинство языков программирования делятся на две категории: интерпретируемые и компилируемые языки.
Скомпилированный язык переводится компилятором в машинный код , язык, который процессор напрямую выполняет шаг за шагом. Интерпретируемый язык, с другой стороны, использует посредника, переводчика , для запуска кода языка. Интерпретатор сам по себе является другой программой, обычно сам скомпилированной в машинный код.
PHP - это интерпретируемый язык. Вам нужна отдельная программа для запуска кода PHP, компьютер не запускает программу напрямую. Эта отдельная программа, интерпретатор PHP, сама написана на C.
C # - это скомпилированный язык, но он не скомпилирован в машинный код. Вместо этого он компилируется в специализированный язык, байтовый код, для запуска на виртуальной машине. Java является еще одним примером такой установки. Вы могли видеть это как гибрид между компиляцией и интерпретацией, где виртуальная машина является интерпретатором. Виртуальная машина для C # (CLI или Common Language Infrastructure ) написана на C ++.
Другие примеры:
источник
Вы в основном правы. Если говорят, что Ruby написан на C, это означает, что интерпретатор языка и части базовой библиотеки написаны на C.
Таким образом, интерпретатор Ruby - это программа на C, которая принимает текстовый файл в качестве входных данных, обрабатывает его и затем вызывает функции, которые находятся либо в другом текстовом файле (если написаны на Ruby), либо являются скомпилированным кодом C, что является основной функциональностью, которая требуется прямой доступ к системным ресурсам, таким как память, файловая система и многое другое. И некоторые функции, которые требуют очень высокой производительности.
Таким образом, у вас есть разные части языка, которые можно или нужно писать на других языках. Ничто не помешает вам написать интерпретатор на C и библиотеки на C ++ (хотя, может быть, несколько сложнее). Вы могли бы даже сделать несколько шагов и использовать язык, который очень хорош в обработке текста, чтобы генерировать некоторые промежуточные данные, которые затем обрабатываются некоторым C-кодом.
Факторы для решения могут быть такими же, как и для других сложных приложений. Производительность одна. Возможность написания кода, который может напрямую обращаться к системным ресурсам другого. Так что в большинстве случаев это должен быть скомпилированный язык (хотя теоретически вы можете написать интерпретатор Ruby на Python). Доступность в разных системах важна, если вы хотите, чтобы ваш язык работал в Linux, Win, OS X и других.
источник
Это просто означает, что большая часть ядра языка A написана на языке B. Что «ядро языка A» может отличаться от языка к языку, но в общих чертах вы угадаете, это означает, что это компилятор или интерпретатор. Решающим фактором при выборе языка для написания другого языка, как и почти в каждом проекте, являются языки, с которыми разработчики более знакомы.
Тем не менее, «язык A написан на языке B» является упрощением для большинства современных языков. Если мы возьмем Python в качестве примера, тогда как эталонная реализация CPython действительно была написана на C, есть реализации, написанные на других языках, таких как Jython (написанный на Java), IronPython (написанный на C #), PyPy ( написанный на Python), CLPython (написанный на Common Lisp), Stackless Python (написанный на C и Python) и Unladen Swallow (написанный на C ++).
Язык программирования - это определение, и, как показывает пример Python, на самом деле нет никаких ограничений на том, на каких языках можно писать его компилятор, интерпретатор и библиотеки. И, конечно, также возможно, чтобы язык был написан сам по себе, через процесс, называемый начальной загрузкой .
источник
string.lower(s)
это функция Python, которая делегирует этоreturn s.lower()
, это правильно. В операции случае 3,3 струнных CPython реализуются в С.С точки зрения использования языка программирования, язык программирования - это просто программа. Это может быть компилятор, интерпретатор или виртуальная машина. Все эти вещи - просто компьютерные программы, и поэтому могут быть написаны на любом языке.
Итак, если вы хотите создать свою собственную версию PHP, вы можете начать с любого языка, на котором вы наиболее свободно говорите. Затем вы бы написали программу, которая может читать код в формате PHP и делать все, что в спецификации PHP написано вашей программой. , Таким образом, вы создаете язык PHP на языке X.
источник
explode
которая принимаетString
и возвращает aArray
, ее реализация (т.е. код, который будет работать со строкой для создания массива) написана на C , верно?Очень похожая фраза с совершенно другим значением - это «написание языка A на языке B», например «написание C на языке Java».
Это описывает код, который синтаксически корректен на одном языке, но использует структуры, идиомы и соглашения из другого языка. В примере «написание C на Java» признаками этого будут объявление всех локальных переменных поверх каждого метода, использование целочисленных констант вместо перечислений, использование identifiers_with_underscores и т. Д.
Как правило, это происходит, когда кто-то работал с одним языком в течение длительного времени (особенно когда он работал только с этим языком) и очень плохо знаком с текущим языком (или не заинтересован в написании чистого кода).
источник
Технология по своей сути итеративный процесс. Мы начинаем с простых инструментов, а затем используем их для создания лучших. Первые языки ассемблера были в значительной степени 1: 1 переводами стандартизированных байт-кодов инструкций для чипа; архитектура 8086 и ее ассемблер стали доминирующими над другими архитектурами, такими как Z80, RISC и т. д., и поэтому мы начали разрабатывать языки, которые могут быть переварены в сборку 8086, например, FORTRAN, COBOL, Pascal и C. Программа, которая интерпретирует исходный код эти языки должны быть написаны в чем-то более примитивном, в противном случае вы в конечном итоге в аргументе курица и яйцо; если исходный код для первого компилятора C был написан на C, то что скомпилировало этот исходный код C, и не будет ли он, по определению, первым компилятором C?
По сути, «C # написан на C ++» должен означать, что первая и / или самая популярная библиотека компилятора и среды выполнения / ядра, которые подчиняются спецификации языка C # (это Microsoft .NET Framework и компилятор командной строки). Программа CSC.exe) написана на C ++.
источник
«Язык A написан на языке B» означает, что единственной реализацией языка A (или единственной широко используемой) является та, которая фактически является проектом, разработанным на языке B, и единственной полной, современной версией. Спецификация A - это исходный код B, который реализует его так, что если с документацией и B-программой не согласны, B-программа обычно считается правильной.
источник