Язык, который не использует "с"?

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

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

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

19 ответов


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

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

Fortran, Algol, SNOBOL, Forth, Smalltalk, Simula, Pascal, APL, COBOL, MUMPS, LOGO и BCPL также были полностью свободны от C.


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

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

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

Edit: С учетом комментария:

  • система выполнения Haskell по-прежнему является довольно большим куском C
  • Clojure еще не загрузился, но он реализован в Java

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

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


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


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

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

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


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

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

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

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

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

все языки программирования должны быть написаны на чем-то, если вы хотите запустить их на компьютере. В начале единственным выбором было писать машинный код напрямую. Вскоре после этого люди написали: ассемблеры (первоначально в машинном коде, а затем сами в ассемблере) облегчают написание машинного кода. Затем последовали языки высокого уровня: FORTRAN, Lisp, COBOL, ALGOL, а затем еще Simula, Smalltalk, C, Pascal, ML, Prolog. Каждый из них должен был быть написан на чем-то; самые ранние были написаны на ассемблере, затем некоторые были написаны сами по себе, а другие-на другом языке высокого уровня. К 80-м годам C был в значительной степени доминирующим системным программированием язык, и, таким образом, он стал выбором по умолчанию для написания нового языка; и это продолжается и сегодня. Но оглянитесь на языки до этого, и вы найдете множество реализованных на других языках или даже на самих себе.


Как насчет BASIC или Pascal?


посмотреть загрузчик составители. Первый компилятор Pascal был написан на Fortran, который использовался для компиляции компилятора Pascal, написанного на Pascal.

C++ - это супер-набор С, поэтому основной компилятор C++ может быть написан на C, и на C++ особенности (и скомпилированы с помощью предыдущей версии).

Я не знаю, на каком языке написаны компиляторы MS, но я бы не удивился, если бы они были на C++. Лязг от Apple в C++ и нацелен на LLVM, который также написан на C++.

кроме того, многие языки Lisp может составить сами.

некоторые компиляторы будут использовать C в качестве переносной версии сборки, но это просто для удобства.


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

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


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

на самом деле, я только что заметил это в синаптических хранилищах кармической коалы, поэтому я загружаю его и IDE Лазаря прямо сейчас.

Великого, другое выходные по трубам : -)


да ..... ПЛ/1 старая программа мэйнфреймов IBM (ПЛ/1 расшифровывается как язык Programgramming 1)

есть и другие: ассемблер?

с уважением Sigersted


существует даже современный компилятор C, первоначально не написанный на C

Я считаю Программное Обеспечение Green Hills компилятор C был впервые написан в начале 1980-х годов на языке Pascal. В настоящее время компания является крупным поставщиком встроенных материалов аэрокосмической и mil - квалификации, и возможно, что компилятор все еще находится в Pascal. Но тогда, я думаю, у них также есть переводчик Pascal-to-C, поэтому я думаю, что они могли мигрировать.

Сан-Диего Паскаль!--4-->

P-система использовала компилятор, который сгенерировал код для виртуальной машины. Я считаю, что компилятор сам был написан на Паскале. Вы можете портировать все это, просто портируя виртуальную машину. Эта система повлияла на более позднюю разработку Java / JVM.

все остальные старые вещи

C существует только с начала 1970-х годов и был популярен только с начала 1980-х годов. Все, что было раньше, должно было иметь отношение к чему-то другому, что было раньше или раньше. само ушко в собственной компиляции.


из того, что я знаю о gcc, большинство компиляторов переходят от java/fortran/ada/whatever к объектному коду, затем все они используют один и тот же компоновщик. Я бы предположил, что компоновщик находится в C, но ассемблер, вероятно, нет.


компилятор Dylan написан на языке Dylan.


для реализации Perl 6 было начато несколько проектов, отличающихся в первую очередь выбором языка реализации. Первоначально основной претендент (имя которого ускользает от меня) был написан на Perl 5. Основное внимание в Perl 6 уделяется Rakudo, который реализуется поверх Parrot, используя, как я понимаю, язык под названием PIR. (Я предполагаю, что Parrot написан на C и не знаю, использует ли Rakudo C вместе с PIR или нет; любой, кто участвует в Perl 6 разработчикам предлагается отредактировать мой ответ и заполнить эти данные.)

в принципе, любой язык Тьюринга может использоваться для написания собственного компилятора. Хотя это не было сделано во всех случаях, это, похоже, было сделано для большинства, хотя бы "потому, что мы можем".


JRuby-это реализация Ruby, которая использует виртуальную машину Java. Можно сказать, что виртуальная машина Java написана на C, C++ или каком-либо другом языке низкого уровня, но в конечном счете все, что говорит с оборудованием напрямую, написано на C, C++, ассемблере или каком-либо другом языке низкого уровня.


PyPy - это реализация Python, написанная на Python.


вы должны определить, что вы подразумеваете под "низким уровнем". Почти все языки будут использовать C косвенно, потому что большинство операционных систем написаны на C или c++. Для выполнения любых системных вызовов (открытие файлов, сетевых сокетов) вам придется взаимодействовать с C.

Это, как говорится, Были попытки написания операционных систем на других языках наиболее примечательно, что OCaml и Lisp.

наверняка это было сделано в Lisp (Лисп Гугл машины.)

таким образом, Lisp был бы самым заметным (не мертвым) языком, который преуспел без C.