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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Изменить: с учетом комментариев:

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

Ответ 3

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

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

Ответ 5

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

Фактически, я только что заметил это в хранилищах Karmic Koala Synaptic, поэтому я загружаю его и Lazarus IDE прямо сейчас.

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

Ответ 9

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

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

Я не знаю, на каком языке написаны компиляторы MS, но я не удивлюсь, что они были на С++. Apple Clang находится на С++ и нацелен на LLVM, который также написан на С++.

Кроме того, многие языки Lisp могут скомпилировать себя.

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

Ответ 10

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

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

Ответ 11

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

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

Существует много языков, на которых есть компилятор и некоторые библиотеки, написанные на этом языке, тогда как некоторые библиотеки и биты среды выполнения написаны на 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 (что сильно повлияло на его синтаксис), но не написано в комбинации C и Erlang.

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

Ответ 12

Да..... PL/1 - старая мэйнфреймная программа IBM (PL/1 означает язык программирования программ 1)

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

Отношения    Sigersted

Ответ 13

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

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

UCSD Pascal

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

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

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

Ответ 14

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

Ответ 15

Компилятор Dylan написан в Dylan.

Ответ 16

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

Ответ 17

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

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

Ответ 18

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

Ответ 19

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

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

Конечно, это было сделано в Lisp (google Lisp машинах).

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