Содержание

Синоним к слову интерпретированный

Все синонимы к слову «интерпретированный»
Синонимы к слову «интерпретированный» — 9 букв.
#СинонимКоличество буквТип синонима
10
объяснить
9 букв.Слово
Синонимы к слову «интерпретированный» — 10 букв.
#Синоним
Количество букв
Тип синонима
11освещенный 10 букв.Слово
Синонимы к слову «интерпретированный» — 11 букв.
Синонимы к слову «интерпретированный» — 12 букв.
Синонимы к слову «интерпретированный» — 13 букв.
Синонимы к слову «интерпретированный» — 16 букв.
Синонимы к слову «интерпретированный» — 19 букв.

3

Синонимы к слову интерпретированный — это слова близкие по значению к слову интерпретированный, которые с легкостью заменяют его в текстах и в разговоре. Всего найдено синонимов к слову интерпретированный — 19 шт. Среди них могут всречаться как слова, так и словосочетания. Из найденных синонимов, слов — 18 шт, а синонимичных словосочетаний — 0 шт.Очень часто, особенно при разгадывании кроссвордов встречается вопрос : «Синоним к слову интерпретированный», поэтому в нашем словаре также представлено количество букв из которых состоит тот или иной синоним. Самый маленький синоним к слову интерпретированный состоит из 9 букв, а самое длинное состоит из 19 букв. Найти нужное слово-синоним по количеству букв вы можете воспользовавшись таблицей сверху, а конкретно графой количество букв.

О синонимах

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

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

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

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

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

Добавить синоним к слову интерпретированный

Добавление синонима к слову:

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


Поиск синонимов

Поиск синонима к слову:

Популярные слова

Возврат к списку


Предложения со словом «интерпретированный»

Мы нашли 51 предложение со словом «интерпретированный». Также посмотрите синонимы «интерпретированный».

Значение слова

  • Я так хотела бы создать и по-новому интерпретировать значение танца, который обычно является самым слабым звеном оперы.
  • Дело было не в отсутствии информации, а в неумении ее интерпретировать и в нежелании Сталина посмотреть правде в глаза.
  • Сегодня, критики с разных позиций пытаются интерпретировать творческое наследие Дэвида Гудиса.
  • Кроме того, даже когда у нас есть надежные метрические показатели, мы далеко не всегда можем их правильно интерпретировать.
  • Характер действий авиации союзников нельзя было интерпретировать как подготовку к высадке так далеко на севере.
  • Даже сейчас я временами проявляю свою стеснительность, и некоторые могут интерпретировать ее неправильно.
  • Бога можно интерпретировать как «Человеческий Дух», духовную культуру человечества.
  • Теперь китайцам надо интерпретировать это понятие самым наилучшим образом.
  • Провал Мандельштама на экзамене мемуарист был склонен интерпретировать как отказ поэта-чудака идти на контакт с жесткой современностью.
  • Эклектичность бергсонизма позволяла интерпретировать его поразному в зависимости от интеллектуальных и социальных склонностей.
  • Хотя теперь интерпретирую эти события совершенно иначе, чем делал это тогда, в 68-м, исполненный ненависти к своим и презрения к чужим.
  • Более того, со стороны Каменева и Зиновьева предпринимались попытки по-своему интерпретировать ленинские оценки и высказанные мысли.
  • Мы сами вольны интерпретировать каждое произошедшее с нами событие.
  • Поэма дает возможность по-разному ее инструментировать и интерпретировать.
  • Приветствовалось любое культурное явление, которое можно было бы интерпретировать угодным для интересов революции образом.
  • Фразу, произнесенную сгоряча, недоброжелатель может интерпретировать как «антисоветскую пропаганду», случаев подобного рода немало.
  • По моему телу прокатился озноб, так как мое пятнадцатилетнее «Я» не имело ни малейшего представления о том, как это
    интерпретировать
    .
  • Еще труднее интерпретировать старые тексты.
  • Трудно однозначно интерпретировать все эти лобзания и обнимания «старца».
  • Когда же ты спишь, этот интерпретирующий отдел продолжает работать, но только вполсилы.
  • Мыслеформу можно поймать, но достаточно сложно ее правильно интерпретировать и привязать.
  • Командование Друзом рейнской армией имело в основе его способность интерпретировать и выражать ее мнение.
  • Интерпретировать мою жизнь и ее мотивы отказываюсь, поскольку не пригоден для этого.
  • Или для ее интриг в зависимости от того, как интерпретировать последующие события.
  • Либо слишком много видели, либо слишком мало, чтобы хоть как-то случившееся интерпретировать.
  • Однако в годы «оттепели» у нас появились режиссеры, которые стали по-своему интерпретировать произведения данного драматурга.
  • https://sinonim.org/
  • Хотел ли Дудинцев критиковать советский режим, нет ли, а роман можно интерпретировать в качестве такой критики.
  • Я не дала себе ни малейшей свободы интерпретировать события ее жизни или высказать свое личное мнение по той или иной теме.
  • Потёмкин посчитал за благо интерпретировать Екатерине события тех дней в невыгодном для Суворова духе.
  • Именно так можно интерпретировать рассказ М.Д.
  • Даже давнишняя дружба не дает мне права интерпретировать мнение покойного.
  • Так можно интерпретировать последующие события его жизни.
  • Некоторые из них, однако, стремились по-своему интерпретировать идеи Фрейда и развить их в русле собственных представлений.
  • Памятуя о специфике уголовного законодательства, лишь то и публиковали, что было б нельзя интерпретировать как «антисоветскую агитацию».
  • Речь идет о способности человека интерпретировать происходящее вокруг рационально.
  • Любой может интерпретировать факты со своей колокольни.
  • Наступает черед их обработать, а затем и интерпретировать.
  • Его легко было интерпретировать атеистически.
  • Трудно не интерпретировать это замечание Тацита так, что он имел в виду нравственное превосходство.
  • Я решил, что в мозгу должен существовать некий «интерпретирующий отдел».
  • Большинство людей стараются все интерпретировать сложнее, чем есть на самом деле, и тема песни меня немного волнует.
  • Историю эту можно интерпретировать по-разному и не обязательно в пользу Симонова.
  • Слова которого можно интерпретировать как угодно, но в основном их понимают некомплиментарно.
  • Получил данные, которые попытался интерпретировать в духе роли изменяемых условий среды в определении признака самофертильности.
  • С самого начала исследований я много размышляла и уделяла большое внимание тому, как интерпретировать собранный материал.
  • Объективно интерпретировать факты, содержащиеся, например, в «Книге Судного Дня», уже тяжелее.
  • Аналитик, интерпретирующий своему пациенту, часто работает на фрагменте исторического опыта, надеясь, что это приведет к воспоминанию.
  • Гениальность ученого не в том, что он знает формулу, а в том, что он способен ее интерпретировать и сделать шаг вперед.
  • Однако в годы «оттепели» у нас появились режиссеры, которые стали по-своему интерпретировать произведения этого драматурга.
  • Или можно попасть, но невозможно интерпретировать окружающее, если речь идёт о метафизическом опыте.
  • Он решил интерпретировать историю по-своему и включил сюда все человечество.

