Пролог: компилируемый или интерпретируемый язык или и то, и другое?

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


person Charles.Aposaga    schedule 25.05.2016    source источник
comment
Конечно, зависит от реализации Пролога   -  person    schedule 25.05.2016
comment
Сам язык - это просто язык: вы можете скомпилировать его, интерпретировать, прочитать, проанализировать, перевести на другие языки и т. Д.   -  person mat    schedule 25.05.2016


Ответы (2)


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

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

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

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

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

Теперь отвечу на ваш вопрос:

Пролог: компилируемый или интерпретируемый язык или и то, и другое?

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

Причина, по которой вы видите разные ответы для разных сайтов, заключается в том, что вы спрашиваете о языке, думаете о языке Prolog как о абстрактной концепции, но, глядя на конкретные реализации, думайте о сайтах как о ссылках на конкретная реализация. Итак, некоторые организации делают то или иное, а некоторые - и то, и другое.

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

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

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

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

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

person Guy Coder    schedule 25.05.2016

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

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

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

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

person Community    schedule 25.05.2016
comment
Вы правы. W.r.t. Logtalk, его компилятор представляет собой трехэтапный компилятор, третий и последний этап которого вызывает внутренний компилятор Пролога для сгенерированных промежуточных файлов Пролога. Что здесь происходит, конечно, зависит от выбранного компилятора Пролога. Это не редкость (например, C ++ и Cfront в первые дни). - person Paulo Moura; 25.05.2016