Интерпретируемый язык: Компилируемые и интерпретируемые языки программирования

Содержание

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

Желающие освоить язык программирования сталкиваются с такими понятиями, как компилятор и интерпретатор. Компиляция и интерпретация — это основа работы языков программирования.

 

 

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

Мы полагаемся на такие инструменты, как компиляция и интерпретация, чтобы преобразовать наш код в форму, понятную компьютеру. Код может быть исполнен нативно, в операционной системе после конвертации в машинный (путём компиляции) или же исполняться построчно другой программой, которая делает это вместо ОС (интерпретатор).

Компилируемые языки

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

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

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

Примерами компилируемых языков являются Pascal, C, C++, Erlang, Haskell, Rust, Go, Ada.

Интерпретируемые языки

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

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

Примерами интерпретируемых языков являются PHP, Perl, Ruby, Python, JavaScript. К интерпретируемым языкам также можно отнести все скриптовые языки.

 

Многие языки в наши дни имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними к минимуму. Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету». Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

 

 

Перепечатка статьи допускается только при указании активной ссылки на сайт itmentor.by

 

Хочешь получать новые статьи первым? Вступай в сообщества ITmentor Вконтакте и Facebook

 

Основные принципы программирования: компилируемые и интерпретируемые языки

Рассказывает Аарон Краус 


Как и в предыдущей статье этого цикла, я хочу обратить ваше внимание на ключевые принципы программирования, которые влияют на всё то, что мы делаем, но с которыми мы редко сталкиваемся напрямую и поэтому не до конца их понимаем. Тема сегодняшней статьи — компилируемые и интерпретируемые языки. 

Будучи разработчиками, мы часто сталкиваемся с такими понятиями, как компилятор и интерпретатор, но я считаю, что многие не совсем понимают, что они означают. Между тем, компиляция и интерпретация — это основы работы всех языков программирования. Давайте взглянем на то, как на самом деле устроены эти понятия.

Вступление

Мы полагаемся на такие инструменты, как компиляция и интерпретация, чтобы преобразовать наш код в форму, понятную компьютеру. Код может быть исполнен нативно, в операционной системе после конвертации в машинный (путём компиляции) или же исполняться построчно другой программой, которая делает это вместо ОС (интерпретатор).

Компилируемый язык — это такой язык, что программа, будучи скомпилированной, содержит инструкции целевой машины; этот машинный код непонятен людям. Интерпретируемый же язык — это такой, в котором инструкции не исполняются целевой машиной, а считываются и исполняются другой программой (которая обычно написана на языке целевой машины). Как у компиляции, так и у интерпретации есть свои плюсы и минусы, и именно это мы и обсудим.

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

Компилируемые языки

Главное преимущество компилируемых языков — это скорость исполнения. Поскольку они конвертируются в машинный код, они работают гораздо быстрее и эффективнее, нежели интерпретируемые, особенно если учесть сложность утверждений некоторых современных скриптовых интерпретируемых языков.

Низкоуровневые языки как правило являются компилируемыми, поскольку эффективность обычно ставится выше кроссплатформенности. Кроме того, компилируемые языки дают разработчику гораздо больше возможностей в плане контроля аппаратного обеспечения, например, управления памятью и использованием процессора. Примерами компилируемых языков являются C, C++, Erlang, Haskell и более современные языки, такие как Rust и Go.

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

Интерпретируемые языки

В отличие от компилируемых языков, интерпретируемым для исполнения программы не нужен машинный код; вместо этого программу построчно исполнят интерпретаторы. Раньше процесс интерпретации занимал очень много времени, но с приходом таких технологий, как JIT-компиляция, разрыв между компилируемыми и интерпретируемыми языками сокращается. Примерами интерпретируемых языков являются PHP, Perl, Ruby и Python. Вот некоторые из концептов, которые стали проще благодаря интерпретируемым языкам:

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

Бонус: байткод-языки

Байткод-языки — это такие языки, которые используют для исполнения кода как компиляцию, так и интерпретацию. Java и фреймворк .NET — это типичные примеры байткод-языков. На самом деле, Java Virtual Machine (JVM) — это настолько популярная виртуальная машина для интерпретации байткода, что на ней работают реализации нескольких языков. Кстати, недавно стало известно, что в новой версии Java будет также поддерживаться и статическая компиляция.

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

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

Заключение

Многие языки в наши дни имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними на нет. У каждого вида исполнения кода есть преимущества и недостатки.

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

Байткод-языки, в свою очередь, пытаются использовать сильные стороны обоих видов языков, и у них это неплохо получается.

Хинт для программистов: если зарегистрируетесь на соревнования Huawei Cup, то бесплатно получите доступ к онлайн-школе для участников. Можно прокачаться по разным навыкам и выиграть призы в самом соревновании.

Перейти к регистрации

Перевод статьи «Programming Concepts: Compiled and Interpreted Languages»

Интерпретируемый язык программирования — это… Что такое Интерпретируемый язык программирования?

Интерпретируемый язык программирования — язык программирования, в котором исходный код программы не преобразовывается в машинный код для непосредственного выполнения центральным процессором (как в компилируемых языках), а исполняется с помощью специальной программы-интерпретатора.

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

Большое количество языков, включая BASIC, C, Lisp, Pascal и Python, имеют обе реализации. В Java используется JIT-компиляция для генерации машинного кода, хотя изначально он переводится в интерпретируемую форму. Языки Microsoft .NET Framework компилируются в Common Intermediate Language (CIL), который во время выполнения компилируется в нативный код. Большинство реализаций Lisp позволяют смешивать оба вида кода.

История

В ранние годы развития программирования на языки сильно влиял выбор способа выполнения. Например, компилируемые языки требовали задания типа данных переменной в момент ее описания или первого использования. В то время как интерпретируемые языки в силу своей динамической природы позволяли отказаться от этого требования, что давало больше гибкости и ускоряло разработку.

Изначально интерпретируемые языки преобразовывались в машинный код построчно, то есть каждая логическая строка компилировалась непосредственно перед выполнением. В результате каждая инструкция, заключенная в тело цикла и исполняемая несколько раз, столько же раз обрабатывалась транслятором. В настоящее время такие эффекты редки. Большинство интерпретируемых языков предварительно транслируются в промежуточное представление. Оно представляет собой байт-код или шитый код (threaded code). Это набор инструкций по вызову небольших фрагментов более низкоуровнего кода, эквивалентный нескольким командам ассемблера или командам виртуальной машины соответственно. Уже этот код испольняется интерпретатором или виртуальной машиной.

Например, такую схему используют следующие языки:

Промежуточный код может создаваться как явной процедурой компиляции всего проекта (Java), так и скрытой трансляцией каждый раз перед началом выполнения программы (Perl, Ruby) и при изменении исходного кода (Python).

Преимущества

Есть ряд возможностей, которые значительно легче реализовать в интерпретаторе, чем в компиляторе:

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

Недостатки

Основным недостатком является меньшая производительность по сравнению с компилируемыми языками, преобразуемыми в машинный код. Трансляция в байт-код и JIT-компиляция не решают этой проблемы полностью. Дополнительный слой интерпретатора или виртуальной машины замедляет выполнение программы и может требовать больше ресурсов.

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

Области использования

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

Пример

Программа helloworld.py на языке Python может содержать всего одну строку:
print "Hello world!" — интерпретатор этого языка (который сам, в свою очередь, написан на компилируемом языке программирования) сможет исполнить эту программу и вывести результат.
$ python helloworld.py
Hello world!

Список языков

К интерпретируемым языкам можно отнести все скриптовые языки.

В чем разница между компилируемым и интерпретируемым языком?

После прочтения некоторых материалов на эту тему я все еще не уверен, в чем разница между компилируемым языком и интерпретируемым языком. Мне сказали, что это одно из различий между Java и JavaScript. Не мог бы кто-нибудь помочь мне понять это?