Источник – ознакомительные фрагменты книг с ЛитРес.

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

  • Поиск занял 0.04 сек. Вспомните, как часто вы ищете, чем заменить слово? Добавьте sinonim.org в закладки, чтобы быстро искать синонимы, антонимы, ассоциации и предложения.

Пишите, мы рады комментариям

Интерпретированный язык — АЗБУКА

Если вы когда-либо программировали, вы, вероятно, знаете, что существует 2 разных типа языков программирования: компилируемые и интерпретируемые языки. При использовании скомпилированного языка код сокращается до набора машинно-специфических инструкций перед сохранением в виде исполняемого файла. В интерпретированных языках код сохраняется в том же формате, в котором он был введен, и он преобразуется в машинные инструкции во время выполнения. Некоторые языки, такие как Basic, доступны в скомпилированной и интерпретированной версиях.

PostScript – это язык, который интерпретируется. Нет компиляторов PostScript.

Дизайн для бесперебойной работы

Скомпилированные языки

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

Определения и термины веб-дизайна

Код PostScript интерпретируется

PostScript – это интерпретируемый язык: когда вы создаете страницу в QuarkXpress и печатаете ее, QuarkXPress создает программу PostScript, которая описывает содержимое вашего шедевра и отправляет ее на выбранное вами устройство вывода. Это устройство вывода, скажем, лазерный принтер, имеет собственный компьютер, на котором запущена программа, называемая RIP. Эта программа RIP считывает постштатные инструкции PostScript, а затем переводит их во что-то, что процессор этого RIP может обработать.

Тот факт, что код PostScript всегда интерпретируется, имеет несколько явных преимуществ:

  • Поскольку код PostScript интерпретируется, он не ориентирован на конкретный процессор и может быть отправлен на различные устройства вывода, возможно, с использованием процессоров совершенно разных типов. Это делает PostScript независимым от устройства языком.
  • Другое преимущество PostScript, являющегося интерпретируемым языком, заключается в том, что вы можете изменить код самостоятельно, если вам не нравится полученный результат или он генерирует какое-то сообщение об ошибке. Конечно, это возможно, только если вы знаете, как программировать на PostScript или что искать. Хотя я сам никогда не программировал на PostScript, в прошлом я иногда просматривал код и исправлял его. Например: в одном случае я получил страницы, которые были напечатаны из программы CAD. Все линии на чертежах были слишком тонкими, поэтому я изменил переменную, определяющую толщину линий. Я также добавил инструкцию по изменению масштаба страниц и добавил код для выбора правильного размера страницы. В настоящее время я использую Acrobat для преобразования файлов PostScript в PDF, чтобы я мог использовать множество подключаемых модулей Acrobat для изменения аспектов кода.

Конечно, интерпретация также имеет свои недостатки:

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

PostScript

Интерпретированный против скомпилированный: полезное различие?

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

