Есть компиляторы для пролога, но другие сайты говорят, что сам язык является интерпретированным языком. Я смущен, если пролог - действительно интерпретируемый язык. Может кто-то прояснить, действительно ли на самом деле? Скомпилированный язык или интерпретируемый язык?Пролог: скомпилированный или интерпретируемый язык или оба?
ответ
Чтобы ответить на это, давайте определим некоторые определения.
Скомпилированный язык - это формат, который преобразует файлы исходного кода в форму (двоичный, байт-код и т. Д.) Для автономного выполнения или в библиотеку для связи с другими программами. Конструкции фиксированы и не могут быть изменены.
Интерпретируемый язык - это тот, который преобразует конструкцию в форму, которая может быть выполнена после преобразования. Каждая преобразованная конструкция обычно помещается в хранилище, на которое могут ссылаться более поздние конструкции.
Теперь многие языки программирования могут быть скомпилированы и интерпретированы, нет правила, согласно которому язык программирования может быть только одним или другим.
В первые дни большинство языков программирования были такими или другими, например. 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, Университет Эдинбурга выпустил первый компилятор.
Большинство реализаций компилируются в байт-код и запускаются на виртуальной машине Prolog. Реализации используют свои собственные виртуальные машины с различными вариантами дизайна и компромиссов.
GNU-Prolog запущен как пролог для C-транспилятора, теперь он скомпилирован в собственный код.
У вас также есть Logtalk (OOP с Prolog), который, насколько я понимаю, перезаписывает источник Logtalk в Prolog. Он может использовать целый массив реализации Prolog в качестве backend, поэтому его можно использовать в качестве уровня совместимости между реализациями Prolog.
На этот вопрос нельзя ответить; вы должны прочитать документацию по каждой интересующей вас реализации Prolog. Лучшим ответом, который вы можете получить, является то, как это делает конкретная реализация Prolog. Prolog - это просто язык программирования, а не среда выполнения или виртуальная машина или компилятор и т. Д.
Вы правы. W.r.t. Logtalk, его компилятор является трехступенчатым компилятором, причем третий и последний этап вызывает бэкэндовый компилятор Prolog в сгенерированных промежуточных файлах Prolog. Что здесь происходит, конечно, зависит от выбранного компилятора Prolog. Это не необычный подход (например, C++ и Cfront в первые дни). –
- 1. Скомпилированный интерпретируемый язык
- 2. Нет такой вещи, как «скомпилированный язык» или «интерпретируемый язык».
- 3. Язык предприятия, скомпилированный или для JVM
- 4. Неужели комментарии замедляют интерпретируемый язык?
- 5. HTML-тег сценария: тип или язык (или опустить оба)?
- 6. Является ли интерпретируемый язык защищенным?
- 7. Javascript - Скомпилированный язык?
- 8. Почему интерпретируемый язык считается более портативным?
- 9. Пролог или более поздний язык логики AI для Xcode
- 10. Скомпилированный или запутанный Ruby
- 11. Websockets или AJAX или оба?
- 12. Silverlight или ASP.NET или оба?
- 13. COUNT или UNION или оба?
- 14. Пролог: два или более
- 15. asp.net - это скомпилированный язык?
- 16. Скомпилированный динамический язык
- 17. Почему код JIT'а потребляет гораздо больше памяти, чем скомпилированный или интерпретируемый код?
- 18. PHP против производительности JSP: это скомпилированный или интерпретируемый аргумент, даже имеющий отношение к этой проблеме?
- 19. Неужели комментарии замедляют скомпилированный язык?
- 20. Как создать интерпретируемый язык с помощью C#?
- 21. Параллельный интерпретируемый язык для инструмента командной строки?
- 22. Высокий уровень - интерпретируемый язык в C89
- 23. web.config, app.config или оба?
- 24. Java, XML или оба?
- 25. Хеширование, шифрование или оба
- 26. Mailchimp? Mandrill? или оба?
- 27. A или B, не оба, не оба
- 28. Pig UDF или Pig Latin или оба?
- 29. backbone или ext/sencha touch или оба
- 30. Удалить TabPage: Dispose или Clear или оба?
Зависит от реализации Пролога конечно –
Сам язык просто lanugage: Вы можете скомпилировать его, интерпретировать его, читать его, разобрать его, перевести его на другие языки и т.д. ... – mat