Тарифы Услуги Сим-карты

Большая энциклопедия нефти и газа

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

Например, в последние годы огромное количество программистов используют платформу .NET , которая включает в себя ASP.NET , C # , JavaScript/JQuery/AngularJS . Все эти языки программирования являются частью инструментария Windows . И хотя .NET стал доступен для Linux , пока он не используется достаточно широко для этой ОС . В мире Linux используют Java , PHP , Python , Ruby On Rails и C .

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

#include int main() { printf("Hello World"); }

Выше приведен простой пример программы, написанной на языке программирования C . Это пример компилируемого языка программирования. Чтобы выполнить код, его необходимо запустить с помощью компилятора. Для этого я использую следующую команду Linux :

gcc helloworld.c -o hello

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

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

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

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

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

Ничто не идеально. Если есть программа на компилируемом языке С , скомпилированная на компьютере, работающем Linux , я не могу копировать эту скомпилированную программу на Windows и рассчитывать, что исполняемый файл будет выполнен.

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

Что такое интерпретируемый язык?

print ("hello world")

Приведенный выше код представляет собой программу на языке python , которая отображает слова «hello world ».

Для выполнения кода нужно его компилировать сначала. Вместо этого я могу просто запустить следующую команду:

python helloworld.py

Приведенный выше код не нужно компилировать. Но необходимо, чтобы python был установлен на компьютере, на котором будет работать скрипт.

Интерпретатор python принимает удобный для восприятия человеком код и превращает его в промежуточное «состояние », прежде чем сформировать то, что может прочитать ПК. Все это происходит за кадром, и пользователь увидит только слова «hello world ».

Хотя это может показаться недостатком, существует ряд причин, по которым интерпретируемые языки полезны. Одна из них состоит в том, что гораздо проще выполнить программу, написанную на Python , в Linux , Windows и OSX . Просто убедитесь, что Python установлен на компьютере, на котором вы хотите запустить скрипт.

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

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

Так какой же язык использовать?

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

Несмотря на то, что некоторые языки явно умирают, такие как COBOL , Visual Basic и ActionScript , есть и другие, которые были на грани вымирания, но резко вернулись на прежнее положение, как например, JavaScript .

В общем, мой совет заключается в том, что если вы используете Linux , вам следует изучать Java , Python или C , а если вы используете Windows , изучаете .NET и AngularJS .

Перевод статьи «What Is The Different Between A Compiled And Interpreted Languages » был подготовлен дружной командой проекта

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

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

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

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

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

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

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

Примерами компилируемых языков являются 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

Cтраница 1


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

Интерпретируемый язык (interpretive language) - язык программирования, программы на котором компьютер считывает, транслирует и исполняет немедленно, строка за строкой; примером служит интерпретируемый Бейсик.  

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

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

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

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

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

Язык представления, подобный тому, что используется в STRIPS, с точки зрения программной реализации является интерпретируемым языком, т.е. трансляция с этого языка выполняется интерпретатором, программой, которая способна распознавать в операторах языка формулы, подобные ризЬ (ящик1, комнатаБ, комнатаА), и выразить заложенный в формулах смысл в терминах выполняемых процедур.  

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

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

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

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

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

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

Языки программирования делятся на три типа:

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

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

То есть жизненный цикл программы представляет собой следующие этапы:
1. Написание исходного текста программы (source code)
2. Компиляция в исполнимый файл (.exe например)
3. Выполнение программы на ПК

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

Примеры таких языков: assembler, C, C++, Pascal

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

Соответственно, жизненный цикл программы сводится к:
1. Написание
2. Выполнение

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

Это специфические языки, например языки для создания веб-страниц.
Примеры: PHP, JavaScript, Python

3. Смешанного типа

Принцип работы языков смешанного типа (компилируемо-интерпретируемые) проиллюстрируем такой схемой:


Java относится именно к компилируемо-интерпретируемым языкам программирования. Интерпретатор в Java называется "виртуальная машина", именно поэтому он так обозначен на рисунке.

Возникает вопрос, зачем такая сложность? Дело в том что такой подход объединяет преимущества компилируемых языков (скорость выполнения) и интерпретируемых (независимость от ОС и безопасность)

Примеры таких языков: Java, C#

Эти три подхода можно проиллюстрировать следующим образом:

1. Компилируемые языки это готовая еда. Хорошо иметь ее под рукой, но она быстро портится.
Программы, написанные на компилируемых языках зависят от ОС и от аппаратного оборудования

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

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