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

1 Программирование

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

Программирование — процесс создания или модификации программ для ЭВМ.

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

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

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

Компиляция + интерпретация = байткод-языки

Языки, использующие для исполнения кода и компиляцию, и интерпретацию, называют байткод-языками. Наиболее характерными примерами такого языка будут фреймворк.NET и Java.

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

Компиляция + интерпретация = байткод-языки

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

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

Visual Basic (Вижуал Бейсик)

Вряд ли найдётся тот, кто не слышал об этом продукте от Microsoft, ведь многие программисты именно на нём познавали азы программирования. Visual Basic простой, многофункциональный и подходит для быстрого прототипирования.

VB даёт широкие возможности по созданию программного кода, а также позволяет разрабатывать UI (пользовательский интерфейс) программ. Именно его чаще всего используют специалисты Microsoft для создания таблиц с данными.

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

Ключевое отличие — функциональность Программирование против императивного программирования

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

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

1. Обзор и основные отличия 2. Что такое функциональное программирование 3. Что такое императивное программирование 4. Сходства между функциональным программированием и императивным программированием 5. Параллельное сравнение — функциональное программирование и императивное программирование в табличной форме 6. Резюме

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

Теги:

  • Языки программирования
  • Технологии

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

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

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

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

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

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

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

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

Что интерпретируют в психологии

Своё значение это понятие имеет и в психологии.

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

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

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

Внимание уделяется деталям, которые у каждого клиента прорисовываются по-разному

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

2.3 Java

Язык Java — полностью объектно-ориентированный язык. Сказанное означает, что для написания даже самой маленькой и самой простой программы придется описать по меньшей мере один класс.

Достоинства:

  • Переносимость. Программы, написанные на языке Java, после однократной трансляции в байт-код могут быть исполнены на любой платформе, для которой реализована виртуальная Java-машина. Наиболее эффективно возможности реального компьютера может использовать только программа, написанная с использованием «родного» машинного кода.
  • Безопасность. Функционирование программы полностью определяется (и ограничивается) виртуальной Java-машиной. Отсутствуют указатели и другие механизмы для непосредственной работы с физической памятью и прочим аппаратным обеспечением компьютера. Дополнительные ограничения снижают возможность написания эффективно работающих Java-программ.
  • Надежность. В языке Java отсутствуют механизмы, потенциально приводящие к ошибкам: арифметика указателей, неявное преобразование типов с потерей точности и т.п. Присутствует строгий контроль типов, обязательный контроль исключительных ситуаций. Многие логические ошибки обнаруживаются на этапе компиляции. Наличие дополнительных проверок снижает эффективность выполнения Java-программ.

Недостатки языка:

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

Природа интерпретатора

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

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

Такой код быстрее обрабатывается, и его проще написать для исполнителя (части интерпретатора, которая исполняет), который считывает байтовый код, а не код источника.

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

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

У меня есть эмулятор для игровой приставки NIntendo. Когда я загружаю ROM-файл Dragon Warrior, он форматируется в машинный код, который понимает только процессор NES. Но если я создаю виртуальный процессор, который интерпретирует байтовый код во время работы на другом процессоре, я могу запустить Dragon Warrior на любой машине с эмулятором.

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

KPI и анализ бизнес-процессов

Что такое эффективность процесса?

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

Что такое показатель эффективности бизнес-процесса?

Показатель эффективности — это индикатор, которой позволяет понять, или сравнить состояние какой-то характеристики процесса, или его элемента. Стоимость процесса — показатель. Время обработки заявки, это тоже показатель.

Чем показатель эффективности отличается от ключевого показателя эффективности?

Ничем. Ключевой показатель эффективности ничем не отличается от просто показателя эффективности.

Какой процесс можно считать оптимальным?

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

Какой процесс можно считать эффективным?

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

Как можно оценить эффективность процесса?

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

Что такое потери в процессе?

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

Как посчитать стоимость процесса?

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

Какие бывают компиляторы?

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

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

Если программа будет работать на нескольких операционных системах, то нужен кросс-компилятор — компилятор, который преобразует универсальный машинный код. Например, GNU Compiler Collection(сокращенно GCC) поддерживает C++, Objective-C, Java, Фортран, Ada, Go и поддерживает разную архитектуру процессоров.

Начинающие программисты даже не знают о наличии компилятора на компьютере. Они пишут программы в интегрированной среде разработки, в которую встроен компилятор, а иногда и не один. В этом случае, выбор компилятора делает среда, а не программист. Например, MS Visual Studio поддерживает компиляторы для операционных систем Windows, Linux, Android. Выбирая тип проекта, Visual Studio определяет процессор и операционную систему компьютера, и после этого выбирает подходящий компилятор.

Типы языка

Первый наш файл, yobaType.ml, который описывает все возможные виды инструкций, устроен максимально просто:

