Существуют компиляторы для пролога, но другие веб-сайты говорят, что сам язык является интерпретируемым. Я не понимаю, действительно ли пролог - это интерпретируемый язык. Может кто-нибудь уточнить, какой язык на самом деле? Компилируемый язык или интерпретируемый язык?
Пролог: компилируемый или интерпретируемый язык или и то, и другое?
Ответы (2)
Чтобы ответить на этот вопрос, давайте дадим несколько определений.
Скомпилированный язык - это язык, который преобразует файлы исходного кода в форму (двоичный, байтовый код и т. Д.) Для автономного выполнения или в библиотеку для связывания с другими программами. Конструкции фиксированы и не могут быть изменены.
Интерпретируемый язык - это язык, преобразующий конструкцию в форму, которая может быть выполнена после преобразования. Каждая преобразованная конструкция обычно помещается в хранилище, на которое могут ссылаться более поздние конструкции.
Теперь многие языки программирования могут быть как скомпилированы, так и интерпретированы, нет правила, согласно которому язык программирования может быть только одним или другим.
В первые дни большинство языков программирования были тем или иным, например C ++ - скомпилирован, BASIC - интерпретирован.
Теперь отвечу на ваш вопрос:
Пролог: компилируемый или интерпретируемый язык или и то, и другое?
Язык Пролог можно скомпилировать и интерпретировать, так что ответ будет и тем, и другим.
Причина, по которой вы видите разные ответы для разных сайтов, заключается в том, что вы спрашиваете о языке, думаете о языке Prolog как о абстрактной концепции, но, глядя на конкретные реализации, думайте о сайтах как о ссылках на конкретная реализация. Итак, некоторые организации делают то или иное, а некоторые - и то, и другое.
На мой взгляд, в последние несколько лет все складывается консенсус в том, что если у вас есть основной язык программирования, он должен иметь компилятор для генерации эффективного кода и REPL, который использует интерпретатор для быстрой разработки конструкций.
Обычно наблюдается тенденция к разработке и тестированию базовых программных конструкций с использованием REPL, а затем их перенос в файлы исходного кода, которые будут скомпилированы для создания библиотек. Затем на библиотеки ссылаются из REPL; промыть и повторить.
Интересно, что Prolog был первым языком, который я использовал, и это было еще в 1980-х.
Если вы читаете ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core
, в нем говорится:
Этот язык возник в результате работы Роберта А. Ковальски в начале 1970-х годов в Эдинбургском университете (и с тех пор в Имперском колледже в Лондоне) и Алена Колмерауэра в Университете Экс-Марсель во Франции. Их усилия привели в 1972 году к использованию формальной логики в качестве основы для языка программирования. Исследования Ковальского предоставили теоретическую основу, а исследования Колмерауэра дали начало языку программирования Prolog. Затем Колмерауэр и его команда создали первый интерпретатор, а Дэвид Уоррен из факультета искусственного интеллекта Эдинбургского университета создал первый компилятор.
Большинство реализаций компилируются в байтовый код и запускаются на виртуальной машине Prolog. Реализации используют свои собственные виртуальные машины с различными вариантами дизайна и компромиссами.
GNU-Prolog начинался как "транспилятор" Пролога на C, а теперь компилируется в собственный код.
У вас также есть Logtalk (ООП с Prolog), который, насколько я понимаю, перезаписывает исходный код Logtalk в Prolog. Он может использовать целый массив реализаций Prolog в качестве бэкэндов, поэтому его можно использовать в качестве уровня совместимости между реализациями Prolog.
На этот вопрос действительно невозможно ответить; вам следует прочитать документацию по каждой интересующей вас реализации Пролога. Однако лучший ответ, который вы можете получить, - это то, как это делает конкретная реализация Пролога. Prolog - это язык программирования, а не среда выполнения, виртуальная машина или компилятор и так далее.