Интерпретированный код может выполнять такие вещи, как генерация кода во время выполнения и придание этому коду видимости в лексических привязках существующей области. Это один пример. Другое заключается в том, что интерпретаторы могут быть расширены интерпретируемым кодом, который может контролировать способ его оценки. Это основа для древних Lisp «fexprs»: функций, которые вызываются с неоцененными аргументами и решают, что с ними делать (имея полный доступ к необходимой среде для обхода кода и оценки переменных и т. Д.). В скомпилированных языках вы не можете использовать эту технику; вместо этого вы используете макросы: функции, которые вызываются во время компиляции с неоцененными аргументами и переводят код, а не интерпретируют.

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

Интерпретация всегда будет полезна в качестве метода начальной загрузки компилятора. Для конкретного примера посмотрите на CLISP (популярная реализация Common Lisp). CLISP имеет компилятор, который написан сам по себе. Когда вы собираете CLISP, этот компилятор интерпретируется на ранних этапах сборки. Он используется для компиляции, а затем после компиляции выполняется компиляция.

Без ядра интерпретатора вам нужно было бы загрузиться с некоторым существующим Lisp, как это делает SBCL.

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

Интерпретация: важная ступенька на пути, ведущем к компиляции!

Что значит для языка быть «истолкованным»?



Действительно ли такие языки, как, например, Ruby (если выполняется MRI, я имею в виду не скомпилированный в байт-код), запускаются на самом деле разбираются каждый раз, когда требуется выполнение, например, метода или тела цикла? Я имею в виду, чтобы выполнить цикл, вам нужно разобрать его тело N раз?

Я просто всегда думал, что все эти программы анализируются один раз на начальной загрузке, преобразуются в «строго типизированное» дерево операторов и т. д. Разве это не правда?

ruby compiler-construction programming-languages interpreter interpreted-language
Поделиться Источник Bubba88     13 мая 2010 в 12:01

2 ответа


  • Что значит для языка быть статически типизированным?

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

  • Что значит для распределителя быть апатридом?

    Что значит для распределителя быть апатридом? Я понимаю, что std::allocator-это обертка вокруг malloc и не имеет собственного состояния. В то же время malloc ведет свою собственную бухгалтерию, поэтому можно сказать, что все std::allocator экземпляров используют одно состояние. Как бы я реализовал…



4

Толкование-это слово с очень расплывчатым определением. Даже инструкции машинного кода интерпретируются процессором.

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

В некоторых случаях линия не так ясна:

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

Поделиться Mark Byers     13 мая 2010 в 12:05



4

Сейчас я просто буду злым и скажу, что примерно EVERY язык программирования интерпретируется, будь то программный (Ruby, Python, Java) или аппаратный (C, C++) интерпретатор 🙂

Для реального ответа, хотя я не знаю о внутренней реализации Ruby, я чертовски уверен, что они не разбирают это утверждение снова и снова. Не используя байт-код в исходной реализации (или они уже мигрировали?), они используют некоторое промежуточное представление (вы можете хорошо видеть его, когда хотите написать для него C-расширения), таким образом, просто выполняя их снова и снова.

Поделиться LukeN     13 мая 2010 в 12:05


Похожие вопросы:


Что значит для языка программирования быть «на rails»?

В настоящее время я работаю с Groovy и Grails. В то время как Groovy довольно прямолинейно, так как это в основном Java, я не могу сказать, что я Грок Grails. Я читал, что Groovy относится к Grails,…


Что значит быть микро-фреймворком?