java

javascript

programming-languages

Поделиться

Источник


SIr Codealot    

17 апреля 2010 в 04:44

7 ответов




167

В чем разница между компилируемым и интерпретируемым языком?

Разница не в языке, а в реализации .

Выбрав это из моей системы, вот ответ:

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

  • В интерпретируемой реализации исходная программа переводится во что-то другое. Другая программа, называемая «the interpreter», then examines «something else», выполняет все необходимые действия. В зависимости от языка и его реализации существует множество форм «something else». От более популярного к менее популярному, «something else» может быть

    • Двоичные инструкции для виртуальной машины, часто называемые байт-кодом , как это делается в Lua, Python, Ruby, Smalltalk и многих других системах (этот подход был популяризирован в 1970-х годах UCSD P-system и UCSD Pascal)

    • Древовидное представление исходной программы, например абстрактно-синтаксическое дерево, как это делается для многих прототипов или обучающих интерпретаторов

    • Маркированное представление исходной программы, аналогичное Tcl

    • Символы исходной программы, как это было сделано в MINT и TRAC

Одна вещь, которая усложняет проблему, заключается в том, что можно перевести (скомпилировать) байт-код в собственные машинные инструкции . Таким образом, успешная интепретированная реализация может в конечном итоге получить компилятор. Если компилятор работает динамически, за кулисами, его часто называют компилятором just-in-time или компилятором JIT. JITs были разработаны для Java, JavaScript, Lua и, осмелюсь сказать, для многих других языков. В этот момент у вас может быть гибридная реализация, в которой некоторый код интерпретируется, а некоторый код компилируется.

Поделиться


Norman Ramsey    

17 апреля 2010 в 06:06



57

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

Почему зачеркнутый текст? Как правильно указывает этот ответ , интерпретируемый/компилируемый-это конкретная реализация языка, а не язык как таковой . Хотя такие утверждения, как «C is a compiled language», в целом верны, ничто не мешает кому-то написать интерпретатор языка C. На самом деле, переводчики для C действительно существуют .

В принципе, скомпилированный код может быть выполнен непосредственно CPU компьютера. То есть исполняемый код указан на языке CPU «native» ( assembly language ).

Однако код интерпретируемых языков должен быть переведен во время выполнения из любого формата в машинные инструкции CPU. Этот перевод выполняется переводчиком.

Другой способ выразить это заключается в том, что интерпретируемые языки-это код, который переводится в машинные инструкции step-by-step во время выполнения программы, в то время как скомпилированные языки имеют код, переведенный до выполнения программы.

Поделиться


stakx — no longer contributing    

17 апреля 2010 в 04:49


  • Шаги, выполняемые в случае INTERPRETER и COMPILER

    В чем именно разница между интерпретируемым и компилируемым языком? Например, я хочу напечатать числа от 1 до 100. Как именно происходит последовательность операций в случае интерпретатора и компилятора. Кроме того,если это возможно, пожалуйста, предоставьте мне шаги в соответствии с Java языком и…

  • В чем разница между языком программирования и языком сценариев?

    Возможные Дубликаты : What’s разница между a “script” и an “application”? Когда язык считается языком сценариев? В чем разница между языком ядра веб-приложения и языком веб-сценариев? Что такое точное использование веб-скриптового языка, такого как Python? Когда мы…



16

Вот основное различие между языком компилятора и языком интерпретатора.

Язык компилятора

  • Принимает всю программу в качестве единого ввода и преобразует ее в объектный код, который хранится в файле.
  • Генерируется промежуточный объектный код
  • например: C,C++
  • Скомпилированные программы работают быстрее, потому что компиляция выполняется до выполнения.
  • Потребность в памяти больше связана с созданием объектного кода.
  • Ошибки отображаются после компиляции всей программы
  • Исходный код —Компилятор —Машинный код —Вывод

Язык переводчика:

  • Принимает одну инструкцию в качестве одного ввода и выполняет инструкции.
  • Промежуточный объектный код NOT генерируется
  • например: Perl, Python, Matlab
  • Интерпретируемые программы работают медленнее, поскольку компиляция и выполнение происходят одновременно.
  • Потребность в памяти меньше.
  • Ошибки отображаются для каждой отдельной инструкции.
  • Исходный код —Интерпретатор —Вывод

Поделиться


PGOEL    

21 августа 2018 в 14:06



5

Компилятор, как правило, считывает компьютерный код языка более высокого уровня и преобразует его либо в p-код, либо в машинный код. Интерпретатор запускается непосредственно из p-кода или интерпретируемого кода, такого как Basic или Lisp. Как правило, скомпилированный код работает намного быстрее, более компактен и уже обнаружил все синтаксические ошибки и многие из незаконных ссылочных ошибок. Интерпретируемый код находит такие ошибки только после того, как приложение попытается интерпретировать затронутый код. Интерпретируемый код часто хорош для простых приложений, которые будут использоваться только один или максимум пару раз, или, возможно, даже для прототипирования. Скомпилированный код лучше подходит для серьезных приложений. Компилятор сначала берет всю программу, проверяет ее на наличие ошибок, компилирует и затем выполняет. В то время как интерпретатор делает это построчно, поэтому он берет одну строку, проверяет ее на наличие ошибок, а затем выполняет ее.

Если вам нужна дополнительная информация, просто найдите в Google «difference between compiler and interpreter».

Поделиться


Salil    

17 апреля 2010 в 04:50



2

Это очень неясное различие, и на самом деле, как правило, не свойство самого языка, а скорее программы, которую вы используете для выполнения кода на этом языке.

Однако большинство языков используются в основном в той или иной форме, и да, Java по существу всегда компилируется, в то время как javascript по существу всегда интерпретируется.

Скомпилировать исходный код-это запустить на нем программу, которая генерирует двоичный исполняемый файл, поведение которого при запуске определяется исходным кодом. Например, javac компилирует файлы .java для чтения человеком в машиночитаемые файлы .class.

Для интерпретации исходного кода на нем запускается программа, которая сразу же создает определенное поведение, не создавая промежуточный файл. Например, когда ваш веб — браузер загружает stackoverflow.com, он интерпретирует кучу javascript (на которые вы можете посмотреть, просмотрев источник страницы) и производит множество приятных эффектов, которые имеют эти страницы-например, повышение голосов или маленькие полосы уведомлений в верхней части.

Поделиться


Personman    

17 апреля 2010 в 04:53




2

Интерпретируемый язык выполняется во время выполнения в соответствии с инструкциями, как в сценарии shell, а скомпилированный язык-это тот, который компилируется (изменяется на язык Assembly, который может понять CPU), а затем выполняется, как в c++.

Поделиться


Praveen Kishor    

18 декабря 2013 в 13:41



0

Как уже говорилось, компиляция и интерпретация специфичны для реализации языка программирования; они не присущи языку. Например, есть C переводчиков.

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

Во-первых, мы должны определить без двусмысленности интерпретаторы и компиляторы:

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

Компилятор от X до Y — это программа
(или машина, или просто какой-то механизм вообще)
, которая переводит любую программу p с некоторого языка X на другой язык.
семантически эквивалентная программа p’ на некотором языке Y таким образом, что интерпретация p’ с помощью интерпретатора для Y даст те же результаты и будет иметь те же эффекты, что и интерпретация p с помощью интерпретатора для X .

Обратите внимание, что с точки зрения программиста CPUs являются машинными интерпретаторами для их соответствующего родного машинного языка.