type action =
        DoNothing
      | AddFunction of string * action list
      | CallFunction of string
      | Stats
      | Create of string
      | Conditional of int * string * action * action
      | Decrement of int * string
      | Increment of int * string;;

Каждая конструкция языка будет приводиться к одному из этих типов. DoNothing — это просто оператор NOP, он не делает ровным счётом ничего. Create создаёт переменную (у нас они всегда целочисленны), Decrement и Increment соответственно уменьшают и увеличивают заданную переменную на какое-то число. Кроме этого есть Stats для вывода статистики по всем созданным переменным и Conditional — наша реализация if, которая умеет проверять, есть ли в заданной переменной требуемая величина (или большая). В самом конце я добавил AddFunction и CallFunction — возможность создавать и вызывать собственные функции, которые на самом деле очень даже процедуры.

Процесс против процедуры

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

На первый взгляд, эти два могут показаться запутанными, так как они оба относятся к одной и той же деятельности. Таким образом, чтобы упростить процесс, вы можете посмотреть на разницу между процессом и процедурой как «что» против «как».

Процесс состоит из трех элементов:

  • Вход (материалы или информация)
  • Процесс с его подпроцессами
  • Выход

Процедура, с другой стороны, описывает:

  • Кто несет ответственность за каждую часть процесса
  • Когда каждая часть процесса происходит
  • Спецификации, применимые к каждой части процесса

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

Назначение и состав систем программирования

Рассмотрим основные составляющие системы программирования:

  • Редактор текста
  • Язык программирования
  • Библиотека подпрограмм
  • Редактор связей (компоновщик)
  • Транслятор
  • Отладчик

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

Редактор исходного кода

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

Компиляция и интерпретация

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

Такое преобразование осуществляется с помощью транслятора программ.

Различают два типа трансляторов: компиляторы и интерпретаторы.

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

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

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

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

Компоновка

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

Для дальнейшего выполнения программного кода, компилятор не нужен. Итак, после компиляции программа представлена ​​двоичными символами 1 и 0 и готова к исполнению на компьютере.

Отладка и тестирование

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

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

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

Компилятор

Язык процессоров (машинный код) обычно является низкоуровневым. Существуют платформы, использующие в качестве машинного язык высокого уровня (например,iAPX-432), но они являются исключением из правила в силу сложности и дороговизны. Транслятор, который преобразует программы в машинный язык, принимаемый и исполняемый непосредственно процессором, называется компилятором.

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

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

Компиляция исходных текстов на Си в исполняемый файл происходит в три этапа.

Препроцессинг

Эту операцию осуществляет текстовый препроцессор.

Исходный текст частично обрабатывается — производятся:

  • Замена комментариев пустыми строками
  • Текстовое включение файлов —
  • Макроподстановки —
  • Обработка директив условной компиляции — , , , ,

Компиляция

Процесс компиляции состоит из следующих этапов:

  1. Лексический анализ. Последовательность символов исходного файла преобразуется в последовательность лексем.
  2. Синтаксический анализ. Последовательность лексем преобразуется в дерево разбора.
  3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д.
  4. Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла.
  5. Генерация кода. Из промежуточного представления порождается объектный код.

Результатом компиляции является объектный код.

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

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

Компоновка

Также называется связывание, сборка или линковка.

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

При этом возможны ошибки связывания.

Если, допустим, функция была объявлена, но не определена, ошибка обнаружится только на этом этапе.

Машинно-независимая оптимизация

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

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

Объём работы, проделываемый различными компиляторами на этом этапе может сильно отличаться. Большинство распространённых на рынке компиляторов являются “оптимизирующими” и значительная часть времени компиляции уходит именно на оптимизацию (обычно есть способ отключить оптимизацию при необходимости).

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

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

Языки низкого и высокого уровня

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

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

Для того, чтобы начать писать исходный код на языке javascript, надо понять три вещи:

  • Как и где писать
  • Понимать, как наш код будет переведен в машинный код
  • Как запустить наш код, нашу программу

Как писать исходный код на javascript

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

Я буду работать в редакторе от компании Adobe – Brackets, в котором я привык верстать сайты, вы же можете работать в удобном для вас или посмотреть в интернете бесплатные, даже тот же Notepad++ подойдет для изучения javascript. Удобство подобных редакторов в том, что они имеют подсветку синтаксиса, а это в свою очередь упрощает написание кода и помогает избежать множества ошибок.

Компиляция и интерпретация кода

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

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

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

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

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

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

Что же лучше, интерпретация или компиляция? Оба способа имеют свои недостатки и плюсы.

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

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

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

Какие ошибки может определить компилятор?

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

  • ошибки объявления переменных или отсутствие их начальных значений
  • ошибки несоответствия типов
  • ошибки неправильной записи операторов и функций

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

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

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

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: