Компилируемый язык: Компилируемые языки: список, плюсы и минусы

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

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

Классификация языков программирования на компилируемые и интерпретируемые, является неточной и весьма условной, поскольку для любого языка программирования может быть создан как компилятор, так и интерпретатор. И, в действительности, существует множество языков, инструментарий которых включает в себя и компилятор, и интерпретатор (напр. Ch и CINT[1] для C или Lisp). Кроме того, существуют реализации языков, которые компилируют исходный текст программы в байт-код, который затем либо интерпретируется, либо выполняется т.  н. JIT-компилятором. Это привносит ещё больше неясности в вопрос о том, где именно должна быть проведена граница между компилируемым языком и языком интерпретируемым.

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

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

Содержание

  • 1 Применение
  • 2 Компилируемые языки программирования
  • 3 Примечания
  • 4 Ссылки

Применение

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

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

В этом разделе не хватает ссылок на источники информации.

Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.

Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 30 марта 2012.

Следующие языки принято считать компилируемыми:

  • Ada
  • ALGOL
    • Algol 60
    • Algol 68
    • SMALL
  • Asm
  • BASIC (создавался как компилируемый, но многие реализации являются интерпретируемыми)
  • C
    • C++
    • Objective-C
  • CLEO
  • COBOL
  • Cobra
  • Common Lisp
  • D
  • Delphi
  • Eiffel
    • Sather
    • Ubercode
  • Fortran
  • Go
  • Java
  • JOVIAL
  • LabVIEW
  • Lush
  • ML
    • Standard ML
      • Alice
    • Ocaml
  • Pascal
  • PureBasic
  • Visual Basic
  • Visual Foxpro
  • Visual Prolog

Примечания

  1. CINT | ROOT

Ссылки

  • Компилируемые языки в dmoz.

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

Автор Сергей Тимофеев На чтение 10 мин Просмотров 5к. Обновлено

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

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

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

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

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

Первый транслятор ПП-1 (Программирующая Программа) была разработана и использована в 1954 году. Уже в следующем году была создана ПП-2 с собственным загрузчиком, отладчиком, библиотекой стандартных процедур. В 1957 году был запущен компилятор для Fortran и после этого высокоуровневые языки стали активно использоваться программистами. Разработчиками последнего является группа специалистов из IBM во главе с Джоном Бэкусом.

Джон Бэкус – руководитель группы разработчиков IBM создателей компилятора для FORTRAN

В настоящее время в среде специалистов принята следующая классификация высокоуровневых языков по способу выполнения:

  • Компилируемые. К этой категории относятся языки C, C++, Object Pascal и другие, использующие для преобразования в машинные инструкции программы-компиляторы. На первом этапе исходный код переводится в объектные модули, на втором происходит их сборка в единый исполняемый файл при помощи линковщика.
  • Интерпретируемые. Данную категорию составляют языки типа Forth, Basic и им подобные. Исходный код считывается программой-интерпретатором и выполняется последовательно шаг за шагом.

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

Содержание

  1. Компилируемые языки
  2. Интерпретируемые языки
  3. Чем отличаются компилируемые и интерпретируемые языки программирования
  4. Преимущества и недостатки
  5. Области применения
  6. Так какой же язык использовать?

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

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

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

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

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

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

  • Ada, Algol (его обновленные версии Algol 60 и 68, а также SMALL).
  • BASIC и PureBasic.
  • C и его вариации C++, Objective-C.
  • COBOL, Delphi и Fortran.
  • Pascal и Turbo Pascal.
  • Visual Basic в шести версиях.
  • ML и Standard ML.

Перечень языков, исходный код которых нужно компилировать в машинный, этим не ограничивается. Список можно дополнить менее популярными: Sather, Common Lisp, Swift, CLEO, LabVIEW, Ocaml, Haskell, Eiffel, Ubercode, Go, JOVIAL, Lush, Alice, Rust, Visual Foxpro и Visual Prolog.

Компиляция программы в байт-код