Теперь мы можем сделать предварительную классификацию языков программирования на 3 категории в зависимости от их наиболее распространенной реализации:

  • Жесткие компилируемые языки: когда программы полностью компилируются на машинный язык. Единственный используемый интерпретатор-это CPU. пример: обычно для запуска программы в C исходный код компилируется на машинный язык, который затем выполняется CPU.
  • Интерпретируемые языки: когда нет компиляции какой-либо части исходной программы на машинный язык. Другими словами, новый машинный код не генерируется; выполняется только существующий машинный код. Пример: в канонической реализации Python исходный код компилируется сначала в байт -код Python, а затем этот байт-код выполняется CPython, программой-интерпретатором для байт-кода Python .
  • Мягкие компилируемые языки: когда используется интерпретатор, отличный от CPU, но также части исходной программы могут быть скомпилированы на машинный язык. Это случай Java, когда исходный код сначала компилируется в байт-код, а затем байт-код может быть интерпретирован интерпретатором Java и/или дополнительно скомпилирован компилятором JIT.

Иногда мягкие и жесткие компилируемые языки называются просто компилируемыми, поэтому C#, Java, C, C++ называются компилируемыми.

В рамках этой классификации JavaScript раньше был интерпретируемым языком, но это было много лет назад. В настоящее время он JIT-компилируется на родной машинный язык в большинстве основных реализаций JavaScript, поэтому я бы сказал, что он попадает в мягкие компилируемые языки.

Поделиться


MrIo    

20 июля 2020 в 08:02



Похожие вопросы:

Почему java одновременно компилируется и интерпретируется

Возможный Дубликат : Является ли Java компилируемым или интерпретируемым языком программирования? Почему Java является одновременно компилируемым и интерпретируемым языком? Сначала мы компилируем…

Является ли Javascript компилируемым или интерпретируемым языком?

Можно ли назвать Javascript чистым интерпретируемым языком? Или у него тоже есть какой-то скомпилированный вкус? Мог бы кто-нибудь указать на причины, стоящие за обеими этими вещами, независимо от…

Является ли R интерпретируемым или компилируемым языком программирования?

Является ли R интерпретируемым или компилируемым языком программирования?

Разница между сценарием и языком программирования

В чем разница между скриптом и языком программирования ? что такое скрипты и язык программирования ниже :- Perl Python Ruby Groovy

Является ли Ruby скриптовым языком или интерпретируемым языком?

Я только что заметил, что на странице Википедии Ruby этот язык определяется как интерпретируемый язык. Я понял, что, вероятно, в моем прошлом чего-то не хватает. Я всегда знал разницу между…

Шаги, выполняемые в случае INTERPRETER и COMPILER

В чем именно разница между интерпретируемым и компилируемым языком? Например, я хочу напечатать числа от 1 до 100. Как именно происходит последовательность операций в случае интерпретатора и…

В чем разница между языком программирования и языком сценариев?

Возможные Дубликаты : What’s разница между a “script” и an “application”? Когда язык считается языком сценариев? В чем разница между языком ядра веб-приложения и языком…

В чем разница между языком программирования C и языком программирования C под linux?

В чем разница между языком программирования C и языком программирования C под Linux? Является ли синтаксис одинаковым в обоих случаях? Или разница только в том, когда вы выполняете программу?

Почему Java является одновременно компилируемым и интерпретируемым языком, когда JIT также компилирует байт-код?

Я читал, что исходный код java компилируется в ‘bytecode’, затем он снова становится ‘Compiled’, а JIT-в ‘machine code’. То есть исходный код сначала компилируется в независимый от платформы…

Является ли C компилируемым или/и интерпретируемым?

Есть много ответов и цитат о Compiled vs. Interpreted, и я действительно понимаю разницу между ними. Когда речь заходит о C, я не уверен: является ли C компилируемым или интерпретируемым языком, или…

Каковы плюсы и минусы интерпретируемых языков?

Сейчас я изучаю Perl. Каковы плюсы и минусы интерпретируемых языков?

programming-languages

interpreted-language

Поделиться

Источник


Nathan Campos    

22 октября 2009 в 23:12

9 ответов


  • каковы плюсы / минусы py2exe

    я ищу простой скрипт, который будет компилироваться до exe , и я нашел py2exe , прежде чем решил работать с ним , как вы думаете, каковы плюсы и минусы инструмента py2exe?

  • Каковы плюсы и минусы Haskell?

    Я выучил несколько языков, но теперь хочу выбрать один. Язык, который мне больше всего понравился, был Haskell, который похож на интерпретируемый язык, но является компилируемым. Каковы плюсы и минусы Haskell?



14

Вопиющая копия из википедии , так что я сделаю это сообщество wiki.

Преимущества интерпретируемых языков

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

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

Недостатки интерпретируемых языков

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

Поделиться


Nifle    

22 октября 2009 в 23:20



6

Плюсы:

  • Быстрое прототипирование (без цикла записи, компиляции, выполнения)
  • Кросс-платформенный (при условии, что интерпретаторы существуют для каждой платформы)

Аферы:

  • Производительность (не будет такой быстрой, как скомпилированные языки)

Поделиться


t_scho    

22 октября 2009 в 23:17



2

Самый большой недостаток? Большинство сказали бы, что скорость выполнения, но это не всегда верно. Большинство современных интерпретируемых языков в наши дни преобразуют файлы, подлежащие интерпретации, в промежуточное состояние при построении, которое при выполнении превращается в машинный код, как и любой другой язык. С умным кэшированием, которое в основном распространено в этих языковых VMs в наши дни, это не должно быть слишком большой проблемой. Это, конечно, не означает, что производительность не является проблемой с интерпретируемыми языками, просто она часто не так плоха, как можно было бы предположить.

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

Лично для меня самым большим недостатком является необходимость того, чтобы интерпретатор всегда присутствовал перед выполнением. Это довольно часто снижает переносимость, особенно потому, что интерпретируемые языки не всегда являются кроссплатформенными.

Поделиться


Nathan Kleyn    

22 октября 2009 в 23:20




1

Зубрить:

  • Самым большим недостатком, вероятно, является скорость выполнения

Про:

  • Самым большим плюсом, вероятно, является время поворота, т. е. Цикл итераций тестирования кода

Поделиться


jldupont    

22 октября 2009 в 23:16



1

Чтобы подчеркнуть очевидный и общий момент, скомпилированные языки, как правило, имеют более высокую производительность, чем интерпретируемые, поскольку компиляция исключает необходимость в интерпретаторе времени выполнения.

Скомпилированные языки больше подходят для коммерческого настольного программного обеспечения, поскольку исходный код не поставляется вместе с ним.

Интерпретируемые языки, как правило, немного быстрее усваиваются, поскольку они позволяют быстро edit/run/repeat, не дожидаясь компилятора. По моему опыту, они также имеют тенденцию быть более высокого уровня, что также облегчает их.

Поделиться


Adam Bard    

22 октября 2009 в 23:18



0

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

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

Поделиться


Andrew Keith    

22 октября 2009 в 23:21


Поделиться


srini.venigalla    

23 октября 2009 в 00:26



0

Как java интерпретируется языком

Плюсы:

  • Совместимость: Java виртуальная машина одобряет эту концепцию «Write once, run everywhere.»
  • Безопасность: Программа работает в JVM, поэтому, если произойдет какой-либо сбой, это не повлияет на файлы операционных систем.
  • Управление памятью.

Аферы:

  • виртуальная машина Java имеет множество реализаций, например, при написании программы, использующей функции Java 8, эта программа должна работать на JVM с версией не менее 8.

Поделиться


Mohamed Ali    

15 июля 2017 в 17:05



0

Существенным преимуществом интерпретируемого языка является то, что его не нужно компилировать для каждой аппаратной цели отдельно.

Недостатком является то, что это делает выполнение кода медленнее.

Поделиться


Ravi Ranjan Singh    

05 апреля 2020 в 11:20


Похожие вопросы:

Каковы плюсы и минусы элемента изображения?

Каковы плюсы и минусы элемента HTML5 picture ? В частности, будет ли браузер скачивать все изображения? Или браузер загружает только изображение, соответствующее запросу media?

Микросервисы: каковы плюсы и минусы?

