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

Вот QuickSort со статическим контролем типов в двух строках Haskell (с haskell.org):

qsort []     = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

И вот QuickSort с динамическим контролем типов в LISP (с swisspig.net):

(defun quicksort (lis) (if (null lis) nil
  (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x))))
    (append (quicksort (remove-if-not fn r)) (list x)
      (quicksort (remove-if fn r))))))

я думаю, что Вы смещаете вещи со своим выбором языка здесь. Lisp известно paren-тяжел. Более близким equivelent Haskell был бы Python.

if len(L) <= 1: return L
return qsort([lt for lt in L[1:] if lt < L[0]]) + [L[0]] + qsort([ge for ge in L[1:] if ge >= L[0]])

код Python от здесь

11
задан Pierre 16 November 2009 в 10:41
поделиться

19 ответов

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

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

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

22
ответ дан 3 December 2019 в 00:37
поделиться

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

2
ответ дан 3 December 2019 в 00:37
поделиться

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

1
ответ дан 3 December 2019 в 00:37
поделиться

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

2
ответ дан 3 December 2019 в 00:37
поделиться

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

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

С уважением Сигерстед

3
ответ дан 3 December 2019 в 00:37
поделиться

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

2
ответ дан 3 December 2019 в 00:37
поделиться

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

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

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

4
ответ дан 3 December 2019 в 00:37
поделиться

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

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

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

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

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

4
ответ дан 3 December 2019 в 00:37
поделиться

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

6
ответ дан 3 December 2019 в 00:37
поделиться

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

4
ответ дан 3 December 2019 в 00:37
поделиться

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

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

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

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

  • Система времени выполнения Haskell по-прежнему является довольно большой частью C
  • Clojure (еще) не загружен, но реализован на Java
16
ответ дан 3 December 2019 в 00:37
поделиться
7
ответ дан 3 December 2019 в 00:37
поделиться

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

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

4
ответ дан 3 December 2019 в 00:37
поделиться

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

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

2
ответ дан 3 December 2019 в 00:37
поделиться

представьте, что вы пишете что-то вроде:

$query = 'SELECT * FROM table WHERE id = ' . mysql_real_escape_string($id);

это не спасет вас от инъекций, потому что $ id может быть 1 OR 1 = 1 , и вы получите все записи из таблицы. вам придется привести $ id к правильному типу данных (в данном случае int)

У pdo есть еще одно преимущество, а именно взаимозаменяемость баз данных.

11
ответ дан 3 December 2019 в 00:37
поделиться

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

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

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

автор закончил очень осторожную бинарную операцию над существующим компилятором.

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

автор закончил очень осторожную бинарную операцию над существующим компилятором.

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

5
ответ дан 3 December 2019 в 00:37
поделиться

Есть даже современный C компилятор изначально не был написан на C

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

UCSD Pascal

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

Все остальное старое

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

Я думаю, что у них также есть переводчик Паскаля на С, так что я думаю, они могли мигрировать.

UCSD Pascal

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

Все остальное старое

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

Я думаю, что у них также есть переводчик Паскаля на С, так что я думаю, они могли мигрировать.

UCSD Pascal

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

Все остальное старое

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

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

Все остальное старое

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

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

Все остальное старое

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

3
ответ дан 3 December 2019 в 00:37
поделиться

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

Тем не менее, есть еще некоторые языки, которые очень мало связаны с C. Clozure Common Lisp (ранее OpenMCL, ранее Macintosh Common Lisp, до этого Coral Common Lisp) полностью написан на Common Lisp. Вам необходимо загрузить его двоичные файлы для какой-либо платформы, чтобы иметь возможность его скомпилировать. Лиспы очень часто пишут на Лиспе (иногда на другом диалекте, иногда на том же), поскольку Лисп намного старше C.В 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. Есть Free Pascal , версия Паскаля, написанная на Паскале. На Java написано множество языков, хотя сама JVM в основном написана на C. Erlang изначально был написан на Prolog (который сильно повлиял на его синтаксис), но не написан на комбинации C и Erlang.

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

5
ответ дан 3 December 2019 в 00:37
поделиться

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

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

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

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

1
ответ дан 3 December 2019 в 00:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: