Язык, который не использует «С»? - PullRequest
11 голосов
/ 16 ноября 2009

Просто любопытно. Я могу ошибаться, но, насколько я знаю, большинство языков создано с использованием 'C' источников.

Например: perl , php , python , Java (?), go ...

Есть ли язык, который не использует C в качестве интерпретатора / компилятора низкого уровня? (Фортран?)

Ответы [ 19 ]

22 голосов
/ 16 ноября 2009

Любой скомпилированный язык, предшествующий C, имеет (имел?) Компиляторы, которые сами не зависели от C.

Был старый Lisp компилятор, который был написан на Лиспе (тогда Лисп был единственным Лиспом).

Fortran, Algol, SNOBOL, Forth, Smalltalk, Simula, Pascal, APL, COBOL, MUMPS, LOGO и BCPL также не содержали C.

16 голосов
/ 16 ноября 2009

Если вы пишете язык B на A, то позже можно написать компилятор для B на B.
Проверьте Начальная загрузка

Начальная загрузка - это термин, используемый в информатика, чтобы описать методы, вовлеченные в написание компилятор (или ассемблер) в целевой язык программирования, который это предназначен для компиляции. Эта техника также называется самостоятельным хостингом.

Большая доля программирования языки загружаются, в том числе BASIC, C, Pascal, Factor, Haskell, Модула-2, Оберон, OCaml, Common Lisp, Схема, Clojure и др.

Редактировать: с учетом комментариев:

  • Система исполнения на Haskell все еще довольно большая часть C
  • Clojure (пока) не загружен, но реализован в Java
11 голосов
/ 16 ноября 2009

Если вы ищете не-C реализации некоторых популярных / замечательных языков, подумайте о них:

  • Java VM Sun реализована на C ++ (согласно http://www2.research.att.com/~bs/applications.html. Вы также можете получить исходный код OpenJDK )
  • Clojure , Scala и Groovy - все реализовано на Java и работает на JVM.
  • Squeak - современный Smalltalk с самой виртуальной машиной, реализованной в Smalltalk!
  • Arc - диалект Lisp, реализованный на схеме.
  • CLOS - Язык (да!) Для объектно-ориентированного программирования в Common Lisp, реализованный, ну, в общем, в Common Lisp!
  • Коэффициент - популярный конкатенативный язык, реализованный в C ++.
7 голосов
/ 16 ноября 2009
6 голосов
/ 16 ноября 2009

Delphi был написан на Pascal , а AFAIK Pascal (изначально) был написан на Fortran , но после этого на самом Паскале.

5 голосов
/ 16 ноября 2009

Процесс настройки и запуска языка очень интересен. FORTH особенно интересен тем, что ядро ​​языка может быть реализовано в заведомо небольшом пространстве, тогда все остальное может прийти вместе для поездки. Из моей собственной памяти вы можете избавиться от реализации @,!, + И - в сборке - может быть, один или два оператора жонглирования стека, и все готово. См. здесь для получения дополнительной информации.

Что особенно интересно, это когда в процессе начальной загрузки что-то идет не так. Много лет назад я читал о компиляторе Pascal, который был создан в университете в качестве исследовательского проекта. Он был написан на Pascal с использованием существующего компилятора Pascal и в конечном итоге вытеснил его. Проблема заключалась в том, что в конкретном случае была ошибка при генерации кода, а исправление в исходном коде компилятора приводило к ошибке в существующем компиляторе, что делало невозможным его применение обычными средствами. Резервные копии не исправленной версии устарели. В конце концов, автор закончил очень тщательной бинарной операцией на существующем компиляторе.

Хотя C является доминирующим системным языком, он, безусловно, не является языком базового уровня для создания других языков. Первые машины Macintosh были созданы с учетом Pascal, и большинство первых инструментов и языков были основаны на Pascal (или ассемблере).

5 голосов
/ 17 ноября 2009

C - это язык, на котором написано большинство современных операционных систем, и, таким образом, почти любой другой язык, который хочет работать в современных операционных системах и современном оборудовании, должен иметь возможность взаимодействовать с C, если он хочет взаимодействовать с остальной мир вообще. Кроме того, из-за этого компиляторы C распространены повсеместно, поэтому вы всегда можете рассчитывать на то, что компилятор C будет доступен для любой интересующей вас платформы. По этим двум причинам многие языки либо реализованы на C (по крайней мере, частично). ) или написаны для компиляции в C (так что версия, скомпилированная в C, может использоваться для начальной загрузки).