Каковы плюсы и минусы использования микросервисов по сравнению с альтернативными архитектурами? Существует ли эмпирическое правило, когда следует использовать микросервисы?

Каковы плюсы и минусы набора деревьев

Просто интересно, каковы плюсы и минусы a TreeSet, если кто-нибудь может мне сказать, пожалуйста? Спасибо!

каковы плюсы / минусы py2exe

я ищу простой скрипт, который будет компилироваться до exe , и я нашел py2exe , прежде чем решил работать с ним , как вы думаете, каковы плюсы и минусы инструмента py2exe?

Каковы плюсы и минусы Haskell?

Я выучил несколько языков, но теперь хочу выбрать один. Язык, который мне больше всего понравился, был Haskell, который похож на интерпретируемый язык, но является компилируемым. Каковы плюсы и…

Плюсы и минусы языков программирования для XML и манипулирования строками

Я не хочу, чтобы это было самоуверенно. Каковы серьезные плюсы / минусы различных серверных языков в отношении создания / модификации xml. В настоящее время я исследую новое направление…

Каковы плюсы и минусы PHPDesigner и PhpStorm?

Каковы плюсы и минусы PHPDesigner и PhpStorm?

Каковы плюсы и минусы FXML?

Каковы плюсы и минусы использования FXMLs или не использования FXMLs для разработки JavaFX приложений? Для разработки приложения enterprise JavaFX какому подходу следует следовать?

Каковы плюсы и минусы инструментов RDB2RDF?

Мне нужно знать разницу между инструментами RDB2RDF. Может ли кто-нибудь сказать мне, каковы плюсы и минусы инструментов RDB2RDF? Особенно следующие: виртуоз, Ultrawrap, наверх, трансформирующиеся,…

Каковы плюсы и минусы использования DVC и Pachyderm?

Каковы плюсы и минусы использования любого из них? https://github.com/iterative/dvc https://github.com/pachyderm/pachyderm

О JavaScript — JavaScript | MDN

JavaScript® (часто сокращают до JS) — это лёгкий, интерпретируемый, объектно-ориентированный язык с функциями первого класса, самый известный скриптовый язык для веб-страниц, но также используется во многих не браузерных окружениях. Прототипно-ориентированный, мультипарадигменный язык сценариев, который поддерживает динамический, объектно-ориентированный, императивный и функциональный стили программирования.

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

Вопреки распространённому мнению, JavaScript не является «интерпретируемым Java». В двух словах, JavaScript — это динамический скриптовый язык, поддерживающий прототипное создание объектов. Базовый синтаксис намеренно похож на Java и C++, чтобы уменьшить число новых концепций, необходимых для изучения языка. Такие языковые конструкции, как if, for, while, switch, try ... catch похожи на конструкции этих языков.

JavaScript может функционировать и как процедурный, и как объектно-ориентированный язык. Объекты можно создавать программно во время выполнения, путём присоединения методов и свойств или пустых объектов во время выполнения, в отличие от синтаксических определений классов в компилируемых языках, таких как С++ или Java. После того, как объект был создан, он может быть использован в качестве плана (или прототипа) для создания похожих объектов.

Динамические возможности JavaScript включают: создание объектов во время выполнения, переменное число параметров, динамическое создание скриптов (с помощью eval), перебор объектов (с помощью for ... in), восстановление исходного кода (программы на JavaScript могут декомпилировать тела функций обратно в исходный код).

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

Mozilla предоставляет две реализации JavaScript. Самая первая реализация JavaScript была создана Бренданом Эйхом (Brendan Eich) в компании Netscape, и с тех пор обновляется, чтобы соответствовать ECMA-262 Edition 5 и более поздним версиям. Этот движок называется SpiderMonkey и реализован на языке C/C++. Движок Rhino создан Норрисом Бойдом (Norris Boyd) и реализован на языке Java. Как и SpiderMonkey, Rhino соответствует ECMA-262 Edition 5.

Несколько оптимизаций, таких как TraceMonkey (Firefox 3.5), JägerMonkey (Firefox 4) и IonMonkey, добавили в SpiderMonkey со временем. Работа всегда продолжается, чтобы улучшить производительность выполнения JavaScript.

Кроме вышеприведённых существуют и другие популярные реализации:

  • V8 от Google, используемый в браузерах Google Chrome и последних версиях Opera. Также используется в Node.js.
  • JavaScriptCore (SquirrelFish/Nitro), используемый в WebKit браузерах, например, в Apple Safari.
  • Carakan используется в старых версиях Opera.
  • Chakra используется в Internet Explorer (язык, который реализует данный движок, называется JScript, чтобы избежать проблем с авторскими правами).

Каждый движок mozilla.org предоставляет публичный API, который могут использовать разработчики приложений для интеграции JavaScript в своё ПО. Однако, наиболее распространённой средой для JavaScript являются веб-браузеры. Веб-браузеры обычно используют публичный API для создания объектов среды, отражающих DOM в JavaScript.

JavaScript также применяется как скриптовый язык на стороне сервера. JavaScript сервер предоставляет объекты среды, представляющие объекты HTTP запросов и ответов, которые могут быть использованы программой на JavaScript для динамической генерации веб-страниц. Популярным примером является Node.js.

SpiderMonkey
SpiderMonkey — это интерпретатор языка JavaScript, написанный на языке C. Информация, относящаяся к реализации движка JavaScript Mozilla на C/C++ (aka SpiderMonkey), включая, как вставлять его в приложения.
Rhino
Информация, относящаяся к реализации JavaScript, написанной на Java (aka Rhino).
Ресурсы по языку
Ссылки на опубликованные стандарты по JavaScript.
Повторное введение в JavaScript
Руководство и справочник по JavaScript.

JavaScript® — торговая марка или зарегистрированная торговая марка Oracle в США и других странах.

Знакомьтесь — Python | PyLab

Он же Пайтон, он же – Питон. И то, и другое – правильно. Здесь, по-русски мы будем произносить – Питон. На самом деле название не имеет никакого отношения к рептилии. Язык программирования Python получил это название в честь английского коллектива комических актеров «Монти Пайтон» (Monty Python). Кстати, будет время – познакомьтесь с их творчеством. Тогда вас не будет удивлять упоминание в документации о спаме и яйцах.
Тем не менее, официальным символом языка стала милая змейка – очевидно, что для небольшого значка на рабочем столе это проще и понятнее, чем лица шести юмористов.
Создатель Python – Гвидо ван Россум. В конце 80-х годов ему нравились особенности нескольких разных языков программирования. Но ни один из них не обладал сразу всеми возможностями, которые Гвидо хотелось бы иметь.
Писать язык Python Гвидо начал 1989 году, и первая версия была Python представлена в 1991 году.

Итак, Каковы особенности языка программирования Python?

Python прост в использовании

Что такое язык программирования? Это «мостик» между мозгом программиста и компьютера. Языки высокого уровня, к которым относится Python – предполагают, что они ближе к человеческому языку, чем к машинному. В отличие от, например, Ассемблера. А у Python настолько простые и ясные правила, что он приближается к английскому языку. Поэтому часто программирование на языке Python называют «программированием со скоростью мысли». Код на языке Python лаконичен и требует меньше времени на разработку, чем коды на других популярных языках. Самое главное, чтобы у программиста была «мысль» – а осуществить ее быстро и эффективно – поможет Python.

Единый стиль написания кода для всех – соглашение

PEP

Может вас это удивит, а может и нет. Программистам приходится не только писать, но и читать код.
Синтаксис языка Python, очень красив и практически исключает написание некрасивого кода.
Дзэн Питон : читаемость имеет значение.