Ruby Sinatra и PerlDancer называются микро — веб-фреймворком? Что значит быть микро-фреймворком? Подходят ли микро — веб-фреймворки для крупных проектов (скажем, Stackoverflow, электронные покупки,…


Что значит быть командным игроком?

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


Что значит для языка быть статически типизированным?

Насколько я понимаю, это означает, что потенциально можно написать программу, формально доказывающую, что программа, написанная на статически типизированном языке, будет свободна от определенного…


Что значит для распределителя быть апатридом?

Что значит для распределителя быть апатридом? Я понимаю, что std::allocator-это обертка вокруг malloc и не имеет собственного состояния. В то же время malloc ведет свою собственную бухгалтерию,…


Что значит «core language»?

В таблице на этой странице из документации GCC один из элементов (примерно на полпути вниз по таблице) указан только как core language. Что это значит? Какие части языка не будут включены?


Что значит «OOP языков организованы вокруг графиков»?

В книге изучение SQL трудным путем автор говорит:: OOP языки организованы вокруг графиков, но SQL хочет возвращать только таблицы Что значит для языка OOP быть организованным вокруг графа?…


Что значит для языка быть открытым исходным кодом?

Как большинство из вас, вероятно, знают, Apple объявила в WWDC 2015 году, что Swift станет языком с открытым исходным кодом. Мой вопрос таков: поскольку сам язык по сути является просто набором…


Что значит для объекта быть обернутым вокруг таблицы базы данных

Пытаюсь выучить Rails active record и с трудом понимаю, что значит для объекта быть обернутым вокруг стола. Я уже просмотрел несколько постов, в которых говорится о паттерне активной записи, но мне…


Что значит полагаться на последовательность языка принуждения?

Из https://ghc.haskell.org/trac/ ghc/wiki/DependentHaskell , в отличие от Coq и Agda, Haskell опирается на согласованность языка принуждения, которому не угрожает * :: *. Подробнее см. Цитируемая…

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

во-первых, уточнение, Java не полностью статичен-скомпилирован и связан так, как C++. Он компилируется в байт-код, который затем интерпретируется JVM. JVM может пойти и сделать компиляцию just-in-time на родной машинный язык, но не обязательно это делать.

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

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

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

Что касается генерации исполняемых файлов, это имеет мало общего с ним, ИМХО. Часто можно создать исполняемый файл из скомпилированного языка. Но вы также можете создать исполняемый файл из интерпретируемого языка, за исключением того, что интерпретатор и среда выполнения уже упакованы в exectuable и скрыты от вас. Это означает, что вы, как правило, по-прежнему оплачиваете расходы на выполнение (хотя я уверен, что для некоторых языков есть способы перевести все в исполняемый файл дерева).

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

Основные принципы программирования: компилируемые и интерпретируемые языки

Рассказывает Аарон Краус 


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

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

Вступление

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

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

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

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

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

Низкоуровневые языки как правило являются компилируемыми, поскольку эффективность обычно ставится выше кроссплатформенности. Кроме того, компилируемые языки дают разработчику гораздо больше возможностей в плане контроля аппаратного обеспечения, например, управления памятью и использованием процессора. Примерами компилируемых языков являются C, C++, Erlang, Haskell и более современные языки, такие как Rust и Go.

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

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

В отличие от компилируемых языков, интерпретируемым для исполнения программы не нужен машинный код; вместо этого программу построчно исполнят интерпретаторы. Раньше процесс интерпретации занимал очень много времени, но с приходом таких технологий, как JIT-компиляция, разрыв между компилируемыми и интерпретируемыми языками сокращается. Примерами интерпретируемых языков являются PHP, Perl, Ruby и Python. Вот некоторые из концептов, которые стали проще благодаря интерпретируемым языкам:

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

Бонус: байткод-языки

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

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

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

Заключение

Многие языки в наши дни имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними на нет. У каждого вида исполнения кода есть преимущества и недостатки.

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

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

Перевод статьи «Programming Concepts: Compiled and Interpreted Languages»

Определение интерпретации Merriam-Webster

ин · тер · прет | \ in-ˈtər-prət , -pət \

интерпретируется; устный перевод; интерпретирует

переходный глагол

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

2 : зачать в свете индивидуальных убеждений, суждений или обстоятельств : толковать толковать договор

3 : изобразить посредством искусства : довести до реализации исполнением или указанием интерпретирует роль

определение толкования The Free Dictionary

Бедняжка истолковала себе то, чего она страдала и чего жаждала — она ​​интерпретировала это как убийственное желание и стремление к счастью ножа.Я могу понять ваше огорчение по тону, которым это написано, и ваше беспокойство по поводу того, как эта несчастная женщина истолковала разговор, который она подслушала у вас дома. Разве я не объяснил вам в отношении себя все, что можно было вынести. Сомнительный смысл, который дурной характер мира истолковал для моей дискредитации? »Воззвание Диммсдейла, истолковавшее его с его многочисленными отголосками и отголосками, как крик демонов и ночных ведьм, с которыми она была хорошо известна совершать экскурсии в лес.Хорошо сказано, что величие — это всего лишь другое название для интерпретации; И в той мере, в какой эти безымянные рабочие древности интерпретировали себя и время, в которое они жили, они достигли непреходящего величия. Он один интерпретировал сообщение, которое Люси получила пять дней назад из уст умирающего человека. сообщение о сплетнях — ее усилие, более того, ее сильнейшее импульсивное побуждение было направлено на защиту Уилла от любых ложных догадок; и когда во время ее последующей встречи с ним она сначала истолковала его слова как вероятный намек на чувство к миссис Бейдж.Теперь царь послал послов на Восток искать своего зятя, и они, по счастливой случайности, встретились со старым волшебником, который истолковал знаки на кольце царя Соломона и, таким образом, обладал большей мудростью, чем кто-либо другой в регионе Что касается качества устного перевода, можно предположить, что, независимо от типа обстановки, все участники интерпретируемого взаимодействия (или, по крайней мере, должны быть) в равной степени привержены обеспечению высокого качества перевода — если Казалось бы, не по какой-либо другой причине, кроме потенциальных дополнительных затрат, которые может повлечь за собой ошибочная интерпретация.»Sa Mga Bituin Na Lang Ibubulong», сочиненный Кайлом Рафаэлем Борбоном и интерпретированный Дж. М. Де Гузманом, был назван победителем конкурса Himig Handog 2018. 10 лучших финалистов — «Ako Ako», сочиненный Джерико Буэнафе и интерпретированный Feel Day feat.Among их темы — отображение поля, иррациональный компонент в рациональной системе: переводчики говорят о своей мотивации работать в службах видеорелейной передачи, чувствуя себя полностью человечными: работа над сокращением неравенства в отношении здоровья в первичной медико-санитарной помощи с помощью видеопереводчика, интерпретируемая тюремная видеосвязь: заключенный Взгляд глазами, обеспечивающий участие в политической жизни посредством видеодистанционного перевода: пример из практики, и видеоконференцсвязь в юридическом контексте: сравнительное исследование моделирования и реальных условий.

Определение интерпретатора

Интерпретатор — это программа, которая читает и выполняет код. Это включает исходный код, предварительно скомпилированный код и сценарии. Общие интерпретаторы включают интерпретаторы Perl, Python и Ruby, которые выполняют код Perl, Python и Ruby соответственно.

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

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

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

Обновлено: 16 сентября 2010 г.

TechTerms — Компьютерный словарь технических терминов

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

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

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

Подписаться

Если вы говорите, что что-то «вероятно», насколько это вероятно, по мнению людей?

Люди все время используют неточные слова, чтобы описать вероятность событий — «Сейчас , вероятно, пойдет дождь», или «Существует реальная вероятность, что они запустят раньше нас», или « сомнительно, медсестры нанесут удар. . » Такие вероятностные термины не только субъективны, но также могут иметь самые разные толкования.Один человек «весьма вероятно», а другой «далеко не уверен». Наше исследование показывает, насколько широки могут быть эти пробелы в понимании и какие типы проблем могут возникать из-за этих различий в интерпретации.

В известном примере (по крайней мере, он известен, если вы увлекаетесь подобными вещами), в марте 1951 года Управление национальных оценок ЦРУ опубликовало документ, в котором говорилось, что советское нападение на Югославию в течение года было «серьезной возможностью. . » Шерман Кент, профессор истории Йельского университета, которого вызвали в Вашингтон, округ Колумбия.С., который был одним из руководителей Управления национальных оценок, был озадачен тем, что именно означает «серьезная возможность». Он интерпретировал это как означающее, что вероятность атаки составляет около 65%. Но когда он спросил членов Совета по национальным оценкам, что они думают, он услышал цифры от 20% до 80%. Такой широкий диапазон явно является проблемой, поскольку последствия этих крайностей для политики существенно различаются. Кент признал, что решение состоит в использовании чисел, с сожалением отметив: «Мы не использовали числа… и оказалось, что мы неправильно использовали слова.”

С тех пор мало что изменилось. Сегодня люди в мире бизнеса, инвестирования и политики продолжают использовать расплывчатые слова для описания возможных результатов. Почему? Фил Тетлок, профессор психологии Пенсильванского университета, который глубоко изучил прогнозирование, предполагает, что «расплывчатое словоблудие дает вам политическую безопасность».

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

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

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

Вот три основных урока из нашего анализа.

Урок 1: Используйте вероятности вместо слов, чтобы избежать неправильного толкования.

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

Сразу бросается в глаза широкий разброс вероятности того, что люди приписывают определенные слова. В то время как некоторые интерпретируются довольно узко, другие интерпретируются широко. Большинство — но не все — люди думают, что «всегда» означает, например, «100% времени», но диапазон вероятности, который в большинстве случаев приписывается событию с «реальной возможностью» возникновения, составляет от 20% до 80%. В целом мы обнаружили, что слово «возможный» и его варианты имеют широкий диапазон и вызывают путаницу.

Мы также обнаружили, что мужчины и женщины по-разному видят некоторые вероятностные слова. Как показано в таблице ниже, женщины склонны с большей вероятностью использовать двусмысленные слова и фразы, такие как «возможно», «возможно» и «может случиться». Здесь мы снова видим, что слово «возможно» и его вариации вызывают неправильное толкование. Этот результат согласуется с анализом, проведенным командой специалистов по анализу данных на Quora, сайте, где пользователи задают вопросы и отвечают на них. Эта команда обнаружила, что женщины используют неуверенные слова и фразы чаще, чем мужчины, даже если они так же уверены в себе.

Мы не обнаружили значимых различий в интерпретации в разных возрастных группах или между носителями английского языка и теми, кто не является родным, за одним исключением: фраза «slam dunk». В среднем, носители английского языка интерпретировали эту фразу как указывающую на вероятность 93%, тогда как носители английского языка оценили эту цифру как 81%. Этот результат является предупреждением о том, что при попытке выразить ясность следует избегать употребления культурно предвзятых фраз вообще и спортивных метафор в частности.

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

Урок 2: Используйте структурированные подходы для определения вероятностей.

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

Обширная литература показывает, что мы склонны к чрезмерной уверенности в своих суждениях. Например, в другом опросе мы попросили респондентов ответить на 50 истинных или ложных вопросов (например, «Расстояние от Земли до Солнца постоянно в течение года») и оценить их уверенность.Участвовало более 11000 человек. Результаты показывают, что средняя уверенность в правильном ответе составила 70%, в то время как среднее количество вопросов, на которые ответили правильно, составило всего 60%. Наши респонденты были чрезмерно самоуверенны на 10 процентных пунктов, что является обычным явлением в исследованиях психологии.

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

Как грамотно установить вероятности?

Когда шансы неоднозначны, в отличие от простой игровой ситуации (где вероятность выпадения орла или решки составляет 50%), вы имеете дело с тем, что теоретики принятия решений называют субъективными вероятностями . Они не претендуют на то, чтобы быть верной вероятностью, но отражают личные убеждения человека о результате. Вам следует обновлять оценки субъективной вероятности каждый раз, когда вы получаете соответствующую информацию.

Один из способов определить вашу субъективную вероятность — сравнить вашу оценку с конкретной ставкой. Допустим, в следующем квартале ожидается, что конкурент представит новое предложение, которое угрожает вывести из строя ваш самый прибыльный продукт. Вы пытаетесь оценить вероятность того, что знакомство не состоится. Можно сформулировать ставку следующим образом: «Если продукт не запускается, я получаю 1 миллион долларов, но если он запускается, я ничего не получаю».

А теперь представьте кувшин, полный 25 зеленых и 75 синих шариков.Вы закрываете глаза и выбираете шарик. Если он зеленый, вы получите 1 миллион долларов, а синий — ничего. Вы знаете, что у вас один шанс из четырех (25%) получить зеленый шарик и выиграть деньги.

Итак, на что бы вы предпочли сделать ставку: на неудачный запуск или на ничью из банки?

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

Таким образом, использование объективного теста помогает определить вашу субъективную вероятность. (Чтобы проверить другие уровни вероятности, просто мысленно отрегулируйте соотношение зеленых и синих шариков в банке. Имея 10 зеленых и 90 синих шариков, вы все равно возьмете из банки, а не сделаете ставку на провал продукта? вероятность того, что продукт не запустится, составляет менее 10%.)

Урок 3. Ищите отзывы, чтобы улучшить свои прогнозы.

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

Авторы общественного мнения и общественные интеллектуалы часто говорят о будущем, но обычно они не выражают своих убеждений достаточно точно, чтобы можно было точно отслеживать результаты деятельности.Например, аналитик может предположить: «Facebook, вероятно, останется доминирующей социальной сетью на долгие годы». Трудно измерить точность этого прогноза, потому что он субъективен, а вероятностная фраза предполагает широкий диапазон вероятностей. Утверждение типа «Существует 95% вероятность того, что через год у Facebook будет более 2,5 миллиардов пользователей в месяц», является точным и поддающимся количественной оценке. Более того, точность прогнозов аналитика можно измерить напрямую, предоставив обратную связь по эффективности.

Лучшие прогнозисты делают множество точных прогнозов и отслеживают свои результаты с помощью такого показателя, как оценка Бриера. Этот тип отслеживания производительности требует прогнозирования категориального результата (у Facebook будет более 2,5 миллиардов пользователей в месяц) в течение определенного периода времени (через год) с определенной вероятностью (95%). Это сложная дисциплина для освоения, но она необходима для совершенствования. И чем лучше ваши прогнозы, тем лучше ваши решения. Несколько онлайн-ресурсов облегчают задачу.The Good Judgment Open (основанная Тетлоком и другими учеными, принимающими решения) и Metaculus задают вопросы для практики прогнозирования. Рынки прогнозов, включая PredictIt, позволяют вам вкладывать реальные деньги в свои прогнозы.

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

Just-In-Time для Ruby 2.6, объяснение компилируемых и интерпретируемых языков | автор: Мишель Берри

Изображение с https://blog.heroku.com/ruby-just-in-time-compilation Пару недель назад был выпущен

Ruby 2.6 с совершенно новым компилятором Just-In-Time (JIT). Вы можете прочитать подробности об этой новой функции здесь, но если вы ищете дополнительную информацию, я подумал, что было бы полезно дать введение в различия между интерпретируемыми и компилируемыми языками и то, как JIT подходит.

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

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

Компиляция

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

Давайте использовать C в качестве примера языка, который обычно компилируется. Чтобы запустить программу C, необходимо использовать программное обеспечение компилятора, такое как gcc или clang, чтобы скомпилировать исходный код C в соответствующий машинный код для вашего компьютера.Важно отметить, что разные компьютеры имеют разные архитектуры ЦП , означает, что один компьютер обрабатывает вычисление нулей и единиц по-разному, чем другой. Компилятор переводит исходный код в машинный код для конкретной архитектуры. После того, как ваш код скомпилирован, его можно запускать сколько угодно раз в любой системе с той же архитектурой, но если вы обновите исходный код или захотите запустить свою программу на машине с другой архитектурой, вам понадобится перекомпилировать.

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

Интерпретация

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

Давайте используем Ruby в качестве примера «интерпретируемого» языка. Ruby 1.8 и более ранние версии использовали Ruby, использующий Ruby Interpreter (MRI) Matz, который вел себя, как описано выше. Он считывает каждую строку Ruby, анализирует и токенизирует ее, а затем использует древовидную структуру данных для ее выполнения.Однако начиная с версии 1.9 (около 2011 г.) Ruby перешел на реализацию под названием YARV (еще одна виртуальная машина Ruby). В этой реализации Ruby предварительно скомпилирован в более простую форму, состоящую из байт-кодов , названных потому, что они занимают 1 байт памяти. В качестве очень упрощенного примера, 2 + 3 будет преобразован в байт-код для сложения и примет 2 и 3 в качестве аргументов. После преобразования Ruby в байт-код виртуальная машина выполняет код построчно. Преобразование исходного кода в байт-код дает значительные преимущества в скорости.

Python также использует байт-код, и в Python вы можете непосредственно наблюдать его в файлах .pyc, которые выводит ваша программа. Эти файлы функционируют как кеш; если программа Python запускается снова без изменений, она может пропустить этап компиляции и сразу перейти к выполнению. Хотя Ruby также компилируется в байт-код, его байт-код хранится только в памяти, а не выводится в файл.

Компиляция Just-In-Time

Я только что описал, как некоторые современные интерпретируемые языки теперь включают этап компиляции байт-кода, но есть еще один способ, при котором компиляция и интерпретация начинают размываться, называемый Just-In-Time компиляцией.

Самым популярным компилятором Just-In-Time является виртуальная машина Java (JVM) . Java — это язык со статической типизацией, который может быть напрямую скомпилирован в машинный код, но обычно интерпретируется через JVM. В последнем случае Java компилируется в байт-код Java компилятором Javac, а затем интерпретируется JVM. Однако JVM не интерпретирует байт-код построчно. Вместо этого он пытается составлять значимые фрагменты кода, такие как функции, одновременно. Чтобы определить, как составить эти фрагменты кода, требуется немного больше времени, но выполнение более эффективно.Этот процесс называется своевременной компиляцией, потому что он ведет себя так же, как и компилятор, за исключением того, что он компилирует во время выполнения . Преимущество использования JVM заключается в том, что он сохраняет некоторые характеристики производительности компилируемых языков, делая при этом Java переносимым на разные машины в качестве интерпретируемого языка. Java — самый популярный язык в мире, во многом благодаря успеху JVM.

Помимо JVM, существуют другие проекты виртуальных машин, использующие JIT-компиляцию.PyPy — это пример интерпретатора Python с JIT, и, конечно же, Ruby теперь поставляется с дополнительной функцией JIT.

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

Скорость

Как правило, компиляция выполняется намного быстрее, чем интерпретация. Скомпилированная программа на C может выполняться на пару порядков быстрее, чем интерпретируемая программа на Python или Ruby. Однако гибридное JIT-решение Java довольно эффективно, и его выполнение может быть почти таким же эффективным, как и скомпилированная программа, написанная на C.

Переносимость

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

Динамическая и статическая типизация

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

В ruby ​​мы можем запустить write что-то вроде 2 + 3 или "a" + "b" , и интерпретатор определит тип объектов во время выполнения и вызовет правильный метод для сложения целых чисел или конкатенации строк. .

Ошибки / Отладка

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

Почему определение языка как «интерпретируемый» или «скомпилированный» является неправильным?

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

Почему тогда люди называют Python «интерпретируемым языком», а C — «компилируемым языком»?

Они относятся к наиболее распространенной реализации / распространению языка. Однако Python также может быть скомпилирован, и C также можно интерпретировать!

Что такое виртуальная машина?

Виртуальная машина — это все, что ведет себя абстрактно, как компьютер, то есть принимает в качестве входных данных ряд инструкций, но реализуется программно, а не аппаратно.Одним из распространенных способов использования виртуальных машин является запуск на компьютере ОС другой системы. Например, у вас есть ноутбук с Windows, но вы хотите эмулировать операционную систему Linux. Вы могли бы использовать программу, которая может скрывать между ОС системы, которую вы хотите запустить, и архитектурой вашего физического компьютера. Это называется «системная виртуальная машина».

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

Почему люди обычно называют Python и Ruby имеющими интерпретаторы, тогда как Java имеет виртуальную машину? Разве интерпретатор не подходит под определение виртуальной машины?

Это различие между интерпретатором и виртуальной машиной в основном семантическое или «социальная конструкция», как выразился этот человек.Я думаю, что интерпретатор подходит под определение виртуальной машины. Даже с более строгим определением интерпретаторы как Ruby, так и Python включают виртуальную машину, которая интерпретирует байт-коды. Помимо определений, JVM принципиально отличается от интерпретатора Ruby или Python. Я затронул несколько причин здесь, но остальные выходят за рамки этой статьи.

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

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

BaseCS , отличный блог по фундаментальным концепциям программирования: https: // medium.com / basecs / a-deeper-инспекция-в-компиляции-и-интерпретации-d98952ebc842

Ruby Under a Microscope , большая подробная книга о внутренностях Ruby, доступная для программистов с ограниченным знакомством с C: http: // patshaughnessy.net/ruby-under-a-microscope

Курс компьютерной архитектуры в Академии Брэдфилда, улучшенный очный курс по концепциям компьютерной архитектуры: https://bradfieldcs.com/

Тайлера Эллиота Беттильона видео на YouTube , Тайлер был моим инструктором в Брэдфилде и одним из лучших людей на планете по объяснению концепций CS https: // www.youtube.com/watch?v=KsZLPTRSleI

Размытые линии: Является ли Ruby интерпретируемым языком и что это вообще означает? | Мануэль Груллон

Чуть более двух недель назад я начал свой путь в школе Flatiron с 23 другими многообещающими людьми, учился писать код Ruby и быстро осваивал новые инструменты, но где-то по пути один из моих одноклассников спросил меня, не Ruby был интерпретируемым или компилируемым языком. Я сказал ему, что Ruby — это «интерпретируемый язык, как мне кажется?» и он попросил меня уточнить.Почему интерпретируется Ruby, что это означает и каковы плюсы и минусы интерпретируемых языков по сравнению с компилируемыми. Самое главное, как наш код переходит от кода к исполнению? Не имея возможности правильно ответить на его вопросы, я решил разобраться в этом вопросе и посмотреть, что я смогу найти.

Скомпилированный и интерпретируемый

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

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

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

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

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

источник изображения: quora.com

Итак, Ruby — это интерпретируемый язык, верно?

Оказывается, ответ зависит от того, кого вы спрашиваете.В настоящее время интерпретируется или компилируется язык или нет, не обязательно зависит от языка, но от реализации и инструментов, используемых вместе с языком. Как Rubyist, мы знакомы с идеей Ruby как гибкого языка, который позволяет вам выбирать, как вы хотите подходить к проблеме, с несколькими путями, которые все достигают одного и того же эффекта. Для некоторых Ruby — это компилируемый язык, потому что первые инструменты для написания Ruby включали компилятор. Нам легко рассматривать Ruby как интерпретируемый язык, потому что мы запускаем Ruby с помощью MRI, Matz Ruby Interpreter.Для Ruby доступны разные интерпретаторы и компиляторы, так что все зависит от того, кого вы спрашиваете.

Я написал код, нажал «Enter». Что теперь?

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

 помещает «Hello World» 

В какой-то момент мы все написали код, указанный выше. Вы сохраняете его как файл с именем test.rb, заходите в терминал, набираете ruby ​​test.rb, и ваш терминал выводит «Hello World».Но как ему это удалось? Оказывается, мы можем попросить Ruby показать нам некоторые шаги, так что давайте выясним.

 2.3.3: 006> pp Ripper.tokenize ("кладет 'Hello World'") ["ставит", "", "'", "Hello World", "'"] 

Ripper — это встроенная библиотека это позволяет нам вмешаться и увидеть некоторые промежуточные этапы между запуском нашего кода и тем, что он делает в итоге. Первый шаг — токенизация. Ruby разбивает все, что мы написали, на токены, дискретные части материала для оценки.Никакого исполнения кода еще не произошло. По сути, он просто разделил все слова, пробелы и знаки препинания и пометил каждый токен некоторой информацией. Если мы добавим тарабарщину вроде $ = va & + ta2_ , шаг токенизации все равно разделит этот мусор и токенизирует его.

 2.3.3: 005> pp Ripper.lex ("устанавливает 'Hello World'") [[[1, 0],: on_ident, "устанавливает"], [[1, 4],: on_sp, ""] , [[1, 5],: on_tstring_beg, "'"], [[1, 6],: on_tstring_content, "Hello World"], [[1, 17],: on_tstring_end, "'"]] 

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

 [: программа, 
[[: команда,
[: @ident, «помещает», [1, 0]],
[: args_add_block,
[[: string_literal,
[: string_content, [: @tstring_content, "Hello World", [1, 6]]]
]],
false]]]]

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

Последний шаг — выполнение кода. Когда мы вводим ruby ​​в терминал для запуска нашего кода ruby, мы вызываем MRI или Matz Ruby Interpreter. Он берет наш AST и переводит его в байт-код для запуска виртуальной машиной Ruby. Давайте посмотрим, как это выглядит.

 2.3.3: 012> помещает RubyVM :: InstructionSequence.compile ("помещает 'Hello World'"). Disassemble == disasm: #  @ > ======== ======================== 0000 трассировка 1 (1) 0002 putself0003 putstring "Hello World" 0005 opt_send_without_block ,  0008 leave 

Теперь это похоже на язык ассемблера, почти настолько низкий уровень, на который мы можем пойти, и наша программа была переведена на отдельные команды, которые может запускать наш процессор.Строка 0003 помещает строку «Hello World» в стек, а строка 0005 вызывает методы put с «Hello World» в качестве аргумента, а затем программа завершается. Это очень быстрый взгляд на то, как мы переходим от рубинового файла к исполняемому коду.

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

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

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

Однако интерпретация

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

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

Что касается генерации исполняемых файлов, то это не имеет отношения к этому, ИМХО. Часто можно создать исполняемый файл из скомпилированного языка. Но вы также можете создать исполняемый файл из интерпретируемого языка, за исключением того, что интерпретатор и среда выполнения уже упакованы в исполняемый файл и скрыты от вас. Это означает, что вы, как правило, по-прежнему оплачиваете затраты времени выполнения (хотя я уверен, что для некоторых языков есть способы перевести все в исполняемый файл дерева).

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

. .

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

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