Компиляторы — это программы, которые преобразуют исходные тексты программ, написанные на языке программирования высокого уровня, в программу на машинном языке, «понятную» компьютеру.
Определение
Компиляторы — это программы, которые преобразуют исходные тексты программ, написанные на языке программирования высокого уровня, в программу на машинном языке, «понятную» компьютеру. Полученный код, называемый исполняемой программой, можно устанавливать и запускать на нужном компьютере без дополнительных преобразований. Интерпретаторы выполняют аналогичную функцию, но делают это построчно всякий раз во время исполнения программы. Байт-код — это промежуточный подход, при котором программа преобразуется в промежуточный двоичный вид, интерпретируемый некой «виртуальной машиной» во время исполнения.
Причиной вновь вспыхнувшего интереса к компиляторам стало появление быстрых и сложных 64-разрядных микропроцессоров, типичным представителем которых можно считать Intel Itanium. Все усовершенствования в архитектуре процессоров, такие как распараллеливание и предсказание ветвления, а также возможность резкого увеличения производительности, окажутся бесполезны до тех пор, пока программисты не начнут их реально использовать.
ПРОСТО С++. Серия 2: КОМПИЛЯТОР
Забота о создании кода, ориентированного на эффективную параллельную обработку, серьезно усложняет и без того непростую задачу современного программирования. В итоге ответственность за увеличение производительности, на которое потенциально способны будущие 64-разрядные процессоры, ложится на компиляторы нового поколения.
Компиляторы, которым предстоит обеспечить значительное увеличение скорости вычислений, уже создаются в исследовательских лабораториях ряда компаний — Hewlett-Packard, Intel, MetaWare, Microsoft и других. В феврале прошлого года компания Silicon Graphics объявила о том, что ее оптимизированные компиляторы позволяют увеличить на 30-100% по сравнению с существующими продуктами производительность программ, работающих на компьютерах с процессорами Itanium и операционной системой Linux.
Как и их предшественники, оптимизированные компиляторы преобразуют программы на высокоуровневом языке в машинный код. Однако помимо этого они гарантируют максимально эффективное использование памяти (и в первую очередь процессорного кэша и механизма распараллеливания).
Например, процессоры Itanium предназначены для того, чтобы одновременно обрабатывать до шести команд на каждый такт процессора. Но для этого компилятор должен поддерживать стабильную передачу данных через конвейер команд.
Одна из возможных методик состоит в объединении часто используемых команд в группы, которые процессор может обрабатывать одновременно. Оптимизированные компиляторы также максимально используют свободные такты процессора за счет предсказания ветвления, пытаясь заранее определить результат команд наподобие GOTO и тем самым уберечь процессор от необходимости искать требуемые данные по всей программе. Метод спекулятивных вычислений предполагает, что оптимизированный компилятор загружает команды с некоторым упреждением.
2.1. Языки программирования, трансляторы
Другие пути
Интерпретаторы также преобразуют код, написанный на языке программирования высокого уровня, но они делают это построчно всякий раз, когда программа запускается на выполнение. Для того чтобы программа была «понятна» компьютеру, на котором предполагается исполнять высокоуровневый код непосредственно, на нем также должна работать программа интерпретации. Интерпретаторы полезны для тестирования нового или модифицированного кода или при обучении программированию.
Заранее скомпилированное программное обеспечение работает быстрее, чем интерпретируемые программы, поэтому скомпилированные программы предпочтительны для крупных и устоявшихся приложений. За это приходится расплачиваться зависимостью исполняемого кода от конкретной аппаратной платформы. Но такой подход не всегда оправдывает себя в случае с Internet-апплетами, для которых нельзя сказать априори, в какой именно среде они будут работать.
Идеология Java опирается на третий, своего рода компромиссный подход — байт-код. При использовании байт-кода высокоуровневые программы преобразуются в промежуточный вид, способный исполняться на различных аппаратных платформах. Байт-код Java преобразуется в машинный код с помощью специального интерпретатора, называемого виртуальной машиной Java (Java Virtual Machine — JVM). JVM формирует выделенное пространство в памяти, которое отделено от памяти основной системы, для хранения байт-кода и порождаемых структур.
Использование динамических (just-in-time, JIT — «точно в срок») компиляторов увеличивает производительность Java-приложений. В этом случае не JVM исполняет байт-код, а JIT-компилятор преобразует его в «родной» для данной машины код. Таким образом, с одной стороны, повышается производительность скомпилированного кода, а с другой — сохраняется переносимость, свойственная Java.
Hewlett-Packard придерживается аналогичной тактики со своим TurboChai — средой Java для встроенных приложений. В TurboChai производительность увеличивается за счет преобразования наиболее часто используемого кода в данном встроенном приложении. С помощью выборочной компиляции в HP стараются оптимальным образом управлять использованием памяти, в то же время достигая скоростей, сравнимых с теми, которых позволяют добиться JIT-компиляторы. TurboChai использует байт-код Java в качестве входной информации и генерирует исходные тексты ANSI C, а затем использует любой компилятор для языка Си для получения оптимизированного «родного» машинного кода.
В прошлом году Microsoft анонсировала C#, объектно-ориентированный язык программирования, согласованный с XML. Корпорация подает новый язык как логическое продолжение Си и C++ для Web-приложений. Ключевыми модулями станут Common Language Runtime для C# и специальный компилятор, который преобразует текст, написанный на традиционных языках Кобол, Perl, Фортран или других, в промежуточный язык, который будет работать на новой платформе Microsoft .Net.
Конечные пользователи вряд ли будут уделять много внимания компиляторам. Тем не менее может появиться новое поколение компиляторов, позволяющих увеличить производительность до уровня, позволяющего убедить профессионалов в необходимости использовать 64-разрядные аппаратные архитектуры.
Инструментарий | Что нового | Цели |
Оптимизированные компиляторы | Обеспечивают высокую производительность процессорной обработки за счет распараллеливания, предсказания ветвлений и спекулятивных вычислений | Помогают реализовать потенциал 64-разрядных процессоров |
JIT-компиляторы | В реальном времени компилируют код | Увеличивают производительность интерпретируемых языков, таких как Java |
«Выборочные» компиляторы | Компилируют только часто используемый код | Увеличивают производительность, не тратя понапрасну дорогостоящие ресурсы памяти |
Источник: www.osp.ru
Конспект (Конспект по Информатике для экзамена/зачета.), страница 16
Документ из архива «Конспект по Информатике для экзамена/зачета.», который расположен в категории » «. Всё это находится в предмете «информатика» из 1 семестр, которые можно найти в файловом архиве МЭИ. Не смотря на прямую связь этого архива с МЭИ, его также можно найти и в других разделах. .
Онлайн просмотр документа «Конспект»
Текст 16 страницы из документа «Конспект»
Пакет STATISTICA – это универсальная система анализа данных. Пакет реализует классические методы анализа, такие, как многомерная линейная и нелинейная регрессия, прогнозирование временных рядов, факторный, дисперсионный, дискриминантный, кластерный анализ. Среди программ, занимающих промежуточное положение между универсальными и специализированными статистическими системами, заслуживает внимания пакет GAUSS (Aptech Systems Inc.). Он имеет много общего с пакетом Mathematica, но, в отличие от последнего, предназначен для численных, а не аналитических расчетов.
4.3.10. Проблемно-ориентированные пакеты
- использование разнообразных чертежных инструментов (позволяющих рисовать кривые, эллипсы, линии произвольной формы, многоугольники);
- управление объектами (группировка, передвижение с растяжкой, поворот, разрезание, изменение размеров, работа со слоями);
- перерисовка объектов (фоновая, ручная, прерываемая);
- управление файлами библиотек и каталогов чертежей;
- использование библиотек символов, выполнение надписей и т.п.;
- работа с цветом;
- автоматизация отдельных процедур с использованием встроенного макроязыка;
- экспорт и импорт файлов всевозможных форматов;
- коллективная работа в сети.
Своеобразным стандартом для программ данного класса является пакет AutoCAD фирмы Autodesk. Можно также отметить программы DesignCAD, Grafic CAD Professional, Drawbase, Micmstation, Ultimate CAD Base и Turbo CAD.
Информационно-справочные правовые пакеты представляют собой эффективный инструмент для работы с огромными объемами законодательной и прочей нормативной информации, которую сегодня необходимо учитывать специалистам, работающим в самых различных областях. Наиболее крупными российскими разработчиками данных систем являются фирмы «Гарант-сервис» и «Консультант Плюс».
Система Гарант содержит базы данных по различным аспектам законодательства, в частности: законодательство России; московское законодательство; банковское законодательство; таможенное законодательство; международное право; уголовное и административное право; налоги, бухучет и предпринимательство; жилищное законодательство и др. При этом в каждой базе данных содержатся все редакции документов с момента их первой публикации, предусмотрена система поиска документов по ключевым словам.
Система Консультант Плюс представляет собой крупнейший информационный банк, в котором содержится все законодательство России – от основополагающих документов до ведомственных и узкоотраслевых (общее их количество исчисляется сотнями тысяч.
Основные базы данных системы:
- Эксперт (содержит все нормативные и правовые акты РФ);
- Версия Проф (содержит все нормативные и правовые акты РФ, кроме узкоспециализированных);
- Российское законодательство (содержит все нормативные акты РФ общего значения, важнейшие правовые акты).
В программу включены специализированные модули Консультант Бухгалтер, Консультант Финансист (содержат консультации сотрудников Минфина, Госналогслужбы, Центробанка, других министерств и ведомств по практическим вопросам бухучета, налогообложения, банковской, инвестиционной, внешнеэкономической деятельности), Консультант Арбитраж (поддержка судебной и арбитражной практики) и др.
Альтернативой этим пакетам являются правовые системы, поставляемые на CD. Наиболее популярными из них являются: Ваше право (фирма ИСТ), Референт (фирма Референт-сервис), Законодательство России (издательство Элекс). Пакет Ваше право содержит информацию об основах законодательства России, в том числе регионального.
В системе Референт содержится обширная информация по налогообложению и бухгалтерскому учету, приводятся материалы «Финансовой газеты», шаблоны бухгалтерских документов, ответы аудиторов на наиболее часто задаваемые вопросы пользователей.
Банк данных Законодательство России содержит более 40 тыс. документов по федеральному законодательству и законодательству 37 субъектов федерации, справочно-библиографическую информацию, толковый экономико-юридический словарь (6 тыс. терминов), образцы и формы различных документов.
Системы распознавания символов (OCR – Optical Character Recognition) необходимы в деловом документообороте для быстрого ввода машинописных и печатных документов в компьютер. Пакеты FineReader и CuneiForm и по сей день остаются лидерами в области бесклавиатурного ввода данных
Программы распознавания речи.
Эти программы (например, Dragon NaturallySpeaking, VoiceNavigator) переводят голос пользователя в текст, таким образом, разгружая его руки.
Увеличение вычислительных мощностей мобильных устройств позволило и для них создать программы с функцией распознавания речи. Среди таких программ стоит отметить приложение Microsoft Voice Command, которое позволяет работать со многими приложениями при помощи голоса.
На сегодняшний день существует два типа систем распознавания речи – работающие «на клиенте» (client-based) и по принципу «клиент-сервер» (client-server).
Электронные словари и системы перевода довольно широко используются в профессиональных и учебных целях. Можно упомянуть, в частности, программу Lingvo – большой англо-русско-английский электронный словарь, включающий несколько томов: универсальный, компьютерный, политехнический, экономический, звуковой и др., а также PROMT Translation Office – профессиональную систему перевода web-страниц с английского, немецкого, французского и итальянского языков на русский и обратно; программа осуществляет перевод текста в окне браузера, содержит коллекцию словарей (коммерческой, научной, промышленной, технической, домашней лексики).
4.3.11. Интегрированные пакеты
Интегрированные пакеты образуют особую категорию программного обеспечения.
Традиционные (полносвязанные) интегрированные комплексы представляют собой многофункциональный пакет, в котором соединены возможности различных специализированных (проблемно-ориентированных) программ, родственных в смысле технологии обработки данных на отдельном рабочем месте. Типичные представители этого класса ПО – пакеты Framework, Symphony, Microsoft Works, Lotus Works и др. Наиболее мощные пакеты данного типа – Borland Office for Windows, Lotus SmartSuite for Windows, Microsoft Office.
Особенностью нового типа интеграции является использование общих ресурсов. Можно выделить четыре основных вида совместного доступа к ним:
- использование утилит, общих для всех программ комплекса (например, утилита проверки орфографии доступна из всех программ пакета);
- применение объектов, которые могут находиться в совместном использовании нескольких программ;
- реализация простого метода перехода из одного приложения к другому;
- реализация построенных на единых принципах средств автоматизации работы с приложением (макроязыка).
4.4. Системы программирования
4.4.1. Назначение систем программирования
Программы для первых компьютеров составляли именно в машинных кодах.
Например, приведенная выше программа – это две машинные команды для процессоров фирмы Intel, их можно записать так:
Здесь АХ – это имя регистра (ячейки памяти) процессора, команда MOV записывает в регистр новое значение, а команда ADD добавляет число к содержимому ячейки. Буква «h » после числа означает, что оно записано в шестнадцатеричной системе счисления.
Для перевода программы в машинный код используют программы-ассемблеры (англ. assembler – рабочий-сборщик), а сам язык называется языком ассемблера. Этот язык машинноориентированный, потому что он определяется набором команд конкретного процессора (ориентирован на машину).
Сейчас для программирования чаще всего используют компромиссный вариант – языки программирования высокого уровня, или алгоритмические языки.
Для перевода программы, написанной на языке высокого уровня, в машинные коды, применяют специальные программы – трансляторы (англ. translator – переводчик).
Системы программирования – это программные средства для создания и отладки новых программ.
4.4.2. Языки программирования
К 2010 году в мире было разработано более 8500 языков программирования. Первой программисткой в мире считается Ада Лавлейс, которая в 1843 г. написала программу для Аналитической машины Чарльза Бэббиджа.
Один из первых алгоритмических языков – Фортран – создан в 1957 г., однако он и сейчас применяется для научных вычислений.
Языки программирования можно разделить на языки низкого уровня (машинно-ориентированные, языки ассемблера) и языки высокого уровня (алгоритмические языки).
По области применения языков программирования выделяют:
- профессиональные языки общего назначения: Java, С, C++, С#, Visual Basic, Delphi;
- языки для программирования интернет-сайтов: РНР, JavaScript, Perl, ASP, Python;
- языки для решения задач искусственного интеллекта: Лисп, Пролог;
- языки для обучения программированию: Бейсик, Паскаль, Лого, Python.
4.4.3. Трансляторы
Основа любой системы программирования – транслятор.
Транслятор – это программа, которая переводит в машинные коды тексты программ, написанных на языке высокого уровня.
Существуют два типа трансляторов: интерпретаторы и компиляторы.
Интерпретатор анализирует текст программы по частям. Разобрав очередной фрагмент, он немедленно выполняет описанные в нем действия и переходит к обработке следующего фрагмента.
- программы переносимы (программа будет работать в любой системе, где установлена программа-интерпретатор);
- удобно отлаживать программу.
Есть и существенные недостатки:
- программу невозможно выполнить, если не установлен интерпретатор;
- программы выполняются медленно (в цикле из 100 шагов каждая строчка 100 раз «разбирается» интерпретатором);
- в тех частях программы, которые не выполнялись во время отладки, могут оставаться синтаксические ошибки.
Второй тип трансляторов – компиляторы. Они, в отличие от интерпретаторов, сразу переводят всю программу в машинный код и строят исполняемый файл, готовый к запуску.
- чтобы запустить программу, не нужно устанавливать транслятор;
- поскольку программа уже переведена в машинные коды, она выполняется значительно быстрее, чем при использовании интерпретатора.
Недостатки тоже есть:
- при любом изменении нужно ждать окончания компиляции (перевода в коды); это несколько затрудняет отладку;
- готовая программа будет выполняться только в той операционной системе, для которой она была создана.
Чтобы как-то совместить достоинства интерпретаторов и компиляторов, была предложена идея компиляции программы в некоторый промежуточный исполняемый код (псевдокод, P-код), а не сразу в команды конкретного процессора. Для выполнения такого псевдокода нужна специальная среда – виртуальная машина, которую в принципе можно разработать для любого процессора и любой операционной системы.
Источник: studizba.com
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Процессоры языков программирования
Введение В настоящее время большинство программ написано на языках высокого уровня, таких как C, Java или Python. Эти языки предназначены больше для людей, чем для машин, поскольку они скрывают от программиста некоторые аппаратные детали конкретного компьютера. Проще говоря, языки высокого уровня упрощают задание компьютеру, что ему делать. Однако, поскольку компьютеры понимают инструкции только в машинном коде (в форме единиц и нулей), мы не можем должным образом взаимодействовать с ними без какой-либо передачи.
Время чтения: 8 мин.
Вступление
В настоящее время большинство программ написано на языках высокого уровня, таких как C, Java или Python. Эти языки предназначены больше для людей, чем для машин, поскольку они скрывают от программиста некоторые аппаратные детали конкретного компьютера.
Проще говоря, языки высокого уровня упрощают задание компьютеру, что ему делать. Однако, поскольку компьютеры понимают инструкции только в машинном коде (в виде единиц и нулей), мы не можем правильно общаться с ними без какого-либо переводчика.
Вот почему существуют языковые процессоры.
Языковой процессор — это специальная система транслятора, используемая для превращения программы, написанной на языке высокого уровня, который мы называем «исходным кодом», в машинный код, который мы называем «объектной программой» или «объектным кодом».
Для разработки языкового процессора необходимо очень точное описание лексики и синтаксиса, а также семантики языка высокого уровня.
Есть три типа языковых процессоров:
- Ассемблер
- Устный переводчик
- Компилятор
В следующих нескольких разделах мы рассмотрим каждый из этих типов процессоров и обсудим их назначение, различия и т. Д.
Языки ассемблера и ассемблер
Большинство языков ассемблера очень похожи на машинный код (поэтому они специфичны для компьютерной архитектуры или операционной системы), но вместо использования двоичных чисел для описания инструкции в нем используются мнемонические символы .
Каждый мнемонический символ представляет собой код операции или инструкцию, и нам обычно требуется несколько из них вместе, чтобы сделать что-нибудь полезное. Эти инструкции могут использоваться для перемещения значений между регистрами (в архитектуре Intel86-64 эта команда будет MOV ), для выполнения основных арифметических операций со значениями, таких как сложение, вычитание, умножение и деление (ADD, SUB, MUL, DIV), а также основные логические операции, такие как сдвиг числа влево или вправо или отрицание ( SHL , SHR , NEG ). Он также может использовать безусловные и условные переходы, что полезно для реализации цикла «for», цикла «while» или оператора «if» ( JMP , JE , JLE . ).
Например, если процессор интерпретирует двоичную команду 10110 как «перемещение из одного регистра в другой регистр», язык ассемблера заменит ее командой, такой как MOV .
Каждый регистр также имеет двоичный идентификатор, например 000 . Его также можно заменить более «человеческим» именем, например EAX , который является одним из основных регистров в x86.
Если бы мы, скажем, захотели переместить значение в регистр, машинный код выглядел бы примерно так:
00001 000 00001010
- 00001 : Это команда перемещения
- 000 : Идентификатор регистра
- 00001010 : значение, которое мы хотим переместить
На ассемблере это можно записать примерно так:
MOV EAX, A
- MOV — это команда перемещения
- EAX — идентификатор регистра
- A — шестнадцатеричное значение, которое мы хотим переместить (10 в десятичном формате)
Если бы мы хотели записать EAX = 7 + 4 — 2 , оно выглядело бы примерно так:
00001 000 00000111 00001 001 00000100 00010 000 001 00001 001 00000010 00011 000 001
- 00001 — это команда «переместить»
- 00010 — это команда «сложения»
- 00011 — команда «вычитания»
- 000, 001 — идентификаторы регистров
- 00000111, 00000100, 00000010 — это целые числа, которые мы используем в этих выражениях.
В сборке этот набор двоичных чисел будет записан как:
MOV EAX, 7 MOV R8, 4 ADD EAX, R8 MOV R9, 2 SUB EAX, R9
- MOV — это команда перемещения
- ADD — это команда сложения
- SUB — это команда вычитания
- EAX , R8 , R9 — идентификаторы регистров
- 7, 4, 2 : целые числа, которые мы используем в этих выражениях.
Хотя он все еще не так удобочитаем, как язык высокого уровня, он все же намного удобнее для чтения человеком, чем двоичная команда. Аппаратные компоненты процессора и регистров гораздо более абстрактны.
Это облегчает программисту написание исходного кода, избавляя от необходимости манипулировать числами для программирования. Перевод в объектный код на машинном языке прост и понятен, выполняется ассемблером .
Поскольку исходный код уже очень похож на машинный код, нет необходимости компилировать или интерпретировать код — он собран как есть.
Устные языки и переводчик
Каждая программа имеет этап перевода и этап выполнения . В интерпретируемых языках эти две фазы взаимосвязаны — инструкции, написанные на языке программирования высокого уровня, выполняются напрямую без предварительного преобразования в объектный код или машинный код.
Обе фазы выполняются интерпретатором — языковым процессором, который переводит один оператор (строку кода), немедленно выполняет его и затем переходит к следующей строке. При возникновении ошибки интерпретатор завершает процесс перевода на этой строке и отображает ошибку. Он не может перейти к следующей строке и выполнить ее, если предыдущая ошибка не будет удалена.
Интерпретаторы использовались с 1952 года, и их задача заключалась в том, чтобы упростить программирование с учетом ограничений компьютеров в то время (например, в компьютерах первого поколения было значительно меньше места для хранения, чем сейчас). Первым интерпретируемым языком высокого уровня был Lisp , впервые реализованный в 1958 году на компьютере IBM704.
В настоящее время наиболее распространенными интерпретируемыми языками программирования являются Python , Perl и Ruby .
Скомпилированные языки и компилятор
В отличие от интерпретируемых языков программирования, этап перевода и этап выполнения в компилируемых языках программирования полностью разделены, и перевод выполняется компилятором .
Компилятор — это языковой процессор, который считывает весь исходный код, написанный на языке высокого уровня, и переводит его в эквивалентный объектный код в целом. Обычно этот объектный код хранится в файле. Если в исходном коде есть ошибки, компилятор указывает их в конце компиляции вместе со строками, в которых были обнаружены ошибки. После их удаления исходный код можно перекомпилировать.
Языки низкого уровня обычно компилируются, потому что, будучи напрямую переведены в машинный код, они позволяют программисту гораздо больше контролировать аппаратные компоненты, такие как память или ЦП.
Первым компилируемым языком программирования высокого уровня был FORTRAN , созданный в 1957 году командой под руководством Джона Бэкуса из IBM.
В настоящее время наиболее распространенными компилируемыми языками являются C ++ , Rust и Haskell .
Языки байт-кода
Языки байт-кода, также называемые языками « переносимого кода » или « p-кода », представляют собой тип языков программирования, которые подпадают под категории как интерпретируемых, так и компилируемых языков, поскольку они используют как компиляцию, так и интерпретацию при переводе и выполнении кода.
Проще говоря, байт-код — это программный код, который был скомпилирован из исходного кода в низкоуровневый код, разработанный для программного интерпретатора. После компиляции (из исходного кода в байт-код) его можно скомпилировать в машинный код, который распознается ЦП, или он может быть выполнен виртуальной машиной, которая затем действует как интерпретатор.
Байт-код универсален и может быть передан в скомпилированном состоянии на другие устройства (со всеми преимуществами скомпилированного кода). Затем ЦП преобразует его в специальный машинный код для устройства. При этом вы можете скомпилировать исходный код один раз и запускать его везде — при условии, что на устройстве есть другой уровень, который используется для преобразования байт-кода в машинный код.
Самая известная виртуальная машина для интерпретации байт-кода — это виртуальная машина Java (JVM), которая настолько распространена, что на нескольких языках есть реализации, созданные для ее работы.
Когда программа впервые запускается на языке байт-кода, происходит задержка, пока код компилируется в байт-код, но скорость выполнения значительно увеличивается по сравнению со стандартными интерпретирующими языками (поскольку исходный код оптимизирован для интерпретатора).
Одним из самых больших преимуществ языков байт-кода является независимость от платформы, которая раньше была типичной только для интерпретируемых языков, в то время как программы намного быстрее, чем обычные интерпретируемые языки, когда дело доходит до выполнения.
Еще одна вещь, о которой стоит упомянуть, — это JIT-компиляция. В отличие от компиляции с опережением времени (AOT), код компилируется по мере выполнения . Это существенно увеличивает скорость компиляции и использует преимущества компиляции с гибкостью интерпретации.
Опять же, динамическая компиляция не всегда должна быть лучше / быстрее статической — это в основном зависит от того, над каким проектом вы работаете.
Флагманскими языками, которые компилируются в байт-код, являются Java и C #, а также такие языки, как Clojure , Groovy , Kotlin и Scala .
Преимущества и недостатки: скомпилировано или интерпретировано
Представление
Поскольку компилятор переводит весь исходный код языка программирования в исполняемый машинный код для ЦП, анализ исходного кода занимает много времени, но после завершения анализа и компиляции общее выполнение происходит намного быстрее.
С другой стороны, интерпретатор переводит исходный код строка за строкой, каждая из которых выполняется по мере перевода, что приводит к более быстрому анализу исходного кода, но выполнение значительно медленнее.
Отладка
Когда дело доходит до интерпретируемых языков программирования, отладка намного проще, потому что код транслируется до тех пор, пока не будет обнаружена ошибка, поэтому мы точно знаем, где она находится, и ее легче исправить.
Напротив, отладка на скомпилированном языке намного утомительнее. Если программа написана на скомпилированном языке, ее нужно скомпилировать вручную, что является дополнительным шагом для запуска программы. Это может показаться не проблемой — и это не относится к небольшим программам.
Помните, что для компиляции массивных проектов могут потребоваться десятки минут, а некоторые даже часы.
Более того, компилятор генерирует сообщение об ошибке после сканирования исходного кода в целом, поэтому ошибка может быть где угодно в программе. Даже если указана строка с ошибкой, после изменения исходного кода и исправления его нужно перекомпилировать, и только тогда можно будет выполнить улучшенную версию. Это может показаться не проблемой — и это не относится к небольшим программам.
Помните, что для компиляции массивных проектов могут потребоваться десятки минут, а некоторые даже часы. К счастью, перед компиляцией с помощью IDE можно заметить множество ошибок, но не все.
Исходный код против объектного кода
Для интерпретируемых языков программирования исходный код необходим для выполнения. Это означает, что исходный код приложения доступен пользователю — как JavaScript отображается в браузере.
Разрешение пользователям полностью читать исходный код может позволить злоумышленникам манипулировать и находить лазейки в логике. Это может быть до некоторой степени ограничено с помощью обфускации кода , но это все еще намного более доступно, чем скомпилированный код.
С другой стороны, как только программа, написанная на скомпилированном языке программирования, скомпилирована в объектный код, она может выполняться бесконечное количество раз, и исходный код больше не нужен.
Вот почему при передаче программы пользователю достаточно просто отправить ему объектный код, а не исходный код, обычно в виде .exe в Windows.
Интерпретируемый код более восприимчив к атакам путем внедрения кода, и тот факт, что он не проверяется по типу, знакомит нас с совершенно новым набором исключений и ошибок программирования.
Не существует «лучшего» способа перевода исходного кода, и как скомпилированные, так и интерпретируемые языки программирования имеют свои преимущества и недостатки, как упоминалось выше.
Во многих случаях граница между «скомпилированным» и «интерпретируемым» четко не определена, когда речь идет о более современном языке программирования, на самом деле, ничто не мешает вам, например, написать компилятор для интерпретируемого языка.
Licensed under CC BY-NC-SA 4.0
Источник: rukovodstvo.net