Программисты Python соблюдают единый стиль кода, который описан в документе под названием PEP8.
PEP – Python Enhanced Proposal (PEP) – переводится, как Заявки по улучшению языка Python.
Использование PEP позволяет создавать код, понятный любому другому программисту – вы читаете чужой код, как свой!
Конечно, вы можете не использовать PEP при разработке и код будет работать, но это во-первых, вызовет удивление у коллег, во-вторых, заставит усомниться в вашем профессионализме (если не сказать – здравом рассудке), ну а в третьих – вам будет сложно это сделать, так редакторы, поддерживающие Python поддерживают стандарт PEP (например, PyCharm)

Python – гибкий язык.

С одной стороны, Python – объектно-ориентированный язык. Вся мощь объектно-ориентированного подхода доступна программисту Python, но с другой стороны – Python не вынуждает программиста всегда использовать ООП. Только Вы решаете, когда использовать объектно-ориентированное программирование, а когда – нет.
На тему необходимости использования классов до сих пор разгораются споры, мы расскажем о них здесь.
А сейчас главная мысль – Python совмещает в себе гибкость и функциональность.
Дзэн Питон говорит – простое лучше, чем сложное.

Python – динамический язык

Подход, применяемый в Python к типизации объектов, радикально отличается от языков со строгой типизацией.
Если вы сталкивались с такими языками, как PASCAL, C++ или Java, то помните, что в этих языках тип объекта должны быть объявлен предварительно и остается неизменным.
В Python же тип объекта – если говорить просто – объявляется в момент обращения к нему и его можно произвольно менять во время выполнения кода. Более подробно мы расскажем об этом в отдельной статье.
Да, в Pyhon есть изменяемые (mutable) и неизменяемые (unmutable) объекты, но это уже совсем другая история….

Python – интерпретируемый язык

Что это означает – интерпретируемый? А то, что код выполняется (интерпретируется) из исходного текста, без предварительного перевода в машинный код. Код, написанный на компилируемых языках, типа C++, сначала переводятся в машинный код (самый распространенный пример – откомпилированного кода – файл с расширением .exe).
Принято считать, что интерпретируемые языки программирования работают медленнее, чем компилируемые – из-за того, что трансляция осуществляется не сразу. Но отладка и написание кода происходит быстрее, потому что не нужно ожидать, пока компилятор закончит работать.
Можно долго спорить, является ли Python компилируемым или интерпретируемым языком. Несмотря на то, что во многих отношениях Python работает как интерпретируемый, его код перед выполнением компилируется. Многие его компоненты работают на полной скорости компьютера, поскольку написаны они на С.

Python – расширяемый язык

Расширяемость означает, что язык программирования может быть дополнен. Расширяемые языки программирования являются очень мощными. Дополнения делают их пригодными для огромного количества операционных систем и применений. Расширения могут добавлять новые типы данных, плагины и модули. Для расширения в языке Python предусмотрено несколько способов. Главная группа программистов работает над его улучшением и изменением. Сотни других пишут модули для выполнения конкретных целей.
Принимая во внимание, что Python – язык с открытым исходным кодом, вы можете написать свой модуль для библиотеки Python.

Python – «склеивающий» язык.

Часто в недостатках языка упоминается недостаточное быстродействие. Если вы столкнулись с такое ситуацией, то помните – Python легко интегрировать с другими языками, используя их сильные стороны – например, быстродействие C/C++ и не поступаться простотой и скоростью разработки.

Python – кросс-платформенный язык.

Код Python может быть использован на любой платформе, вне зависимости от системы, на которой был создан этот код. Windows, Macintosh, Linux – это только часть списка.
Код Python будет работать на любом компьютере, на котором установлен интерпретатор Python

Python – система с открытым кодом

И абсолютно бесплатная.
Чтобы установить интерпретатор Python и пользоваться им, не нужно платить ни копейки.
Лицензия, под которой доступен Python, разрешает, например, делать копии Python, в том числе модифицированные. Вы даже можете продать Python, если найдете покупателя :).

Сообщество программистов на

Python

Как говорится, last but not the least.
Отличительной чертой соoбщества программистов Python является то, что оно абсолютно дружелюбно к новичкам.
Вы можете задать свой вопрос Python-сообществу, например, здесь. . Это особая рассылка, в которой новички могут задавать свои вопросы о языке. Есть и другие сообщества, посвященные вопросам использование Python.
А еще, если у Вас есть вопрос по Python, Вы можете посоветоваться с Жульеном!

Поделитесь с друзьями:

Разница между скомпилированным и интерпретируемым языком

Необходимое условие — компилятор и интерпретатор

Скомпилированный язык:
Скомпилированный язык — это язык программирования, который обычно компилируется и не интерпретируется. Это тот, где программа после компиляции выражается в инструкциях целевой машины; этот машинный код не поддается расшифровке людьми. Типы компилируемых языков — C, C ++, C #, CLEO, COBOL и т. Д.

Интерпретируемый язык:
Интерпретируемый язык — это язык программирования, который обычно интерпретируется без компиляции программы в машинные инструкции.Это тот, где инструкции не выполняются напрямую целевой машиной, а вместо этого читаются и выполняются какой-либо другой программой. Диапазоны интерпретируемых языков — JavaScript, Perl, Python, BASIC и т. Д.

Давайте посмотрим на разницу между скомпилированным и интерпретируемым языком:

S.NO. Скомпилированный язык ИНТЕРПРЕТИРУЕМЫЙ ЯЗЫК
1 Скомпилированный язык — это язык программирования, реализациями которого обычно являются компиляторы, а не интерпретаторы. Интерпретируемый язык — это язык программирования, реализации которого выполняют инструкции напрямую и свободно, без предварительной компиляции программы в инструкции машинного языка.
2 На этом языке после компиляции программы она выражается в инструкциях целевой машины. В этом языке инструкции не выполняются непосредственно целевой машиной.
3 Для перехода от исходного кода к выполнению требуется как минимум два шага. От исходного кода до исполнения всего один шаг.
4 На этом языке скомпилированные программы работают быстрее, чем интерпретируемые. На этом языке интерпретируемые программы можно изменять во время работы программы.
5 На этом языке ошибки компиляции препятствуют компиляции кода. На этих языках вся отладка происходит во время выполнения.
6 Код скомпилированного языка может выполняться непосредственно центральным процессором компьютера. Программа, написанная на интерпретируемом языке, не компилируется, она интерпретируется.
7 Этот язык обеспечивает лучшую производительность. Эти языки обеспечивают относительно низкую производительность.
8 Пример скомпилированного языка — C, C ++, C #, CLEO, COBOL и т. Д. Пример интерпретируемого языка — JavaScript, Perl, Python, BASIC и т. Д.

Интерпретируемый язык — HandWiki

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

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

Интерпретируемые языки можно также противопоставить машинным языкам.Функционально и выполнение, и интерпретация означают одно и то же — выборку следующей инструкции / оператора из программы и ее выполнение. Хотя интерпретируемый байт-код дополнительно идентичен машинному коду по форме и имеет представление на ассемблере, термин «интерпретируемый» иногда зарезервирован для «программно обрабатываемых» языков (виртуальной машиной или эмулятором) поверх собственного (то есть аппаратного) процессора.

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

Многие языки были реализованы с использованием как компиляторов, так и интерпретаторов, включая BASIC, C, Lisp и Pascal. Java и C # скомпилированы в байт-код, интерпретируемый язык, удобный для виртуальных машин. Реализации Lisp могут свободно смешивать интерпретируемый и скомпилированный код.

Различие между компилятором и интерпретатором не всегда четко определено, и многие языковые процессоры сочетают и то, и другое.

Историческая справка

На заре вычислений на дизайн языка сильно повлияло решение использовать компиляцию или интерпретацию в качестве способа выполнения.Например, Smalltalk (1980), который был разработан для интерпретации во время выполнения, позволяет универсальным объектам динамически взаимодействовать друг с другом.

