2016-05-25 3 views
6

Есть компиляторы для пролога, но другие сайты говорят, что сам язык является интерпретированным языком. Я смущен, если пролог - действительно интерпретируемый язык. Может кто-то прояснить, действительно ли на самом деле? Скомпилированный язык или интерпретируемый язык?Пролог: скомпилированный или интерпретируемый язык или оба?

+2

Зависит от реализации Пролога конечно –

+4

Сам язык просто lanugage: Вы можете скомпилировать его, интерпретировать его, читать его, разобрать его, перевести его на другие языки и т.д. ... – mat

ответ

6

Чтобы ответить на это, давайте определим некоторые определения.

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

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

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

В первые дни большинство языков программирования были такими или другими, например. C++ - скомпилирован, BASIC - интерпретируется.

Теперь, чтобы ответить на ваш вопрос:

Пролог: скомпилированный или интерпретируемый язык или оба?

Язык Prolog может быть скомпилирован и может быть истолкован так, что ответ будет таким.

Причина, по которой вы видите разные ответы для разных сайтов, заключается в том, что вы задаете вопрос о языке, подумайте о языке Prolog как о abstract concept, но, глядя на конкретные реализации, подумайте о сайтах, ссылаясь на concrete implementation. Таким образом, некоторые организации делают одно или другое, а некоторые делают оба.

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

Обычно тенденция заключается в разработке и тестировании базовых программных конструкций с использованием REPL, а затем переместить их в файлы исходного кода, которые будут скомпилированы для создания библиотек. Затем библиотеки ссылаются на REPL; промыть и повторить.

Интересно, что Пролог был первым языком, который я использовал, который имел оба, и это было еще в 1980-х годах.

Если вы читали ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core говорится:

язык берет свое начало с работы в начале 1970-х годов Роберт А. Kowalski, а в Эдинбургском университете (и с тех пор в Имперском колледж, Лондон) и Ален Колмерауэр в Университете Экс-Марсель во Франции. Их усилия привели в 1972 году к использованию формальной логики в качестве основы для языка программирования. Исследование Kawalski's предоставило теоретическую основу, в то время как Colmerauer дал на язык программирования Prolog. Colmerauer и его команда затем построили первого переводчика, а Дэвид Уоррен в отделе AI, Университет Эдинбурга выпустил первый компилятор.

8

Большинство реализаций компилируются в байт-код и запускаются на виртуальной машине Prolog. Реализации используют свои собственные виртуальные машины с различными вариантами дизайна и компромиссов.

GNU-Prolog запущен как пролог для C-транспилятора, теперь он скомпилирован в собственный код.

У вас также есть Logtalk (OOP с Prolog), который, насколько я понимаю, перезаписывает источник Logtalk в Prolog. Он может использовать целый массив реализации Prolog в качестве backend, поэтому его можно использовать в качестве уровня совместимости между реализациями Prolog.

На этот вопрос нельзя ответить; вы должны прочитать документацию по каждой интересующей вас реализации Prolog. Лучшим ответом, который вы можете получить, является то, как это делает конкретная реализация Prolog. Prolog - это просто язык программирования, а не среда выполнения или виртуальная машина или компилятор и т. Д.

+5

Вы правы. W.r.t. Logtalk, его компилятор является трехступенчатым компилятором, причем третий и последний этап вызывает бэкэндовый компилятор Prolog в сгенерированных промежуточных файлах Prolog. Что здесь происходит, конечно, зависит от выбранного компилятора Prolog. Это не необычный подход (например, C++ и Cfront в первые дни). –

Смежные вопросы