Тем не менее, есть некоторые языки, которые имеют очень мало контактов с C. Clozure Common Lisp (ранее OpenMCL, до этого Macintosh Common Lisp, до этого Coral Common Lisp) полностью написан на Common Lisp , Вам необходимо скачать двоичные файлы для какой-либо платформы, чтобы иметь возможность скомпилировать ее. Очень часто Лисп пишут на Лиспе (иногда на другом диалекте, иногда на том же самом), так как Лисп намного старше С. В 1970-х и 80-х годах было даже Лисп-машин , которые были предназначены для работы Лисп, и вся операционная система и среда разработки были написаны на нем.

Есть много языков, у которых есть компилятор и некоторые библиотеки, написанные на этом языке, в то время как некоторые библиотеки и биты времени выполнения написаны на C. Например, CMUCL (и его производная SBCL ) в основном написаны на Common Lisp, но имеют небольшую среду выполнения C. То же самое относится к GHC , компилятору Glasgow Haskell; он написан на Haskell, поэтому вам нужна существующая реализация на Haskell (обычно Hugs , так как она написана на C и, таким образом, облегчает загрузку), но у нее есть некоторый код на C во время выполнения.

Схема 48 - это Схема, написанная на PreScheme , ограниченном диалекте Схемы, который может быть скомпилирован в C, который сам написан на Схеме. Тот факт, что он компилируется в C, облегчает загрузку; дистрибутив Scheme 48 уже поставляется с кодом, скомпилированным для C, поэтому вам просто нужно скомпилировать его с помощью системного компилятора C, чтобы начать работу.

Существует множество других языков, написанных на других языках, кроме C. Существует Free Pascal , версия Паскаля, написанная на Паскале. Есть много языков, написанных на Java, хотя сама JVM в основном написана на C. Erlang изначально был написан на Prolog (что сильно повлияло на его синтаксис), но не написано на комбинация С и Эрланга.

Все языки программирования должны быть написаны на чем-то, если вы хотите, чтобы они работали на реальном компьютере. В начале единственным выбором было написание машинного кода напрямую. Вскоре после этого люди написали ассемблеры (первоначально в машинном коде, а позже сами в ассемблере), чтобы облегчить написание машинного кода. Затем последовали языки высокого уровня; Фортран, Лисп, Кобол, Алгол, а позже еще Симула, Смоллтолк, С, Паскаль, М.Л., Пролог. Каждый из них должен был быть написан в чем-то; самые ранние были написаны на ассемблере, потом некоторые были написаны сами по себе, а другие написаны на другом языке высокого уровня. К 80-м годам C был в значительной степени доминирующим языком системного программирования, и поэтому он стал выбором по умолчанию для написания нового языка; и это продолжается до сегодняшнего дня. Но вернитесь к языкам, существовавшим до этого, и вы найдете множество реализованных на других языках или даже самих себя.

4 голосов
/ 16 ноября 2009

FreePascal само компилируется. В какой-то момент я собираюсь поиграть с ним. Я до сих пор помню славные дни Турбо Паскаля.

На самом деле, я только что заметил это в репозиториях Karmic Koala Synaptic, поэтому я сейчас скачиваю его и среду разработки Lazarus.

Отлично, еще выходных по трубам: -)

4 голосов
/ 16 ноября 2009

А как насчет Бейсика или Паскаля?

4 голосов
/ 16 ноября 2009

Больше практического правила, чем естественного закона: компиляторы для скомпилированных языков обычно пишутся на самом языке. (Примеры включают в себя Pascal, OCaml, Haskell, ...) Это иногда скрывается из-за того факта, что некоторые языки используют компилятор C в качестве серверной части. Это довольно распространено для новых языков: например, Компилятор Glasgow Haskell написан на языке Haskell, но он создает промежуточный код C, который затем компилируется в собственный код, тем самым избавляя программистов от утомительной задачи генерации собственного кода для нескольких платформ. Кстати: Java и C # тоже попадают в эту категорию. Компилятор javac написан на Java, компилятор C # на C #. части среды выполнения / VM написаны на C, но не на компиляторе.

С другой стороны, переводчики для устных языков часто (хотя и не всегда) пишутся на другом языке. Примеры включают в себя языки, которые вы упомянули. Контрпримеры включают Lisp или PyPy. Я предполагаю, что основная причина для реализации интерпретатора на другом языке - это получение более быстрого интерпретатора, который также объяснил бы, почему C является распространенным выбором здесь (поскольку репутация C ведет к созданию быстрого кода).

...