Изначально интерпретируемые языки компилировались построчно; то есть каждая строка была скомпилирована в момент ее выполнения, и если цикл или подпрограмма вызвали многократное выполнение определенных строк, они каждый раз перекомпилировались. Это стало гораздо реже. Большинство так называемых интерпретируемых языков используют промежуточное представление, сочетающее компиляцию и интерпретацию.

Примеры включают:

Промежуточное представление может быть скомпилировано раз и навсегда (как в Java), каждый раз перед выполнением (как в Ruby) или каждый раз, когда перед выполнением обнаруживается изменение в источнике (как в Python).

Преимущества

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

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

Кроме того, исходный код можно читать и копировать, что дает пользователям больше свободы.

Недостатки

Недостатки интерпретируемых языков:

  • Без статической проверки типов, которая обычно выполняется компилятором, программы могут быть менее надежными (цитата?), Потому что проверка типов устраняет класс ошибок программирования (хотя проверка типов кода может выполняться с использованием дополнительной подставки — одни инструменты.См., Например, TypeScript)
  • Интерпретаторы могут быть восприимчивы к атакам внедрения кода.
  • Более медленное выполнение по сравнению с прямым выполнением машинного кода на главном ЦП. Метод, используемый для повышения производительности, — это своевременная компиляция, которая преобразует часто выполняемые последовательности интерпретируемых инструкций в машинный код хоста. JIT чаще всего сочетается с компиляцией в байтовый код, как в Java.
  • Исходный код можно читать и копировать (например, JavaScript на веб-страницах) или более легко реконструировать посредством отражения в приложениях, где интеллектуальная собственность имеет коммерческое преимущество.В некоторых случаях обфускация используется как частичная защита от этого.

Лакмусовые тесты

Можно использовать несколько критериев, чтобы определить, будет ли конкретный язык называться компилируемым или интерпретируемым его пользователями:

  • Если подпрограмма может быть вызвана до того места, где она определена в исходном коде, весь исходный код, вероятно, компилируется в промежуточное представление перед выполнением. Примеры: Perl, Java
  • Если промежуточное представление (e.грамм. байт-код) обычно создается и вызывается непосредственно как отдельный шаг при выполнении кода, язык, скорее всего, будет считаться скомпилированным. Примеры: Java, C
  • .

  • Если синтаксическая ошибка в исходном коде не препятствует выполнению предыдущих операторов, скорее всего, это интерпретированная парадигма. Примеры: языки оболочки Unix

Они не являются окончательными. Скомпилированные языки могут иметь свойства, подобные интерпретатору, и наоборот.

Список часто используемых интерпретируемых языков

Языки, обычно компилируемые в байт-код

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

См. Также

Цитата

Список литературы

  • Браун П.Дж. (1979). Написание интерактивных компиляторов и интерпретаторов . Джон Вили. ISBN 0-471-27609-X.

Интерпретируемый язык

— обзор

12.5 Набор средств визуализации

Одной из самых важных библиотек визуализации с открытым исходным кодом для пользователей HPC является VTK [3].VTK предоставляет множество алгоритмов трехмерной визуализации, поддержку параллельных вычислений и интерфейсы для интерпретируемых языков, таких как Python, которые используются в качестве примеров в этом разделе. VTK также используется в нескольких полнофункциональных инструментах визуализации, включая ParaView и VisIt, которые проиллюстрированы далее в этой главе.

Самая последняя версия VTK — 8.0 и концептуально построена вокруг идеи конвейера данных, включающего карты с ключами и значениями для передачи информации по конвейеру, объекты для хранения исходных данных, алгоритмы и фильтры, а также класс для соединяясь вместе и выполняя конвейер.В терминологии VTK «картографы» преобразуют данные в графические примитивы, в то время как «актеры» изменяют визуальные свойства этой графики. Пример, показанный на рис. 12.14 и код 12.3, считывает данные HDF5 « частиц.h5 » из главы 10 и строит линию в 3D через точки в наборе данных HDF5 с помощью VTK.

Рисунок 12.14. Два трехмерных графика расположения частиц, найденных в файле sizes.h5 из главы 10, с использованием VTK. Соответствующий код для этой визуализации находится в Коде 12.3.

1 import h5py # интерфейс HDF5 Python

2 import vtk # интерфейс VTK Python

3 f = h5py.File («sizes.h5», «r») # читаем в файле «sizes.h5» »

4 dataset = f [« Particle data »] # доступ к набору данных« Particle data »в« sizes.h5 »

5 точек = vtk.vtkPoints ()

6 точек.SetNumberOfPoints (dataset.shape [0] ) # Создать список точек для расположения частиц

7 для idx, item in enumerate (dataset):

8 точек.SetPoint (idx, набор данных [idx] [0], набор данных [idx] [1], набор данных [idx] [2]) # присвоить значения

9

10 строк = vtk.vtkCellArray ()

11 строк.InsertNextCell (dataset.shape [0])

12 для idx в диапазоне (0, dataset.shape [0]): # назначить связь между точками

13 строк. InsertCellPoint (idx)

14

15 polygon = vtk.vtkPolyData () # создать геометрическую структуру многоугольника

16 polygon.SetPoints (points)

17 многоугольников.SetLines (lines)

18

19 polygonMapper = vtk.vtkPolyDataMapper () # преобразовать полигональные данные в графику

20 polygonMapper.SetInputData (polygon)

21 polygonMapper.Update ()

.vtkAxesActor () # создать несколько осей

24 polygonActor = vtk.vtkActor () # Управлять рендерингом маппера

25 polygonActor.SetMapper (polygonMapper)

26 renderer = vtk.vtkRenderer () # Окно просмотра на экране

27 рендерер.AddActor (polygonActor)

28 Renderer.AddActor (axes)

29 renderer.SetBackground (0.1, 0.2, 0.3)

30

31 renderer.ResetCamera ()

32

33 renderWindow

34 renderWindow.AddRenderer (рендерер)

35

36 interactive_ren = vtk.vtkRenderWindowInteractor () # включить интерактивность с визуализацией

37 interactive_ren.SetRenderWindow (renderWindow)

38 interactive_ren.Initialize ()

39 interactive_ren.Start ()

Код 12.3. Скрипт Python для чтения и визуализации трехмерной траектории данных частиц, хранящихся в файле sizes.h5 из главы 10, с использованием VTK. Полученная визуализация представлена ​​на рис. 12.14.

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

Рисунок 12.15. Изоповерхность в VTK с использованием кода 12.4.

1 import vtk # интерфейс VTK Python

2

3 rt = vtk.vtkRTAnalyticSource () # данные для тестирования

4

5 contour_filter = vtk.vtkContourFilter () # isosurface2 filter () # isosurface2 rt.GetOutputPort ())

7 contour_filter.SetValue (0, 190)

8

9 mapper = vtk.vtkPolyDataMapper ()

10 mapper.SetInputConnection (contour_filter.GetOutputPort ())

11

12 субъект = vtk.vtkActor ()

13 субъект.SetMapper (сопоставитель)

14

15 рендерер = vtk.vtkActor ()

актер)

17

18 renderer.SetBackground (0.9, 0.9, 0.9)

19

20 renderWindow = vtk.vtkRenderWindow ()

21 renderWindow.AddRenderer (средство визуализации)

600Size (Renderer)

22 renderWindow (Renderer) )

23

24 interactive_ren = vtk.vtkRenderWindowInteractor () # включить интерактивность с визуализацией

25 interactive_ren.SetRenderWindow (renderWindow)

26 interactive_ren.Initialize ()

27 interactive_ren.Start ()

Код 12.4. Пример изоповерхности с использованием фильтра ContourFilter; значение изоповерхности задается в строке 7. Тестовые данные были предоставлены с помощью vtkRTAnalyticSource в строке 3. Полученная визуализация показана на рис. 12.15.

