- Что значит компилируемый язык программирования
- Преимущества и недостатки компилируемых языков
- На чем написан компилятор
- Какие бывают компиляторы
- Ошибки, определяемые компилятором
- Примеры интерпретируемых языков
- Отличия компилируемых и интерпретируемых языков
- Компиляция + интерпретация = байткод-языки
- Простые выводы о языках программирования
- Какой язык программирования выбрать
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Желающие изучить веб-программирование часто сталкиваются с таким понятием, как компилируемые языки. Информации про них в Интернете мало, говорится лишь основная суть. Но и этого минимума достаточно, чтобы разобраться. Условно все языки делятся на компилируемые и интерпретируемые. Их создали, чтобы преобразовывать код в форму, считываемую компьютером. Эти языки очень похожи, но разница между ними существенная.
Более того, есть еще третий вид, который вобрал в себя преимущества компилятора и интерпретатора. Как правило, начинающие программисты сразу ломают голову, какой же вид выбрать для изучения. Ниже в статье мы рассмотрели особенности компилируемого языка в сравнении с другими. После ее прочтения, сомнений в выборе остаться не должно.
Что значит компилируемый язык программирования
Любой язык общения представляет собой текст, составленный из различных символов, которые известны и понятны собеседникам. Язык программирования тоже состоит из символов, чья последовательность подчиняется определенным правилам и называется кодом. С помощью кода происходит взаимодействие «человек–компьютер».
Компилятор является необходимым не для всех языков программирования, а только для компилируемых. Программа, созданная таким языком, требует не только написания как такового, но и прогонки через компилятор.
Только после этого ее можно запускать на выполнение в виде исполняемого модуля с определенным расширением (например, для ОС Windows файл будет иметь .exe расширение).
В качестве альтернативы вышеуказанного процесса были созданы языки, не требующие компилятора. Чтобы компьютер их понимал, тоже нужна трансформация кода в команды микропроцессора, но этот перевод незаметен и идет параллельно с введением кода. Для такого процесса необходимо использование программы, выступающей в роли синхронного переводчика – интерпретатора. Языки, которые применяют в этом случае, называются интерпретируемыми.
Преимущества и недостатки компилируемых языков
Компилируемым языкам чаще отдают предпочтение благодаря их скорости исполнения. Это обуславливается тем, что модификация созданного программного текста в машинный код требуется лишь раз. Этот язык работает эффективней, чем интерпретируемый, особенно при учете сложности современных видов последнего.
В качестве примеров компилируемых языков можно привести:
- процедурный язык программирования Pascal;
- высокоуровневый язык Go;
- функциональный язык Erlang;
- язык программирования Ada;
- язык функционального программирования Haskell;
- мультипарадигмальный Rust;
- объектно-ориентированный C;
- статически типизированный C++.
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Недостатки компилируемых языков лежат на поверхности: чтобы программу исполнить, ее прежде нужно пропустить через компилятор, что увеличивает количество этапов рабочего процесса. При этом, если в программе нужно что-то корректировать, то после каждой поправки компиляция запускается повторно. Еще один минус – это платформенная зависимость языка, то есть зависимость от той машины, на которой происходят компиляция и исполнение программы.
На чем написан компилятор
В 50-е годы прошлого века Джон Бэкус, будучи сотрудником корпорации IBM, вместе с командой разработчиков создал Fortran (FORmula TRANslator (переводчик формул)) – первый язык программирования высокого уровня, позволяющий писать программы понятными словами. Кроме языка был создан и компилятор, который позволял трансформировать на Fortran другие программы, включая улучшенные версии самого Fortran.
Чтобы избежать таких трудностей, программисты создают новые компиляторы на том языке, который им более удобен. В этом случае программа-компилятор будет подходить под разные компьютеры, плюс она может скомпилировать усовершенствованную версию самой себя.
Какие бывают компиляторы
Любой из компилируемых языков нуждается в компиляторе. Некоторые из них способны работать с разными языками. Тем не менее специалист, занимающийся программированием, всегда должен принимать во внимание характеристики того компьютера, на котором будет выполняться программа.
Читайте также!
Это связано с тем, что существует достаточно много моделей и видов процессоров, поэтому код, понятный одному процессору, будет не читаем для другого. Аналогично обстоят дела и с операционными системами: программа может работать на Linux, но конфликтовать с Windows. Поэтому необходимо применять тот компилятор, который будет совместим с определенными ОС и процессором.
Для программы, чье выполнение планируется на нескольких ОС, понадобится кросс-компилятор, то есть такая компилирующая программа, которая модифицирует высокоуниверсальный код. Например, набор компиляторов GCC совместим с Java компилируемым языком, а также с C++, Ada, Fortran, Go, Objective-C, плюс поддерживается разными процессорами.
Скачать файлКомпьютер можно снабдить не одним компилятором, а несколькими. В этих условиях выбор компилятора осуществляет интегрированная среда разработки, в которой пишется программа. Например, MS Visual Studio совместим с компиляторами для ОС Linux, Windows, Android. При выборе формата проекта Visual Studio самостоятельно идентифицирует ОС и процессор ПК, подбирая максимально соответствующий компилятор.
Ошибки, определяемые компилятором
При компиляции программы происходит ее проверка на соответствие текста стандартам языка программирования. При обнаружении какой-либо неточности компилятор сообщает об ошибке. После полного исследования компилятор предоставляет перечень допущенных в коде неточностей и ошибок, и пока они не будут исправлены, он не сможет перейти к созданию машинного кода для процессора. Наиболее распространенные ошибки это:
- ошибка в значении переменной или отсутствие начальных значений переменных;
- ошибки несоответствия типов (характерна для строго типизированных языков);
- синтаксические ошибки в записи операторов и функций.
Помимо исследования программы на огрехи и неточности, компилятор проводит оптимизацию кода, упрощая его. При этом происходит изменение первоначального кода, но сохраняется функционал заложенных программистом команд.
Примеры интерпретируемых языков
Интерпретируемым языкам не требуется машинный код, чтобы исполнить программу, так как она строчка за строчкой выполняется при помощи интерпретаторов. До прихода JIT (Just-in-Time) компилятора в сферу программирования на процесс интерпретации затрачивалось колоссальное количество времени. Но в настоящее время разница между компилируемыми и интерпретированными языками программирования по этому параметру не существенна.
на обучение «Разработчик» до 24 ноября
Примеры таких языков:
- мультипарадигменный язык JavaScript;
- высокоуровневый язык Ruby;
- высокоуровневый язык Perl;
- скриптовый язык PHP;
- скриптовый язык Python.
Интерпретируемые языки позволили упростить ряд аспектов программирования:
- платформо-независимость;
- механизм рефлексии;
- прием динамической типизации;
- меньший объем исполняемых файлов;
- динамические области видимости.
Медленная скорость считается основным минусом интерпретируемых языков. Но, как уже говорилось выше, применение JIT-компиляция значительно ускоряет исполнение, так как часто повторяемые последовательности инструкции переводятся в машинный код.
Отличия компилируемых и интерпретируемых языков
Разница между этими двумя языками заключается в следующем:
Компилируемый язык:
- компилирует программу целиком после ее ввода, преобразуя в объектный код, который хранится в файле;
- существуют этап генерации промежуточного объектного кода (например, С, С++);
- скомпилированные программы работают с более высокой скоростью, так как компиляция происходит до исполнения;
- потребность в памяти по большей части обусловлена созданием объектного кода;
- информация об ошибках появляется после процесса компиляции всей программы;
- вид цепочки: исходный код → компилятор → машинный код → вывод.
Интерпретируемый язык:
- программа интерпретируется построчно, то есть принимает одну инструкцию в качестве одного ввода и выполняет ее;
- не генерирует промежуточный объектный код (например, Perl, Python, Matlab);
- медленная скорость работы, так как компиляция и выполнение происходят одновременно;
- требуются меньшие объемы памяти;
- отображение ошибок происходит для каждой отдельной инструкции;
- вид цепочки: исходный код → интерпретатор → вывод.
Компиляция + интерпретация = байткод-языки
Языки, использующие для исполнения кода и компиляцию, и интерпретацию, называют байткод-языками. Наиболее характерными примерами такого языка будут фреймворк.NET и Java.
Java Virtual Machine (JVM) довольно распространенная виртуальная машина для интерпретации байткода, поэтому на ней работают реализации разных языков. К слову, в новой версии Java будет возможна и статическая компиляция.
Что такое байткод? Это форма набора команд, которые представляют собой сжатый числовой код, константы и ссылки на память. Цель создания этой формы – эффективное исполнение программным интерпретатором. При использовании байткод-языка сначала происходит процесс компиляции программы, написанной понятным человеку языком, в байткод. Далее он поступает в виртуальную машину, которая производит интерпретацию.
На процесс компиляции исходного кода в байткод затрачивается некоторое время, но затем исполнение происходит с высокой скоростью, так как после компиляции байткод оптимизирован. Помимо этого, байткод-языки обладают независимостью от платформы и имеют более высокие скорости, чем интерпретируемые языки. Причем технология JIT-компиляции также для них доступна.
Простые выводы о языках программирования
Вышеуказанные языковые типы можно ассоциировать простыми словами:
- Компилируемые языки – это готовая пища. Не надо тратить время на приготовление, но такая еда не будет долго храниться. Программы, написанные с помощью этих языков, зависят от оборудования и операционной системы.
- Интерпретируемые языки – это замороженные сырые продукты. Хранить их можно долго, но требуется много времени на готовку. Написанные интерпретируемым языком программы не зависят от платформы, главное, чтобы был интерпретатор, поэтому они мобильны и безопасны. Однако процесс интерпретации нуждается в запасе времени, что не может не сказаться на производительности.
Читайте также!
Языки программирования для создания игрПодробнее - Комбинированные языки – это полуфабрикаты: готовятся быстро и хранятся очень долго, правда теряются вкусовые качества. Программы, написанные таким языком, имеют ограничения функционала, обусловленные интерпретатором. То есть. у такой программы будет меньше возможностей, чем у той, которая написана на компилируемом языке.
Какой язык программирования выбрать
Вряд ли понимание того, какие языки являются компилируемыми, повлияет на как таковой выбор языка программирования.
Некоторые языки теряют свою актуальность, например, ActionScrip, COBOL и другие. Но есть и такие, которые считались безнадежно устаревшими, но все же вернули себе былую популярность, например, JavaScript.
Реализация многих языков программирования существует и в компилируемом, и в интерпретируемом виде, а эти виды, в свою очередь, имеют свои плюсы и минусы.
Обобщая всю вышеизложенную информацию, сделаем вывод, что компилируемые языки считаются наиболее эффективными, так как приводят в исполнение машинный код и дают возможность использования аппаратного обеспечения системы. Но это накладывает ограничения на написания кода и наделяет его зависимостью от платформы.
Интерпретируемые языки не зависят от платформы и разрешают использовать динамические техники программирования (например, метапрограммирование). Но этот тип языка обладает меньшей скоростью исполнения по сравнению с компилируемыми языками. Байткод-языки вобрали в себя положительные черты обоих языков и отлично справляются с поставленными задачами.
Объектно-ореинтированный C ???
что-то давно я классов на C не писал…