Помимо названных существуют три группы высокоуровневых языки программирования, которые компилируются в байт-код:

  1. Java (Scala, Kotlin, Groovy, Clojure, Jython).
  2. Технология .NET (C#, Visual Basic, F#, Cobra).
  3. Erlang.

Помимо традиционных программ-компиляторов используется еще один их тип – транспайлеры (transpiler). Они предназначены для перевода исходного кода, написанного на Emscripten , kPHP, Closure Compiler, coffeescript, Dart, Haxe, TypeScript или Coccinelle, на другие высокоуровневые языки программирования типа ActionScript , C++, Lua либо Python. Транспайлеры также используются для перевода старого исходного кода на более новые версии, а также в совместимые с программными интерфейсами API. При этом происходит нарушение принципа обратной совместимости.

Алгоритм работы программы-транспилятора

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

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

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

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

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

Поначалу алгоритм работу интерпретаторов высокоуровневых языков программирования выглядел так:

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

Современные программы-интерпретаторы используют другие более совершенные алгоритмы работы:

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

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

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

  • APL (J), BASIC, Forth, Lisp, Python, Excel, Logo Perl, Visual Basic for Applications и PHP.
  • Скриптовые: JavaScript, Madness Script, VBScript, PostScript и F-Script.
  • Системы решения математических уравнений: Mathematica, GNU Octave, TK Solver, Interactive Data Language (IDL) и MATLAB.
  • Группа объектно-ориентированных языков: Smalltalk в версиях Dolphin и Little, а также VisualAge и VisualWorks.

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

Чем отличаются компилируемые и интерпретируемые языки программирования

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

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

Сложность рассматриваемого способа классификации заключается в том, что некоторые языки высокого уровня могут использовать и те, и другие алгоритмы. Для примера возьмем JavaScript – компилируемый или интерпретируемый это язык определить будет не так и сложно. Он относится к классу объектно-ориентированных с поддержкой мультипарадигменных сценариев. Для обеспечения работы программ, написанной на JavaScript, требуется интерпретация. Этим он отличается от похожего по названию языка Java, который относится к статическому типу и реализует иной подход, основанный на классах. Для его загрузки необходима предварительная компиляция байт-кода.

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

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

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

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

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

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

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

  • Необходимость предварительного тестирования успешно скомпилированного приложения. Это требует дополнительных временных затрат и внимания со стороны программиста.
  • Исходный код, который скомпилированный для операционной системы Windows, не может быть запущен на Linux и наоборот. Для каждой ОС необходимо создавать отдельный исполняемый файл с использованием соответствующего служебного ПО.

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

Области применения

По подсчетам специалистов существует порядка 10 тысяч языков программирования высокого уровня. Часть из них устарели и практически не используются. Актуальных направлений в сфере разработки ПО на деле не так много. Рассматриваемые в обзоре высокоуровневые языки находят применение в следующих областях:

  • Компилируемые. Создание игр и программ для операционных систем Windows и Linux и разработка мобильных приложений.
  • Интерпретируемые. Веб-программирование, создание кроссплатформенных прикладных программ и математические вычисления.
Сферы применения языков программирования: классификация

Существуют и универсальные языки программирования такие как C, C++, C#, Java или Python, которые могут использоваться в любой из перечисленных сфер. Выбор языка для написания тех или иных программ в значительной мере определяется средой разработки.

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

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

  1. Для создания сложных одноразовых программ для математических вычислений и выполнения логических операций наилучшим образом подойдут интерпретируемые языки: Mathematica , MATLAB, JavaScript или PHP.
  2. Если требуется небольшая компактная программа с высокой скоростью обработки, лучше использовать компилируемые языки: Object Pascal, C или C++.
Выбор компилируемого или интерпретируемого языка программирования

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

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

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

Чтобы ответить на этот вопрос, нужно сначала знать, что Java является платформо-независимым языком? Это означает, что вы можете запустить программу Java на любой платформе, которая включает аппаратное обеспечение + операционную систему, без каких-либо модификаций. Знание того, как Java достигает независимости от платформы, является ключом к ответу на этот вопрос.

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

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

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

В следующем разделе мы узнаем, как работает JIT.

Приведенный выше ответ абсолютно правильный, но не полный. То, что делает javac (компилятор Java, который поставляется вместе с JDK), является псевдокомпиляцией, он не преобразует исходный код Java в собственный код, который может быть непосредственно выполнен ЦП, реальная компиляция в собственный код выполняется другой программой, которая называется Just in Компилятор времени, также известный как JIT. На самом деле это оптимизация, выполненная на JVM инженерами платформы Java.

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

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

Короче говоря, Java является одновременно компилируемым и интерпретируемым языком . Он компилируется с использованием javac и JIT и интерпретируется с помощью виртуальной машины Java. Вот последовательность действий, которая обычно происходит от записи до выполнения Java-программы:

1) Программист пишет исходный код и сохраняет его в файле . java. Всегда помните, что имя вашего исходного файла Java должно совпадать с открытым классом, объявленным внутри этого файла, например, если внутри файла Java есть открытый класс с именем Order, то его имя должно быть Order.java.

