Подтвердить что ты не робот

Как можно реализовать язык программирования?

возможно, это просто небольшое недоразумение, но как может быть реализован язык программирования ?

Я не говорю о том, как реализовать собственный язык программирования, но о слове "реализовано"? Я имею в виду, вы можете реализовать компилятор или интерпретатор, но язык программирования?

Что это значит, если я прочитаю "С++ реализован в C" или "Python был реализован в C"?

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

Я думаю, что этот вопрос приводит к вопросу "что такое язык программирования на самом деле"? Компилятор, интерпретатор или только документально оформленный языковой стандарт о том, как вещи должны быть реализованы на языке?

[EDIT]

Ответ: Языки никогда не реализуются, только компиляторы/интерпретаторы и т.д. Это просто.

4b9b3361

Ответ 1

Вы правы, эти утверждения не имеют никакого смысла. Совершенно очевидно, что тот, кто сделал эти заявления, не понимает разницы между языком программирования и компилятором (или интерпретатором).

Это удивительно распространенная проблема. Например, иногда люди говорят о интерпретируемых языках или скомпилированных языках. То же самое: языки не интерпретируются или компилируются, они просто есть. Интерпретация и компиляция являются чертами реализации, а не языком.

Еще один плюс: у Python есть GIL. Нет, это не так: одна реализация Python имеет GIL, все остальные реализации этого не делают, а сам язык Python - нет. Или: Ruby имеет зеленые нити. Опять же, не верно: Ruby имеет потоки. Период. Независимо от того, реализует ли какая-либо конкретная реализация языка их реализация как зеленые потоки, собственные потоки, потоки платформы или что-то еще, это черта этой конкретной реализации, а не Ruby. И, конечно, мой любимый: Ruby 1.9 быстрее, чем Ruby 1.8. Это даже не имеет смысла: Ruby 1.9 и Ruby 1.8 являются языками программирования, то есть кучей абстрактных математических правил. Вы не можете запускать язык программирования, поэтому язык программирования никогда не может быть "быстрее" или "медленнее", чем другой.

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

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

Если мы вернемся к утверждению, что "Python реализован на C", теперь должно быть очевидно, что это утверждение не просто неверно. Если бы утверждение было неправильным, это означало бы, что утверждение даже имеет смысл, т.е. Существует какой-то возможный мир, в котором он, по крайней мере, теоретически может быть прав. Но это не так. Заявление не является ни неправильным, ни правильным, это просто не имеет смысла. Если английский был типизированным языком, это была бы ошибка типа.

Python - это язык программирования. Языки программирования не реализованы ни в чем. Они просто реализованы. Компиляторы и переводчики реализуются на языках. Но даже если вы интерпретируете инструкцию таким образом, это неверно: Jython реализован в Java, IronPython реализован на С#, PyPy реализован в RPython и Python, Pynie реализован в PGE, NQP и PIR. (О, и все эти реализации содержат компиляторы, поэтому ваш "Python - интерпретируемый язык".) Аналогично Ruby: Rubinius реализован в Ruby и С++, JRuby и XRuby реализованы в Java, IronRuby и Ruby.NET - это реализованный в С#, HotRuby реализован в ECMAScript, Red Sun реализован в ActionScript, RubyGoLightly реализован в Go, кардинал реализован в PGE, NQP и PIR, SmallRuby реализован в Smalltalk/X, MagLev реализован в GemStone Smalltalk и Ruby, YARI реализован в Io. И для С++: Clang (который является интерфейсом C, С++ и Objective-C для LLVM) реализован в С++ (все три интерфейса реализованы на С++).

Ответ 2

Вот очень академический ответ (от давнего академика). Сначала я перефразирую вопрос:

Что означает язык программирования, который будет реализован?

Я начну с "что такое язык программирования":

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

  • Язык реализуется, когда средство предоставляется для чтения в высказывании и выполняет вычисление, то есть вычисляет функцию или выполняет поведение. Средством является реализация.