Одним из способов выполнения объемного рендеринга с помощью трассировки лучей в VTK является использование класса SmartVolumeMapper, показанного в Коде 12.5 и Рис. 12.16. В этом примере функция передачи цвета и карта непрозрачности передаются как свойства для соответствующего затенения лучей при их прохождении через объем.

Рисунок 12.16. Пример объемного рендеринга в VTK с использованием кода 12.5.

1 импорт vtk

2

3 rt = vtk.vtkRTAnalyticSource ()

4 rt.Update ()

5

6 image = rt.GetOutput ()

7 range = image

8

9 mapper = vtk.vtkSmartVolumeMapper () # объемный рендеринг

10 mapper.SetInputConnection (rt.GetOutputPort ())

11 mapper.SetRequestedRenderModeToRayCast ()

12

13 colorPointDunction

(color = vtkor.vtk) ], 0,0, 0,0, 1,0)

15 цветов.AddRGBPoint ((диапазон [0] + диапазон [1]) ∗ 0,75, 0,0, 1,0, 0,0)

16 цветов.AddRGBPoint (диапазон [1], 1,0, 0,0 , 0,0)

17

18 непрозрачность = vtk.vtkPiecewiseFunction ()

19 непрозрачность.AddPoint (диапазон [0], 0,0)

20 непрозрачность.AddPoint ((диапазон [0] + диапазон [1]) ∗ 0,5, 0,0)

21 непрозрачность.AddPoint (диапазон [1], 1,0)

22

23 свойства = vtk.vtkVolumeProperty ()

24 свойства.SetColor (цвет)

25 свойств.SetScalarOpacity (непрозрачность)

26 свойств.SetInterpolationTypeToLinear ()

27 properties.ShadeOn = vtk.vtkVolume ()

30 актеров.SetMapper (mapper)

31 актер.SetProperty (свойства)

32

33 renderer = vtk.vtkRenderer ()

34 renderWindow = vtk.vtkRenderWindow ()

35 renderWindow.AddRenderer (средство визуализации)

36

.

38 renderer.ResetCamera ()

39 renderer.SetBackground (0.9, 0.9, 0.9)

40 renderWindow.SetSize (600, 600)

41

42 interactive_ren = vtk.vtkRenderWindow_Interactor ()

43 interactiveSetRenderWindow (renderWindow)

44 interactive_ren.Initialize ()

45 interactive_ren.Start ()

Код 12.5. Пример объемного рендеринга с использованием VTK. Тестовые данные были предоставлены с помощью vtkRTAnalyticSource в строке 3. Настройки непрозрачности и цветовой карты были сделаны на основе диапазона скаляров изображения. Полученная визуализация показана на рис. 12.16.

Линии тока в VTK выполняются с использованием класса StreamTracer. Линии обтекания требуют ввода векторных данных, но VTK также предоставляет средства для получения градиента скалярных данных и последующего назначения вывода как вектора, который можно визуализировать как линию обтекания.Весь этот конвейер показан в коде 12.6 и на рис. 12.17. Может быть указана начальная точка для одной линии тока, как показано в комментарии к строке 31 кода 12.6, или может быть создана начальная область линии тока для запуска нескольких линий тока, как показано в строках 23–27.

Рисунок 12.17. Линии тока в VTK с использованием градиента данных, показанных на рис. 12.15 и 12.16. Код, создавший эти линии тока в VTK, показан в Коде 12.6.

1 импорт vtk

2

3 rt = vtk.vtkRTAnalyticSource () # данные для тестирования

4 rt.Update ()

5

6 # вычислить градиент тестовых данных

7 gradient = vtk.vtkImageGradient ()

8 gradient.SetDimensionality (3) 9 gradient.SetInputConnection (rt.GetOutputPort ())

10 gradient.Update ()

11

12 # Создание вектора

13 aa = vtk.vtkAssignAttribute ()

14 aa.ALARSign (« «ВЕКТОРЫ», «ТОЧКА_ДАННЫЕ»)

15 шт.SetInputConnection (gradient.GetOutputPort ())

16 aa.Update ()

17

18 # Create Stream Lines

19 rk = vtk.vtkRungeKutta45 ()

20 streamerk = 9Streamr.v .SetInputConnection (aa.GetOutputPort ())

22

23 # семян линий потока

24 семян = vtk.vtkPointSource ()

25 семян.SetRadius (1)

26 семян.SetCenter (1,1.1, 0.5)

27 семян.SetNumberOfPoints (50)

28

29 # варианты для стримера

30 стример.SetSourceConnection (seed.GetOutputPort ())

31 # streamer.SetStartPosition (1.0,1.1,0.5)

32 streamer.SetMaximumPropagation (500)

33 streamer.SetMinimumIntegrationStep (0.01)

35 streamer.SetIntegrator (rk)

36 streamer.SetMaximumError (1.0e-8)

37

38 mapStream = vtk.vtkPolyDataMapper ()

39 mapStream.SetInputConnection = vtk.vtkActor ()

41 streamActor.SetMapper (mapStream)

42

43 ren = vtk.vtkRenderer ()

44 renWin = vtk.vtkRenderWindow ()

45 renWin.AddRenderer () .vtkRenderWindowInteractor ()

47 iren.SetRenderWindow (renWin)

48

49 ren.AddActor (streamActor)

50 ren.SetBackground (0.9,0.9,0.9)

51 renWin.SetSize (300

)

iren.Initialize ()

53 iren.Start ()

Код 12.6. Пример кода с использованием vtkRTAnalyticSource для создания линий потока с помощью VTK. Градиент тестовых данных вычисляется в строках 7–10; затем градиент назначается как векторные данные для использования фильтром vtkStreamTracer для создания линий тока. Начальные точки для линий тока получены из точечных источников на сфере, вычисленных в строках 24–27. Также может быть назначена одна начальная точка, как показано в комментарии в строке 31. Результат этого кода показан на рис.12.17.

Хотя библиотека VTK обеспечивает полное решение конвейера визуализации для пользователей HPC, многие пользователи предпочтут готовое решение для визуализации, которое управляется мощным графическим интерфейсом пользователя (GUI) и готово для использования в суперкомпьютерах без необходимости писать какой-либо код. Два широко используемых инструмента визуализации под ключ, которые включают мощные алгоритмы VTK, — это ParaView и VisIt.

В чем разница между скомпилированной и интерпретируемой программой?

Этот контент был заархивирован и больше не поддерживается Университетом Индианы.Информация здесь может быть неточной, а ссылки могут быть недоступны или надежны.

Большинство программ написано на языке высокого уровня, таком как
C, Perl или Java. Как человек
язык позволяет людям легко общаться друг с другом, поэтому
компьютерные языки упрощают задание компьютеру, что ему делать.
Однако, поскольку компьютер понимает только числа, разговаривая с одним
это похоже на разговор с кем-то, с кем вы не говорите на одном языке. Ты
нужен переводчик для правильного общения, и вот что
интерпретаторы и компиляторы делают.

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

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

Потому что разные типы компьютеров не говорят на машинах друг друга
языков, скомпилированная программа будет работать только на той платформе, на которой она была
предназначен для. Например, программа, написанная для HP-UX
обычно не работает на компьютере Mac OS или компьютере
под управлением Solaris. Несмотря на этот недостаток, скомпилированные программы
быстрее, чем те, которые должны выполняться через интерпретатор. Также,
часто можно перекомпилировать программу, чтобы она работала на
разные платформы. Примеры языков, которые обычно используются для
создавать скомпилированные программы, включая C, Fortran и
КОБОЛ.