2) javac компилирует файл .java и создает файлы классов, содержащие байтовый код. Этот байт-код является основной причиной независимости Java от платформы.

3) JVM выполняет эти файлы классов и собирает статистику выполнения. Эта статика используется для определения горячей точки, то есть части вашего кода, которая выполняется 90% времени.

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


Вот и все, теперь вы можете сказать, что J ava является одновременно компилируемым и интерпретируемым языком . Некоторые люди даже называют Java динамически компилируемым языком, имея в виду компиляцию байтового кода в собственный код во время выполнения. Отвечая на этот вопрос во время интервью, всегда не забывайте упоминать компиляцию JIT, поскольку преобразование исходного кода Java в файлы классов на самом деле не является компиляцией в истинном смысле программирования C и C++, где компилятор создает собственный код.

Другое Внутренние статьи JVM вам может понравиться

  • 10 основных параметров JVM для производственных приложений (статья)
  • Разница между стеком и кучей памяти в Java? (ответ)
  • 5 лучших курсов для углубленного изучения внутреннего устройства JVM (курсы)
  • Как работает сборка мусора в Java? (статья)
  • 5 лучших книг по управлению памятью в Java и сборщику мусора? (книги)
  • Разница между 32-битной и 64-битной JVM? (ответ)
  • Что делает -XX:UseCompressedOOPS в 64-битной JVM? (статья)
  • 10 пунктов о динамической памяти в Java? (артикул)
  • Когда класс загружается или инициализируется в JVM? (статья)
  • Как узнать об использовании ЦП и памяти приложениями Java? (артикул)
  • Как работает загрузчик классов в Java? (артикул)
  • Топ-5 продвинутых курсов Java для изучения производительности? (курсы)

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

Компилируемый язык Определение и значение

  • Основные определения
  • Викторина
  • Примеры

[ kəm-pīld′ ]

Сохранить это слово!


См. язык программирования.

ВИКТОРИНА

ВСЕ ЗА(U)R ЭТОГО БРИТАНСКОГО ПРОТИВ. АМЕРИКАНСКИЙ АНГЛИЙСКИЙ ВИКТОРИНА

Существует огромное количество различий между тем, как люди говорят по-английски в США и Великобритании. Способны ли ваши языковые навыки определить разницу? Давай выясним!

Вопрос 1 из 7

Правда или ложь? Британский английский и американский английский различаются только сленговыми словами.

Слова рядом компилируемого языка

Комп. Gen., Compiègne, компиляция, фильм-компиляция, компиляция, компилируемый язык, компилятор, самодовольство, самодовольство, самодовольство, жаловаться

Научный словарь American Heritage® Авторские права © 2011. Опубликовано издательством Houghton Mifflin Harcourt Publishing Company. Все права защищены.

Как использовать скомпилированный язык в предложении

  • Однако, несмотря на нецензурную лексику, ни JPO, ни Lockheed не смогли оспорить ни одного факта ни в одном из отчетов Daily Beast.

    Осечки Пентагона в скандале со стелс-джетом|Дэйв Маджумдар|8 января 2015|DAILY BEAST

  • Некоторые из них уже находятся в Германии, берут уроки языка.

    Корабли-призраки Средиземноморья|Барби Лаца Надо|6 января 2015 г.|DAILY BEAST

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

    Культ Юнга Лина: «Я строю анархическое общество с нуля»|Марлоу Стерн|4 января 2015 г. |DAILY BEAST -сорсинг.

    Лучшие колонки 2014 года|Джон Авлон, Эррол Луи|31 декабря 2014 года|DAILY BEAST

  • У нас также есть язык, наполненный неприязнью к гражданским «другим».

    Взгляд ветерана: Нью-Йоркская холодная война между полицией и мэрией|Мэтт Галлахер|29 декабря 2014 г.|DAILY BEAST

  • «Возможно, вы не говорите на моем языке», — сказала она на урду, языке, который чаще всего можно услышать в Верхняя Индия.

    Красный год|Луи Трейси

  • Я бы попросил вас представить его переведенным на все языки, общим материалом для понимания во всем мире.

    Спасение цивилизации|H. Г. (Герберт Джордж) Уэллс

  • И во всем мире каждый язык будет преподаваться с одинаковым акцентом, количеством и идиомами — действительно очень желательно.

    Спасение цивилизации|H. Г. (Герберт Джордж) Уэллс

  • Но не ходите за ними охотиться, во мраке забытого языка есть еще современные Бессмертные.

Оставить комментарий

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

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