Типичные реализации включают

  • Прямая интерпретация синтаксиса языка. Эта модель редка, но FORTH, вероятно, ближе всего к ней.

  • Перевод синтаксиса в код виртуальной машины, также называемый байт-кодом, который сам по себе является другим языком и который интерпретируется. Популярно писать интерпретаторы байт-кода в C. Lua, Perl, Python и Ruby реализованы более или менее таким образом.

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

  • Прямая интерпретация языка в аппаратном обеспечении. Машинный код IA-32 и машинный код AMD64 реализованы таким образом.

Когда человек говорит: "Язык X реализован в Y", они обычно говорят, что переводчик для X или интерпретатор для байт-кода X написан на языке Y. Одним из величайших секретов писателей компилятора является возможность написать компилятор для языка X в самом языке X. Если это вас интересует, обратитесь к статье Эндрю Аппеля "Аксиоматический бутстраппинг: руководство для хакеров-компиляторов".

Иногда ответ на этот вопрос не очевиден. Squeak Smalltalk пишет как переводчик, так и интерпретатор байт-кода в Smalltalk, а затем переводит интерпретатор на C, который переводится на машинный код. Что такое Squeak? Smalltalk.


Совать профессора; прочитайте лекцию.

Ответ 3

"С++ реализован в C". Я понимаю это как "компилятор С++ написан на языке C". Довольно просто, без слишком большой философии.

Как правило, компилятор С++ может быть написан на любом языке, включая сам С++ (кроме первой версии компилятора).

Ответ 4

"Python был реализован на C" означает, что по крайней мере один компилятор Python (в данном случае наиболее часто используемый) написан с использованием C. Разработчики этой реализации Python приняли намеренное решение не использовать С++. Как утверждение является неполным, поскольку Python также реализован в Java, на С# и в Python.

Основная актуальность заключается в том, что она дает вам некоторое представление о системах, в которых вы могли бы переносить язык: все, что предназначено компилятору C, должно (по крайней мере теоретически) иметь возможность запуска реализации C на Python, но если бы они выбрали использовать С++, был бы меньший набор систем, которые могли бы запустить его.

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

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

Ответ 5

Язык программирования является стандартом. Его интерпретатор или компилятор является реализацией этого стандарта.

Ответ 6

Чтобы создать новый язык, вам необязательно нужно делать в машинный код низкого уровня (например, сборка). Таким образом, использование другого языка для достижения вашей цели (создание нового языка здесь) совершенно нормально. Итак, когда мы говорим: Python был реализован в C, это просто означает, что C использовался для создания этого языка. Например, C может выполняться во многих разных архитектурах, поэтому программистам не нужно заботиться о разных типах компьютеров (переносных).

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

Почему так много разных языков? Потому что цель языка - решить сложные проблемы. Таким образом, в зависимости от того, что вы хотите попробовать выполнить, выбор подходящего языка может быть важным решением.

Ответ 7

Утверждение "Язык X реализовано в языке Y" имеет смысл и истинно тогда и только тогда, когда существует каноническая реализация языка X, и эта реализация написана на языке Y. В общем использовании либо первый, либо самый популярная реализация часто считается канонической.

Например, Perl является одним из немногих языков с определенным каноном. "Python реализован в C" имеет смысл, если CPython считается канонической реализацией Python, а "С++ реализован в C" верен для CFront, оригинальной реализации "C с классами" Bjarne Stroustrup.

Ответ 8

Прямой ответ: Реализация в контексте, о котором вы говорите, просто означает, что написанный и язык на самом деле означает компилятор. Первоначальный компилятор С++ был, как я понимаю, написанным на C. Нет ничего (кроме знания и времени), чтобы остановить вас от написания компилятора С++ на другом языке.

Реализация - это код, который делает работу программного обеспечения. Часто мы говорим о реализации функции, как в: "функция еще не реализована". например void foo()
{
// функция еще не реализована
 бросить();
}

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