В интерпретируемой программе, с другой стороны, исходный код
обычно это программа. Программы этого типа (часто известные как
скрипты) требуют интерпретатора, который анализирует команды в
программа, а затем выполняет их. Некоторые переводчики, такие как
Оболочки Unix ( sh , csh ,
ksh и т. Д.), Прочтите и немедленно выполните каждый
команда, в то время как другие, такие как Perl, анализируют весь сценарий перед
отправка соответствующих инструкций на машинном языке.Преимущество
сценария в том, что он очень портативен. Любой компьютер с
установленный соответствующий интерпретатор может более или менее запускать программу
без изменений. Это тоже недостаток, потому что программа
не запускаться вообще, если интерпретатор недоступен. В основном,
интерпретируемые программы медленнее, чем скомпилированные, но проще
отлаживать и исправлять. Другие примеры интерпретируемых языков включают
JavaScript и Python.

Относится к программам, скомпилированным и интерпретируемым для конкретных компьютеров
сценарии — это программы, разработанные для сред выполнения.Java и
Таким образом выполняются программы Smalltalk.
Создание программ для сред выполнения аналогично написанию
традиционные компилированные программы. Разница в том, что вместо
компилируя исходный код на машинный язык, он выводится в
байтовый код для «виртуальной машины» среды выполнения.
Эта виртуальная машина перехватывает инструкции байтового кода и
переводит их в компьютерные команды. Преимущество этого
подход заключается в том, что среда выполнения быстро компилирует только
необходимые фрагменты кода (некоторые части программы могут никогда не понадобиться
быть казненным).Это называется своевременной компиляцией. Главным
Недостатком среды выполнения является то, что программа, которая не
хорошо спроектированный заставит среду выполнения скомпилировать почти все
кода заранее, а затем выполните избыточные вызовы
устный переводчик. Это замедляет загрузку и выполнение программы.

Скомпилированные и интерпретируемые языки программирования — C, C ++, Rust, Go, Haskell, C #, Java, Python, Ruby, Javascript — Finematics

Введение

Когда дело доходит до компиляции и выполнения кода, не все языки программирования используют один и тот же подход.Один из распространенных, хотя и не идеальных способов их различения — разделить их на 2 группы компилируемых и интерпретируемых языков.

Основная цель как компиляции, так и интерпретации состоит в том, чтобы преобразовать читаемый человеком исходный код в машинный код, который может выполняться непосредственно центральным процессором, но с некоторыми оговорками.

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

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

Скомпилированные языки

Скомпилированный язык — это язык программирования, который обычно реализуется с использованием компиляторов, а не интерпретаторов.Компилятор — это программа, которая переводит операторы, написанные на определенном языке программирования, на другой язык, обычно это машинный код. Стандартный компилятор вместо того, чтобы переводить код на лету, выполняет всю свою работу раньше времени выполнения.

Хорошим примером компилируемого языка является C ++.

В C ++ исходный код компилируется в машинный код. Процесс компиляции состоит из предварительной обработки, компиляции и компоновки, но конечным результатом является либо библиотека, либо исполняемый файл, который может выполняться непосредственно процессором, для которого была скомпилирована программа.

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

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

Другими примерами популярных компилируемых языков являются C, Go, Haskell или Rust.

Языки перевода

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

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

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

Несмотря на то, что довольно сложно найти какой-либо популярный язык в категории полностью интерпретируемых языков, мы легко можем найти их множество в интерпретируемом по байт-коду языке.Примеры: Java, C #, Python или Ruby.

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

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

Золотая середина? JIT-компиляция

Пока что похоже, что у обоих скомпилированных и интерпретируемых языков есть свои плюсы и минусы.

Что, если я скажу вам, что вы все равно можете достичь скорости полностью скомпилированного языка без ущерба для переносимости и более быстрого времени компиляции? Звучит невозможно? Именно здесь на помощь приходит JIT-компиляция.

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

Компиляция

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

Основным преимуществом этого подхода является высокая скорость выполнения, поскольку все критические и часто выполняемые фрагменты кода полностью скомпилированы в машинный код. Это происходит за счет немного более медленного выполнения в начальный период, когда критические фрагменты кода анализируются и еще не полностью скомпилированы.

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

Некоторые из языков, использующих JIT-компиляцию, — это Java, C #, Pypy (альтернативная реализация Python) и V8 (движок Javascript).

Сводка

Давайте сравним несколько основных характеристик скомпилированных, интерпретируемых и JIT-компилируемых языков по очереди.

скомпилировано интерпретировано JIT-скомпилировано
скорость выполнения быстро медленно обычно быстро (в зависимости от реализации JIT)
переносимость плохо хорошо хорошо
время компиляции медленно быстро (байт-код) быстро (байт-код)

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

Большинство популярных языков программирования в наши дни попадают в одну из этих трех категорий: компилируются, компилируются в байт-код и интерпретируются, компилируются в байт-код и интерпретируются с помощью JIT-компиляции.

Экстра

Еще один интересный факт, прежде чем мы подведем итоги.

Когда дело доходит до языков программирования с множеством различных реализаций, Python является одним из победителей.

Это неполный список альтернативных реализаций Python.

  • IronPython (Python работает на.NET)
  • Jython (Python, работающий на виртуальной машине Java)
  • PyPy (Python с JIT-компилятором)

Если у вас есть какие-либо вопросы о скомпилированных и интерпретируемых языках или какие-либо предложения для следующих видео, прокомментируйте их ниже.

java — Скомпилированные и интерпретируемые языки

Во-первых, пояснение: Java не является полностью статически скомпилированной и скомпилированной так, как C ++. Он компилируется в байт-код, который затем интерпретируется JVM. JVM может выполнять своевременную компиляцию на родном машинном языке, но не обязана этого делать.

Ближе к делу: я считаю, что главное практическое отличие — интерактивность. Поскольку все интерпретируется, вы можете взять небольшой фрагмент кода, проанализировать и запустить его в соответствии с текущим состоянием среды. Таким образом, если вы уже выполнили код, инициализирующий переменную, у вас был бы доступ к этой переменной и т. Д. Это действительно поддается таким вещам, как функциональный стиль.

Однако интерпретация

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

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

Что касается генерации исполняемых файлов, то это не имеет отношения к этому, ИМХО. Часто можно создать исполняемый файл из скомпилированного языка. Но вы также можете создать исполняемый файл из интерпретируемого языка, за исключением того, что интерпретатор и среда выполнения уже упакованы в исполняемый файл и скрыты от вас. Это означает, что вы, как правило, по-прежнему оплачиваете затраты времени выполнения (хотя я уверен, что для некоторых языков есть способы перевести все в исполняемый файл дерева).

Я не согласен с тем, что все языки можно сделать интерактивными. Некоторые языки, такие как C, настолько привязаны к машине и всей структуре ссылок, что я не уверен, что вы сможете создать значимую полноценную интерактивную версию

.
Производительность

— Интерпретируемые языки — использование скомпилированного языка интерпретатора

Граница между «интерпретируемыми» и «скомпилированными» языками в наши дни действительно размыта. Например, первое, что делает Python, когда видит исходный код, — это компилирует его в представление байт-кода, по сути то же самое, что делает Java при компиляции файлов классов.Это то, что содержат файлы * .pyc. Затем среда выполнения python выполняет байт-код без ссылки на исходный источник. Традиционно чисто интерпретируемый язык будет постоянно обращаться к исходному коду при выполнении программы.

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

  • Разработчик языка может показать, что язык достаточно гибкий, чтобы справиться с такого рода задачами.
  • Разработчик языка фактически пишет реальный код на языке, который имеет тесты и, следовательно, показывает, что фундамент прочный.
  • Другим людям будет легче читать, заимствовать и даже изменять функции более высокого уровня без необходимости создавать или даже понимать ядро ​​языка.

Тот факт, что такой язык, как Python, компилируется в байт-код и выполняется, не означает, что он медленный.Нет причин, по которым кто-то не мог бы написать компилятор Just-In-Time (JIT) для Python, аналогичный тому, что уже делают Java и .NET, для дальнейшего повышения производительности. Фактически, IronPython компилирует Python непосредственно в байт-код .NET, который затем запускается с использованием системы .NET, включая JIT.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *