Разное

Примеры интерпретаторы: Семь видов интерпретаторов виртуальной машины. В поисках самого быстрого

Содержание

Интерпретатор — Национальная библиотека им. Н. Э. Баумана

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:31, 18 января 2018.

Интерпретатор — программа (разновидность транслятора), выполняющая интерпретацию.

Интерпретация — построчный анализ, обработка и выполнение исходного кода программы или запроса (в отличие от компиляции, где весь текст программы, перед запуском, анализируется и транслируется в машинный или байт-код, без её выполнения) [Источник 1]

История

Первым интерпретатором языка высокого уровня был Lisp. Lisp был впервые реализован в 1958 году Стивом Расселом на компьютере IBM 704. Рассел читать бумаги Джона Маккарти, и понял (к удивлению Маккарти), что lisp-функция оценки может быть реализован в машинный код. В результате получился рабочий интерпретатор Lisp, который мог бы использоваться для запуска программ Lisp, или, более правильно, «оценивать выражения Lisp». [Источник 2]

Типы интерпретаторов

Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой. [1]

Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как Java, PHP, Tcl, Perl, REXX (сохраняется результат парсинга исходного кода), а также в различных СУБД.

В случае разделения интерпретатора компилирующего типа на компоненты получаются компилятор языка и простой интерпретатор с минимизированным анализом исходного кода. Причём [Исходный код|исходного код]] для такого интерпретатора не обязательно должен иметь текстовый формат или быть байт-кодом, который понимает только данный интерпретатор, это может быть машинный код какой-то существующей аппаратной платформы. К примеру, виртуальные машины вроде QEMU, Bochs, VMware включают в себя интерпретаторы машинного кода процессоров семейства x86.

Некоторые интерпретаторы (например, для языков Лисп, Scheme, Python, Бейсик и других) могут работать в режиме диалога или так называемого цикла чтения-вычисления-печати (англ. read-eval-print loop, REPL). В таком режиме интерпретатор считывает законченную конструкцию языка (например, s-expression в языке Лисп), выполняет её, печатает результаты, после чего переходит к ожиданию ввода пользователем следующей конструкции.

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

Следует также отметить, что режимы интерпретации можно найти не только в программном, но и аппаратном обеспечении. Так, многие микропроцессоры интерпретируют машинный код с помощью встроенных микропрограмм, а процессоры семейства x86, начиная с Pentium (например, на архитектуре Intel P6), во время исполнения машинного кода предварительно транслируют его во внутренний формат (в последовательность микроопераций).

Компиляторы против интерпретаторов [2]

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

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

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

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

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

Цикл разработки

Во время цикла разработки программного обеспечения программисты вносят частые изменения в исходный код. При использовании компилятора, каждый раз, когда изменение было внесено в исходный код, они должны ожидать компилятор, чтобы перевести измененные исходные файлы и соединить все файлы двоичного кода, прежде чем программа может быть исполнена. Чем больше программа, тем дольше ожидание. В отличие от этого, программист, использующий интерпретатор, делает ждет намного меньше, поскольку интерпретатор обычно просто должен перевести код, работающий на промежуточном представлении (или не перевести его вообще), таким образом требуется намного меньшего количества времени, прежде чем изменения смогут быть протестированы. Эффекты заметны после сохранения исходного кода и перезагрузки программы. Скомпилированный код обычно с меньшей готовностью отлажен для редактирования, компиляции и соединения — последовательные процессы, которые должны быть проведены в надлежащей последовательности с надлежащим набором команд. Поэтому у многих компиляторов также есть исполнительное средство, известное как Make-файл и программа. Make-файл перечисляет командные строки компилятора и компоновщика и файлы исходного кода программы, но мог бы использовать простой ввод меню командной строки (например, «Make 3»), который выбирает третью группу (набор) инструкций, и тогда дает команды компилятору и компоновщику, которые подают указанные файлы исходного кода. [3]

Распределение

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

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

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

Интерпретация кода медленнее, чем выполнение скомпилированного кода, потому что интерпретатор должен проанализировать каждый оператор в программе каждый раз, когда это выполняется, и затем выполнить желаемое действие, тогда как скомпилированный код просто выполняет действие в фиксированном контексте, определенном компиляцией. Этот анализ во время выполнения известен как «интерпретирующие издержки». Доступ к переменным также медленнее в интерпретаторе, потому что отображение идентификаторов в места хранения должно выполняться повторно во время выполнения, а не во время компиляции. [5]

Есть различные компромиссы между скоростью разработки при использовании интерпретатора и скоростью выполнения при использовании компилятора. Некоторые системы (такие как Lisp) позволяют интерпретируемому и скомпилированному коду вызывать друг друга и совместно использовать переменные. Это означает, что, как только подпрограмма была протестирована и отлажена под интерпретатором, она может быть скомпилирована и таким образом извлечь выгоду из более быстрого выполнения, в то время как другие подпрограммы разрабатываются. Много интерпретаторов не выполняют исходный код как есть но преобразуют его в некоторую более компактную внутреннюю форму. Многие интерпретаторы BASIC заменяют ключевые слова единственными маркерами байта, которые могут использоваться, чтобы найти инструкцию в таблице переходов. Несколько интерпретаторов, таких как интерпретатор PBASIC, достигают еще более высоких уровней уплотнения программы при помощи бит-ориентированной, а не байтовой структуры памяти программы, где маркеры команд занимают, возможно, 5 битов, номинально «16-разрядные» константы сохранены в неравномерном коде, требующем 3, 6, 10, или 18 битов, и операнды адреса включают «разрядное смещение». Многие BASIC интерпретаторов могут сохранить и считать назад свое собственное маркируемое внутреннее представление.

Регрессия

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

Алгоритм работы

  • прочитать инструкцию;
  • проанализировать инструкцию и определить соответствующие действия;
  • выполнить соответствующие действия;

Достоинства и недостатки интерпретаторов

Достоинства

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

Недостатки

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

Изменения

Байткод переводчиков

Существует спектр возможностей интерпретации и компиляции, в зависимости от объема анализа, выполненного до выполнения программы. Например, Emacs Lisp компилируется в байт-код, который является сильно сжатым и оптимизированным представлением источника Lisp, но не машинный код (и поэтому не привязан к какому-либо конкретному оборудованию). Этот» скомпилированный » код затем интерпретируется интерпретатором байт-кода (сам написан на языке C). Скомпилированный код в этом случае представляет собой машинный код для виртуальной машины, который реализуется не в аппаратном обеспечении, а в интерпретаторе байт-кода. Такие компилирующие переводчики иногда называют компиляторами. В интерпретаторе байт-кода каждая инструкция начинается с байта, и поэтому интерпретаторы байт-кода имеют до 256 инструкций, хотя не все могут быть использованы. Некоторые байт-коды могут принимать несколько байт и могут быть произвольно сложными. [7]

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

Переводчики с резьбовым кодом

Потоковые интерпретаторы кода похожи на интерпретаторы байт-кода, но вместо байтов используются указатели. Каждая» инструкция » — это слово, указывающее на функцию или последовательность инструкций, за которой, возможно, следует параметр. Интерпретатор продетого нитку кода либо выполняет циклическую выборку инструкций и вызывает функции, на которые они указывают, либо выбирает первую инструкцию и прыгает к ней, и каждая последовательность инструкций заканчивается выборкой и переходом к следующей инструкции. В отличие от байткода нет эффективного ограничения на количество различных инструкций, кроме доступной памяти и адресного пространства. Классический пример многопоточности-четвертый код, используемый в открытых системах Прошивка: язык исходный код компилируется в код «Ф» (байт-код), который затем интерпретируется виртуальной машиной. [8]

Абстрактные синтаксические интерпретаторы

В спектре между интерпретацией и компиляцией другой подход заключается в преобразовании исходного кода в оптимизированное абстрактное дерево синтаксиса (AST), а затем выполнении программы, следующей за этой древовидной структурой, или использовании его для генерации собственного кода просто в срок. При таком подходе каждое предложение должно быть проанализировано только один раз. Как преимущество над байт-код, АСТ сохраняет глобальную структуру программы и отношения между утверждениями (которые теряются в представлении байт-код), а при сжатии обеспечивает более компактное представление. Таким образом, использование AST было предложено в качестве лучшего промежуточного формата для компиляторов just-in-time, чем байткод. Кроме того, это позволяет системе выполнять лучший анализ во время выполнения. [9]

Однако, для устных переводчиков, АСТ вызывает больше накладных расходов, чем байт-код интерпретатора, из-за узлов, связанных с синтаксисом, выполняющих никакой полезной работы, менее последовательное представление (требуется прохождение нескольких указателей) и накладных осмотреть дерево.

Сборник «точно в срок»

Дальнейшим размыванием различия между интерпретаторами, интерпретаторами байт-кода и компиляцией является компиляция just-in-time (JIT), метод, в котором промежуточное представление компилируется в машинный код машинного кода во время выполнения. Это повышает эффективность выполнения собственного кода за счет времени запуска и увеличения использования памяти при первой компиляции байт-кода или AST. Адаптивная оптимизация-это дополнительный метод, при котором интерпретатор профилирует запущенную программу и компилирует ее наиболее часто выполняемые части в машинный код. Оба метода несколько десятилетий, появляются в языках, таких как Smalltalk в 1980-х.

Просто в момент компиляции завоевала всеобщее внимание среди разработчиков языков в последние годы, с Java, на Framework, у большинства современных реализациях JavaScript, MATLAB, которые сейчас в том числе JITs.

Self-переводчик

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

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

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

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

Некоторые языки имеют элегантный само-переводчик, таких как Лисп или Пролог.[править] много исследований по собственной переводчиков (в частности, отражательная переводчиков) был проведен в схеме язык программирования, диалект Лиспа. В целом, однако, любой Тьюринг-полный язык позволяет писать собственные переводчика. Lisp-это такой язык, потому что программы Lisp являются списками символов и другими списками. XSLT-это такой язык, потому что язык XSLT программы пишутся в XML. Суб-домен Мета-программирование-это написание проблемно-ориентированные языки (DSL-языки).

Клайв Гиффорд представил[править] измерение качества собственн-переводчик (в eigenratio), предел соотношения между компьютерами время, потраченное на работу стека N собственн-переводчики и времени, потраченных на проведение стек из N − 1 самовыдвижение-переводчиков при N стремящемся к бесконечности. Это значение не зависит от программы.

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

Микрокод

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

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

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

Приложения [12]

  • Интерпретаторы часто используются для выполнения языков команд, и языки клея, так как каждый оператор, выполняемый на языке команд, обычно является вызовом сложной подпрограммы, такой как редактор или компилятор.
  • Самомодифицирующийся код может быть легко реализован на интерпретируемом языке. Это относится к истокам интерпретации в Lisp и исследований искусственного интеллекта.
  • Виртуализация. Машинный код, предназначенный для аппаратной архитектуры можно запустить с помощью виртуальной машины. Это часто используется, когда предполагаемая архитектура недоступна или используется для выполнения нескольких копий.
  • Песочница: в то время как некоторые типы песочницы полагаются на защиту операционной системы, интерпретатор или виртуальная машина часто используется. Фактическая аппаратная архитектура и первоначально предназначенная аппаратная архитектура могут быть одинаковыми или не совпадать. Это может показаться бессмысленным, за исключением того, что песочницы не вынуждены фактически выполнять все инструкции, которые они обрабатывают. В частности, он может отказаться выполнить код, который нарушает какие-либо ограничения, связанные с безопасностью его эксплуатации в соответствии.
  • Эмуляторы для запуска компьютерного программного обеспечения, написанного для устаревшего и недоступного оборудования на более современном оборудовании

Типы языка

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

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 — возможность создавать и вызывать собственные функции, которые на самом деле очень даже процедуры.

Грамматика языка

Любая конструкция, кроме запроса статистики (это у нас как бы служебная команда) и создания функции начинается и заканчивается ключевыми словами. Благодаря этому мы можем смело расставлять как угодно переносы строк и отступы. Кроме этого (мы же работаем с русским языком) я специально создал по паре инструкций для случаев, когда надо передавать и переменную, и значение. Позже увидите, зачем это было нужно. Итак, наш файл yobaParser.mly:

%{
        open YobaType
%}

%token <string> ID
%token <int> INT

%token RULEZ
%token GIVE TAKE
%token WASSUP DAMN
%token CONTAINS THEN ELSE
%token FUCKOFF
%token STATS
%token MEMORIZE IS
%token CALL

%start main
%type <YobaType.action> main

%%

main:
        expr                                          { $1 }
expr:
        fullcommand                                   { $1 }
      | MEMORIZE ID IS fullcommandlist DAMN           { AddFunction($2, $4) }
fullcommandlist:
        fullcommand                                   { $1 :: [] }
      | fullcommand fullcommandlist                   { $1 :: $2 }
fullcommand:
        WASSUP command DAMN                           { $2 }
      | STATS                                         { Stats }
command:
        FUCKOFF                                       { DoNothing }
      | GIVE ID INT                                   { Increment($3, $2) }
      | GIVE INT ID                                   { Increment($2, $3) }
      | TAKE ID INT                                   { Decrement($3, $2) }
      | TAKE INT ID                                   { Decrement($2, $3) }
      | RULEZ ID                                      { Create($2) }
      | CALL ID                                       { CallFunction($2) }
      | CONTAINS ID INT THEN command ELSE command     { Conditional($3, $2, $5, $7) }
      | CONTAINS INT ID THEN command ELSE command     { Conditional($2, $3, $5, $7) }
%%

Первым делом мы вставляем заголовок — открытие модуля YobaType, который содержит наш тип action, описанный в самом начале. Для чисел и строк, не являющихся ключевыми словами языка (переменных) мы объявляем два специальных типа, которым указываем, что именно они в себе содержат. Для каждого из ключевых слов с помощью директивы %token мы создаём тоже свой тип, который будет идентифицировать это слово в грамматике. Можно было бы указать их все хоть в одну строчку, просто такая запись группирует всё по видам инструкций. Имейте в виду, что все созданные нами токены — это именно подстановочные типы, по которым парсер грамматики определяет, что ему делать. Обозвать их можно как угодно, то, как они будут выглядеть в самом языке, мы опишем позже. Указываем, что входной точкой для грамматики является main, и что возвращать он всегда должен объект типа action — инструкцию для интерпретатора. Наконец, после двух знаков %% мы описываем саму грамматику:

  • Инструкция состоит либо из команды (fullcommand), либо из создания функции.
  • Функция, в свою очередь, состоит из списка команд (fullcommandlist).
  • Команда бывает либо служебной (STATS), либо обычной (command), в таком случае она должна быть обёрнута в ключевые слова.
  • С обычной командой всё просто, даже расписывать не буду.

В фигурных скобках мы указываем, что делать при совпадении строки с данным вариантом, при этом $N обозначает N-ный член конструкции. Например, если мы встречаем «CALL ID» (ID — это строка, не забываем), то мы создаём инструкцию CallFunction, которой в качестве параметра передаём $2 (как раз ID) — имя вызываемой функции.

Лексер — превращаем язык в ключевые слова

Мы дошли одновременно до практически самой простой и самой муторной части. Простая она, потому что всего лишь описывает превращение слов языка в наши токены. А муторная, потому что лексеры (а может, только окамловский лексер) плохо рассчитаны на работу с русским языком, поэтому работать с русскими символами можно только как со строками. Так как я хотел сделать ключевые слова языка регистро-независимыми, это добавило кучу геморроя — вместо простого написания «дай» надо было расписывать вариант написания каждой буквы. В общем, смотрите сами, файл yobaLexer.mll:

{
        open YobaParser
        exception Eof
}
rule token = parse
        ("и"|"И") ("д"|"Д") ("и"|"И") (' ')+
        ("н"|"Н") ("а"|"А") ("х"|"Х") ("у"|"У") ("й"|"Й") { FUCKOFF }
      | ("б"|"Б") ("а"|"А") ("л"|"Л") ("а"|"А")
        ("н"|"Н") ("с"|"С") (' ')+
        ("н"|"Н") ("а"|"А") ("х"|"Х")                     { STATS }
      | [' ' '\t' '\n' '\r']                              { token lexbuf }
      | ['0'-'9']+                                        { INT(int_of_string(Lexing.lexeme lexbuf)) }
      | ("д"|"Д") ("а"|"А") ("й"|"Й")                     { GIVE }
      | ("н"|"Н") ("а"|"А")                               { TAKE }
      | ("ч"|"Ч") ("о"|"О")                               { WASSUP }
      | ("й"|"Й") ("о"|"О") ("б"|"Б") ("а"|"А")           { DAMN }
      | ("л"|"Л") ("ю"|"Ю") ("б"|"Б") ("л"|"Л") ("ю"|"Ю") { RULEZ }
      | ("е"|"Е") ("с"|"С") ("т"|"Т") ("ь"|"Ь")           { CONTAINS }
      | ("т"|"Т") ("а"|"А") ("д"|"Д") ("а"|"А")           { THEN }
      | ("и"|"И") ("л"|"Л") ("и"|"И")                     { ELSE }
      | ("у"|"У") ("с"|"С") ("е"|"Е") ("к"|"К") ("и"|"И") { MEMORIZE }
      | ("э"|"Э") ("т"|"Т") ("о"|"О")                     { IS }
      | ("х"|"Х") ("у"|"У") ("й"|"Й") ("н"|"Н") ("и"|"И") { CALL }
      |
      ("а"|"б"|"в"|"г"|"д"|"е"|"ё"|"ж"
       |"з"|"и"|"й"|"к"|"л"|"м"|"н"|"о"
       |"п"|"р"|"с"|"т"|"у"|"ф"|"х"|"ц"
       |"ч"|"ш"|"щ"|"ъ"|"ы"|"ь"|"э"|"ю"|"я")+             { ID(Lexing.lexeme lexbuf) }
      | eof                                               { raise Eof }

Интерпретатор

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

open YobaType
 
let identifiers = Hashtbl.create 10;;
let funcs = Hashtbl.create 10;;
 
let print_stats () =
        let print_item id amount =
                Printf.printf ">> Йо! У тебя есть %s: %d" id amount;
                print_newline ();
                flush stdout in
        Hashtbl.iter print_item identifiers;;
 
let arithm id op value () =
        try
                Hashtbl.replace identifiers id (op (Hashtbl.find identifiers id) value);
                Printf.printf ">> Гавно вопрос\n"; flush stdout
        with Not_found -> Printf.printf ">> Х@#на, ты %s не любишь\n" id; flush stdout;;
 
let rec cond amount id act1 act2 () =
        try
                if Hashtbl.find identifiers id >= amount then process_action act1 () else process_action act2 ()
        with Not_found ->
                Printf.printf ">> Човаще?!\n";
                flush stdout
and process_action = function
        | Create(id) -> (function () -> Hashtbl.add identifiers id 0)
        | Decrement(amount, id) -> arithm id (-) amount
        | Increment(amount, id) -> arithm id (+) amount
        | Conditional(amount, id, act1, act2) -> cond amount id act1 act2
        | DoNothing -> (function () -> ())
        | Stats -> print_stats
        | AddFunction(id, funclist) -> (function () -> Hashtbl.add funcs id funclist)
        | CallFunction(id) -> callfun id
and callfun id () =
        let f: YobaType.action list = Hashtbl.find funcs id in
        List.iter (function x -> process_action x ()) f
;;
 
while true do
        try
                let lexbuf = Lexing.from_channel stdin in
                process_action (YobaParser.main YobaLexer.token lexbuf) ()
        with
                YobaLexer.Eof ->
                        print_stats ();
                        exit 0
              | Parsing.Parse_error ->
                        Printf.printf ">> Ни@#я не понял б@#!\n";
                        flush stdout
              | Failure(_) ->
                        Printf.printf ">> Ни@#я не понял б@#!\n";
                        flush stdout
done

Первым делом мы создадим две хэштаблицы — для переменных и для функций. Начальный размер 10 взят от фонаря, у нас же тренировочный язык, зачем нам сразу много функций.
Затем объявим две небольших функции: одна — для вывода статистики, вторая — для инкремента/декремента переменных.

Дальше идёт группа из сразу трёх функций: cond обрабатывает условные конструкции (наш if), callfun отвечает за вызов функций, а process_action отвечает за обработку пришедшей на вход инструкции как таковой. Надеюсь, почему все три функции зависят друг от друга, объяснять не надо.

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

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

Добавим к этому Makefile:

all:
   ocamlc -c yobaType.ml
   ocamllex yobaLexer.mll
   ocamlyacc yobaParser.mly
   ocamlc -c yobaParser.mli
   ocamlc -c yobaLexer.ml
   ocamlc -c yobaParser.ml
   ocamlc -c yoba.ml
   ocamlc -o yoba yobaLexer.cmo yobaParser.cmo yoba.cmo

clean:
   rm -f *.cmo *.cmi *.mli yoba yobaLexer.ml yobaParser.ml

Источники

Примечание

  1. «Why was the first compiler written before the first interpreter?». Ars Technica. Retrieved 9 November 2014. 
  2. ↑ Short animation, explaining the key conceptual difference between interpreters and compilers
  3. ↑ Terence Parr, Johannes Luber, The Difference Between Compilers and Interpreters
  4. ↑ Theodore H. Romer, Dennis Lee, Geoffrey M. Voelker, Alec Wolman, Wayne A. Wong,
    Jean-Loup Baer, Brian N. Bershad, and Henry M. Levy, The Structure and Performance of Interpreters]
  5. Heyne, R. (1984). «Basic-Compreter für U880» [BASIC compreter for U880 (Z80)]. Шаблон:Ill (in German) 1984 (3): 150–152. 
  6. Kühnel, Claus (1987) [1986]. «4. Kleincomputer — Eigenschaften und Möglichkeiten» [4. Microcomputer — Properties and possibilities]. In Erlekampf, Rainer; Mönk, Hans-Joachim. Mikroelektronik in der Amateurpraxis [Micro-electronics for the practical amateur] (in German) (3 ed.). Berlin: Шаблон:Ill, Leipzig. p. 222. ISBN 3-327-00357-2. 7469332. 
  7. ↑ A Tree-Based Alternative to Java Byte-Codes, Thomas Kistler, Michael Franz
  8. ↑ Surfin’ Safari — Blog Archive » Announcing SquirrelFish. Webkit.org (2008-06-02). Retrieved on 2013-08-10.
  9. ↑ L. Deutsch, A. Schiffman, Efficient implementation of the Smalltalk-80 system, Proceedings of 11th POPL symposium, 1984.
  10. Kent, Allen; Williams, James G. (April 5, 1993). Encyclopedia of Computer Science and Technology: Volume 28 — Supplement 13. New York: Marcel Dekker, Inc. ISBN 0-8247-2281-7. Retrieved Jan 17, 2016. 
  11. ↑ IBM Card Interpreters, page at Columbia University
  12. ↑ Theoretical Foundations For Practical ‘Totally Functional Programming’, (Chapter 7 especially) Doctoral dissertation tackling the problem of formalising what is an interpreter

Что это — интерпретатор, и где он используется? :: SYL.ru

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

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

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

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

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

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

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

Самые популярные программы интерпретатора

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

Современные функции компилятора:

  1. Компиляция. Сборка всех фрагментов кода.
  2. Интерпретация. Создание полумашинного кода.
  3. Линковка. Связывания частей интерпретированного кода в памяти.

Итак, из этого можно еще лучше понять, насколько интерпретатор — это мощное средство, поскольку без него программирование было бы таким же, как и в 60-х годах 20 века, то есть невероятно сложным. Теперь надо рассказать, какие же интерпретаторы (в составе компиляторов) на данный момент самые популярные:

  1. MVS. Популярный компилятор от «Майкрософт» для языка программирования С++.
  2. Xcode. Используется для создания приложений под технику Apple.
  3. MinGW. Один из самых распространенных компиляторов для языков программирования С и С++. Является прямым конкурентом MVS.

В каких языках используются интерпретаторы?

В современном мире программирования чаще всего используют только самые популярные языки программирования, ведь именно они развиваются наиболее быстро, что позволяет воплотить весь потенциал программистов. Примером таких языков могут стать Java и С\С++. Веб-языки не стоит относить сюда, потому что реализации их кода не требуются дополнительные приспособления, кроме рабочей станции и приложения, способного запустить код. Многие программисты считают лучшим интерпретатором Windows именно MVS, поскольку он разработан исключительно только для работы с операционной системной Windows.

Где можно найти объектные файлы?

После компиляции в папке с проектом создается специальный объектный файл – это и есть плод стараний компилятора. В операционной системе «Линукс» подобный файл использует расширение «*.о», т.е. от слова object. В операционной системе Windows этот процесс сразу перетекает в создание исполняемого файла, который можно дизассемблировать и получить тот же результат, что и при открытии файла с расширением «*.o».

В заключение

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

Типы интерпретаторов — Студопедия

Раздельная компиляци

Декомпиляция

Динамическая компиляция

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

CIL-код также компилируется в код целевой машины JIT-компилятором, а библиотеки .NET Framework компилируются заранее.

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



Раздельная компиляция (англ. separate compilation) — трансляция частей программы по отдельности с последующим объединением их компоновщиком в единый загрузочный модуль.[2]

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


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

Интерпрета́тор — программа (разновидность транслятора) или аппаратное средство, выполняющее интерпретацию.

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

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

Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как Java, Tcl, Perl (используется байт-код), REXX (сохраняется результат парсинга исходного кода]), а также в различных СУБД (используется p-код).

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

Некоторые интерпретаторы (например, для языков Лисп, Scheme, Python, Бейсик и других) могут работать в режиме диалога или так называемого цикла чтения-вычисления-печати (англ. read-eval-print loop, REPL). В таком режиме интерпретатор считывает законченную конструкцию языка (например, s-expression в языке Лисп), выполняет её, печатает результаты, после чего переходит к ожиданию ввода пользователем следующей конструкции.

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

Следует также отметить, что режимы интерпретации можно найти не только в программном, но и аппаратном обеспечении. Так, многие микропроцессоры интерпретируют машинный код с помощью встроенных микропрограмм, а процессоры семейства x86, начиная с Pentium (например, на архитектуре Intel P6), во время исполнения машинного кода предварительно транслируют его во внутренний формат (в последовательность микроопераций).

Интерпретатор — это… Что такое Интерпретатор?

Эта статья включает описание термина «Интерпретация»; см. также другие значения.

Интерпрета́тор — программа (разновидность транслятора) или аппаратное средство, выполняющее интерпретацию.[1]

Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения).[2][3][4]

Типы интерпретаторов

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

Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки — большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как Java, Tcl, Perl (используется байт-код[источник не указан 1309 дней]), REXX (сохраняется результат парсинга исходного кода[5]), а также в различных СУБД (используется p-код[источник не указан 1309 дней]).

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

Некоторые интерпретаторы (например, для языков Лисп, Scheme, Python, Бейсик и других) могут работать в режиме диалога или так называемого цикла чтения-вычисления-печати (англ. read-eval-print loop, REPL). В таком режиме интерпретатор считывает законченную конструкцию языка (например, s-expression в языке Лисп), выполняет её, печатает результаты, после чего переходит к ожиданию ввода пользователем следующей конструкции.

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

Следует также отметить, что режимы интерпретации можно найти не только в программном, но и аппаратном обеспечении. Так, многие микропроцессоры интерпретируют машинный код с помощью встроенных микропрограмм, а процессоры семейства x86, начиная с Pentium (например, на архитектуре Intel P6), во время исполнения машинного кода предварительно транслируют его во внутренний формат (в последовательность микроопераций).

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

  1. прочитать инструкцию;
  2. проанализировать инструкцию и определить соответствующие действия;
  3. выполнить соответствующие действия;
  4. если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.

Достоинства и недостатки интерпретаторов

Достоинства

  • Бо́льшая переносимость интерпретируемых программ — программа будет работать на любой платформе, на которой есть соответствующий интерпретатор.
  • Как правило, более совершенные и наглядные средства диагностики ошибок в исходных кодах.
  • Упрощение отладки исходных кодов программ[источник не указан 573 дня].
  • Меньшие размеры кода по сравнению с машинным кодом, полученным после обычных компиляторов.

Недостатки

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

См. также

Примечания

  1. ГОСТ 19781-83; СТ ИСО 2382/7-77 // Вычислительная техника. Терминология: Справочное пособие. Выпуск 1 / Рецензент канд. техн. наук Ю. П. Селиванов. — М.: Издательство стандартов, 1989. — 168 с. — 55 000 экз. — ISBN 5-7050-0155-X
  2. Першиков В. И., Савинков В. М. Толковый словарь по информатике / Рецензенты: канд. физ.-мат. наук А. С. Марков и д-р физ.-мат. наук И. В. Поттосин. — М.: Финансы и статистика, 1991. — 543 с. — 50 000 экз. — ISBN 5-279-00367-0
  3. Борковский А. Б. Англо-русский словарь по программированию и информатике (с толкованиями). — М.: Русский язык, 1990. — 335 с. — 50 050 (доп,) экз. — ISBN 5-200-01169-3
  4. Толковый словарь по вычислительным системам = Dictionary of Computing / Под ред. В. Иллингуорта и др.: Пер. с англ. А. К. Белоцкого и др.; Под ред. Е. К. Масловского. — М.: Машиностроение, 1990. — 560 с. — 70 000 (доп,) экз. — ISBN 5-217-00617-X (СССР), ISBN 0-19-853913-4 (Великобритания)
  5. Dave Martin. Why does my OS/2 REXX program run more quickly the second time?. Rexx FAQs. Архивировано из первоисточника 22 августа 2011. Проверено 22 декабря 2009.
  6. Jeff Fox. Chapter 2. More Interpretation  (англ.). Thoughtful Programming and Forth. UltraTechnology. Архивировано из первоисточника 22 августа 2011. Проверено 25 января 2010.

Интерпретаторы — Студопедия

Определение 8. Интерпретатор — это программа, которая воспринимает исходную программу на входном (исходном) языке и выполняет ее.

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

Интерпретатор выполняет программу покомандно, по мере поступления ее исходного кода на вход интерпретатора.

Алгоритм работы простого интерпретатора:

1) прочитать инструкцию;

2) проанализировать инструкцию и определить соответствующие действия;

3) выполнить соответствующие действия;

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

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

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

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



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


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

Интерпретаторы долгое время значительно уступали в распространенности компиляторам. Как правило, интерпретаторы существовали для ограниченного круга относительно простых языков программирования (таких, например, как Basic). Высокопроизводительные профессиональные средства разработки программного обеспечения строились на основе компиляторов. Новый импульс развитию интерпретаторов придало распространение глобальных вычислительных сетей. Такие сети могут включать в свой состав компьютеры различной архитектуры, и тогда требование единообразного выполнения на каждом из них текста исходной программы становится определяющим. Поэтому с развитием глобальных сетей и распространением Всемирной сети Интернет появилось много новых систем, интерпретирующих текст исходной программы. Многие языки программирования, применяемые во Всемирной сети, предполагают именно интерпретацию текста исходной программы без порождения объектного кода. Некоторые современные языки программирования предполагают две стадии разработки: сначала исходная программа компилируется в промежуточный код (некоторый язык низкого уровня), а затем этот результат компиляции выполняется с помощью интерпретатора данного промежуточного языка. Широко распространенным примером интерпретируемого языка может служить HTML (Hypertext Markup Language) — язык описания гипертекста. На его основе в настоящее время функционирует практически вся структура сети Интернет. Другой пример — языки Java и JavaScript сочетают в себе функции компиляции и интерпретации (текст исходной программы компилируется в промежуточный код, не зависящий от архитектуры целевой вычислительной системы, этот код распространяется по сети и интерпретируется на принимающей стороне).

о чём думает змея? (часть I-III) / Хабр

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

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

Небольшой дисклеймер: свой рассказ я буду вести на примере интерпретатора python 2.7. Всё, о чем пойдёт речь далее, можно повторить и на python 3.x с поправкой на некоторые различия в синтаксисе и именование некоторых функций.

Итак, начнём.

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

>>> a = "hello"

Ваш палец падает на enter и питон инициирует 4 следующих процесса: лексический анализ, парсинг, компиляцию и непосредственно интерпретацию. Лексический анализ – это процесс разбора набранной вами строки кода в определенную последовательность символов, называемых токенами. Далее парсер на основе этих токенов генерирует структуру, которая отображает взаимоотношения между входящими в неё элементами (в данном случае, структура это абстрактное синтаксическое древо или АСД). Далее, используя АСД, компилятор создаёт один или несколько объектных модулей и передаёт их в интерпретатор для непосредственного выполнения.

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

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

Итак,

Объекты функций или функции, как объекты

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

>>> def foo(a):
...     x = 3
...     return x + a
...
>>> foo
<function foo at 0x107ef7aa0>

Выражение «функции – это объекты первого класса» означает, что функции – это объекты первого класса, в том смысле, в коем и списки – это объекты, и экземпляр класса MyObject – объект. И так как foo это объект, он имеет значимость сам по себе, безотносительно вызова его, как функции (то есть, foo и foo() — это разные вещи). Мы можем передать foo в другую функцию в качестве аргумента, можем переназначить её на новое имя (other_function = foo). С функциями первого класса можно делать, что угодно и они всё стерпят.

На данном этапе we need to go deeper, чтобы узнать, что объект функции в свою очередь содержит объект кода:

>>> def foo(a):
...     x = 3
...     return x + a
...
>>> foo
<function foo at 0x107ef7aa0>
>>> foo.func_code
<code object foo at 0x107eeccb0, file "<stdin>", line 1>

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

Объектный модуль генерируется питоновским компилятором и далее передаётся интерпретатору. Модуль содержит всю необходимую для выполнения информацию. Давайте посмотрим на его атрибуты:

>>> dir(foo.func_code)
['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__',
'__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename',
'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals',
'co_stacksize', 'co_varnames']

Их, как видите, немало, поэтому все рассматривать не будем, для примера остановимся на трёх наиболее понятных:

>>> foo.func_code.co_varnames
('a', 'x')
>>> foo.func_code.co_consts
(None, 3)
>>> foo.func_code.co_argcount
1

Атрибуты выглядят довольно интуитивно:
co_varnames – имена переменных
co_consts – значения, о которых знает функция
co_argcount – количество аргументов, которые функция принимает

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

>>> foo.func_code.co_code 'd\x01\x00}\x01\x00|\x01\x00|\x00\x00\x17S'

Что за неведомая байтовая фигня, спросите вы?

Вы наверное и сами понимаете, но я, на всякий случай, озвучу – «байткод» и «объект кода» это разные вещи: первый является атрибутом второго, среди многих других (см. часть 2). Атрибут называется co_code и содержит все необходимые инструкции для выполнения интерпретатором.

Что же из себя представляет этот байткод? Как следует из названия, это просто последовательность байтов. При выводе в консоль выглядит она достаточно бредово, поэтому давайте приведём её к числовой последовательности, пропустив через ord:

>>> [ord(b) for b in foo.func_code.co_code] [100, 1, 0, 125, 1, 0, 124, 1, 0, 124, 0, 0, 23, 83]

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

Байткод можно попытаться понять открыв файл интерпретатора CPython (ceval.c), но мы этого делать не будем. Точнее будем, но позже. Сейчас же пойдём простым путём и воспользуемся модулем dis из стандартной библиотеки.

Дизассемблируй это

Дизассемблирование – это перевод байтовой последовательности в нечто более понятное человеческому разуму. Для этой цели в питоне существует модуль dis, который подробно покажет вам всё, что скрыто. У модуля нет особого применения в продакшн-коде, результаты его работы нужны только вам, не интерпретатору.

Итак, давайте применим dis и снимем паранжу с нашего объектного модуля. Для этого воспользуемся функцией dis.dis:

>>> def foo(a):
...     x = 3
...     return x + a
...
>>> import dis
>>> dis.dis(foo.func_code)
  2           0 LOAD_CONST               1 (3)
              3 STORE_FAST               1 (x)

  3           6 LOAD_FAST                1 (x)
              9 LOAD_FAST                0 (a)
             12 BINARY_ADD
             13 RETURN_VALUE

Скрытый текст

Зачастую можно видеть записи вида dis.dis(foo), т.е. объект функции передаётся в дизассемблер напрямую. Это сделано для удобства, под капотом dis всё равно находит и анализирует func_code. В нашем примере мы передаём объект кода явно для лучшего понимания процесса.

Числа в первой колонке – это номера строк анализируемых исходников. Вторая колонка отражает смещение команд в байткоде: LOAD_CONST находится в позиции «0», STORE_FAST в позиции «3» и т.д. Третья колонка даёт байтовым инструкциям человекопонятные названия. Названия эти нужны только жалким людишкам нам, в интерпретаторе они не используются.

Две последние колонки содержат подробности об аргументах для данной команды, если таковые имеются. Четвёртая колонка отражает позицию аргумента в атрибуте объектного модуля. В нашем примере аргумент инструкции LOAD_CONST находится на первой позиции атрибута-списка co_consts, аргумент STORE_FAST – на первой позиции co_varnames. Наконец, в пятой колонке dis отражает значение или название соответствующей переменной. Убедимся в сказанном на практике:

>>> foo.func_code.co_consts[1]
3
>>> foo.func_code.co_varnames[1]
'x'

Это также объясняет, почему инструкция STORE_FAST находится на третьей позиции в байткоде: если где-то в байткоде есть аргумент, следующие два байта будут представлять этот аргумент. Корректная обработка таких ситуаций также ложится на плечи интерпретатора.

Хинт

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

Как dis переводит байты (например, 100) в осмысленные имена (например, LOAD_CONST) и наоборот? Подумайте, как бы вы сами организовали подобную систему? Если у вас появились мысли, вроде «ну, может там есть какой-то список с последовательным определением байтов» или «по-любому словарь с названиями инструкций в качестве ключей и байтами как значениями», поздравляю – вы абсолютно правы. Именно так всё и устроено. Сами определения происходят в файле opcode.py (можно также посмотреть заголовочный файл opcode.h), где вы сможете увидеть ~полторы сотни подобных строк:

def_op('LOAD_CONST', 100)       # Index in const list
def_op('BUILD_TUPLE', 102)      # Number of tuple items
def_op('BUILD_LIST', 103)       # Number of list items
def_op('BUILD_SET', 104)        # Number of set items

(Какой-то любитель комментариев заботливо оставил нам пояснения к инструкциям.)

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

Интерпретаторы для Windows XP, 7, 8, 10

XBasic

9 апреля, 2018

XBasic — один из вариантов языка программирования BASIC, который разработал Max Reason в конце 1980-х для процессора Motorola 88000 под управлением UNIX. В начале 1990-х… Скачать

Basic, VB, VB DotNet, Интерпретаторы, Компиляторы, Отладчики, Разработчику, Средства разработки

Scratch Desktop

20 февраля, 2018

Scratch Desktop – бесплатная платформа для освоения основных понятий и принципов программирования, изначально разработанная для школьников младших и средних классов. Работает на Microsoft Windows, Mac OS… Скачать

Интерпретаторы, Компиляторы, Программирование, Прочие языки, Разработчику, Средства разработки

WampServer

12 сентября, 2017

WampServer (до осени 2007 – WAMP5) – сборка веб-сервера, содержащая Apache HTTP Server, MySQL, интерпретатор скриптов PHP, phpMyAdmin и другие дополнения, предназначенная для веб-разработки под… Скачать

Базы данных, Веб-серверы, Интерпретаторы, Разработчику, Серверы, Средства разработки

Turbo51

3 августа, 2017

Turbo51 – свободный компилятор для языка программирования Pascal, для семейства микроконтроллеров Intel MCS-51 (8051). Он имеет синтаксис Borland Turbo Pascal 7, в том числе, поддерживает… Скачать

Delphi и Pascal, Интерпретаторы, Компиляторы, Разработчику, Средства разработки

Tiny C Compiler

22 июля, 2017

Tiny C Compiler (англ. Tiny C Compiler – «крошечный компилятор Си»), или TinyCC, или TCC – свободный компилятор C для платформы x86. Работает в операционных… Скачать

C, C++, C#, Интерпретаторы, Компиляторы, Разработчику, Средства разработки

SP-Forth

24 апреля, 2017

SP-Forth — свободная реализация языка Forth, начатая калининградским программистом Андреем Черезовым в 1992 году. В настоящее время проект развивается силами ряда участников русской Forth Interest Group… Скачать

Интерпретаторы, Компиляторы, Прочие языки, Разработчику

OCaml

21 марта, 2017

OCaml (Objective Caml) – современный объектно-ориентированный язык функционального программирования общего назначения, который был разработан с учётом безопасности исполнения и надёжности программ. Предназначен для работы в… Скачать

Интерпретаторы, Компиляторы, Прочие языки, Разработчику

Boo

23 февраля, 2017

Boo (бу) – свободный объектно-ориентированный язык программирования с сильной статической типизацией для платформы Microsoft .NET Framework. Появился в 2003 году. Является компилируемым подмножеством Python. Транслятор… Скачать

Интерпретаторы, Компиляторы, Прочие языки, Разработчику

Scapy

22 января, 2017

Scapy – свободная интерактивная оболочка и программная библиотека для манипулирования сетевыми пакетами на языке программирования Python. Scapy написана Филиппом Бионди в 2003 году и распространяется… Скачать

Интерпретаторы, Компоненты и библиотеки, Разработчику, Сети, Сканеры и снифферы

Ragel

28 ноября, 2016

Ragel – свободный компилятор конечных автоматов, производящий исходный код на C, C++, C#, Objective-C, D, Java, OCaml (Objective Caml), Go и Ruby. Работает под управлением Microsoft… Скачать

Интерпретаторы, Компиляторы, Разработчику, Средства разработки

5 типов интерпретации

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

одновременно

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

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

подряд

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

Факт: многие переводчики разрабатывают свои собственные «символы идеограммы», которые помогают им записывать не слова, а мысли говорящего в некой «языковой независимой» форме.«

Шепот

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

Факт: Шепотная интерпретация часто упоминается как chuchotage или «шепот» по-французски.

Реле

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

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

Связной

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

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

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

.

Как стать переводчиком: удобное руководство из 5 шагов

Ночь за ночью вам снится один и тот же сон.

Вы слышите шепот голосов, который затем становится все громче и громче. Неистовые голоса.

Темно. Голоса вокруг кажутся сбитыми с толку. Взволнованный. Может, даже боюсь.

Сначала вы не можете понять, что они говорят. Со временем слова становятся яснее и понятнее. Наконец, вы открываете рот, чтобы говорить, объяснять.

Лица вокруг выглядят обнадеживающими и расслабленными.Как по волшебству, каждый мгновенно улавливает ваш смысл.

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

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

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

Или мечтаете стать переводчиком?

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

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

Загрузить: Это сообщение в блоге доступно в виде удобного и портативного PDF-файла, который вы можете
можно взять куда угодно. Щелкните здесь, чтобы получить копию. (Скачать)

Переводчик против переводчика: в чем разница?

«Переводчик» и «переводчик» часто используются как синонимы, особенно в фильмах и телешоу.

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

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

Будущие переводчики, читайте дальше!

Шаг 1. Начните с основ

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

Знание языка

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

Тем не менее, есть разница между изучением итальянского языка, достаточным для того, чтобы заказывать пиццу в Риме, и профессиональной компетенцией для перевода на il Presidente del Consiglio dei Ministri (премьер-министр Италии).

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

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

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

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

Преданность изучению языков

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

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

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

И даже если вы официально говорите на беглом, вы все равно не закончите.

Посвящение постоянному обучению

Вы, вероятно, не думаете о том, чтобы быть в курсе событий на родном языке. Конечно, вы можете услышать незнакомое выражение и подумать: «Ого, это новое!» И, если вы такой же ботаник, как я, вы можете поискать его в Urban Dictionary, чтобы убедиться, что вы уловили все его нюансы.

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

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

Культурные интерпретации

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

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

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

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

Профессиональная самоотверженность

Успешные переводчики не умеют редактировать.

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

При устном переводе акцент должен делаться на говорящих, а не на переводчиков.

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

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

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

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

Шаг 2. Решите, каким переводчиком вы хотите стать

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

Медицинский переводчик

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

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

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

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

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

Судебный / юридический переводчик

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

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

Деловой переводчик

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

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

Вы можете работать в агентстве языковых услуг, таком как Language Scientific или ALTA Language Services. Такие компании, как эти, обслуживают бизнес-потребности многих отраслей.

Переводчик иммиграционной службы

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

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

Дипломатический переводчик

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

Международные встречи, например встречи между главами государств, — еще одно место, где необходимы дипломатические переводчики.

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

Переводчик для путешествий

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

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

Одновременное или последовательное?

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

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

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

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

Шаг 3. Сертификаты, необходимые для исследования

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

Типы сертификатов

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

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

  • Китайский (кантонский и мандаринский)
  • Корейский
  • Русский
  • Испанский
  • Вьетнамский

Комиссия по сертификации переводчиков в сфере здравоохранения (CCHI) предоставляет аналогичные услуги. сертификация с использованием стороннего тестирования для проверки знания языка.

Судебные переводчики, работающие в США, могут иметь квалификацию сертифицированных федеральных переводчиков или работать на уровне штата с сертификатом Национального центра судов штатов.

Преимущества сертификации

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

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

Шаг 4: Настройте свое образование

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

Юристам-подражателям необходимо закончить юридическую школу.

Однако требования к обучению переводчиков не всегда однозначны.

Сколько вам нужно образования?

Достаточно ли программы сертификации? Или вам также понадобится степень бакалавра или аспирантура?

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

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

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

Настройте свой учебный план

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

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

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

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

Рассмотрим специализированную школу

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

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

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

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

Шаг 5: Практика с реальными языковыми ресурсами

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

Прислушивайтесь: навыки аудирования

У всех нас были забавные и неловкие моменты, когда мы не слышали кого-то, даже на нашем родном языке.

Возможно, вы свободно владеете вторым языком на уровне носителя, но время от времени все равно что-то не слышите.

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

Передовой контент: всегда в курсе

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

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

Еще немного разговора: уверенно говорить

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

Независимо от темы, эти разговоры помогут вам:

  • Будьте в курсе языка.
  • Повысьте уверенность в себе как оратора.
  • Тренируйте свои навыки аудирования.

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

Волонтерство в свое время

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

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

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

The National Language Service Corps (NLSC) — американская организация, занимающаяся обслуживанием потребностей в гражданском языке через правительственные учреждения США. Членство в NLSC открыто для любого гражданина США 18 лет и старше, свободно владеющего английским и хотя бы одним другим языком. Плата за присоединение не взимается; обслуживание через организацию оплачивается почасовой оплатой.

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

Общайтесь с профессионалами: профессиональные организации

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

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

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

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

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

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

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


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

Загрузить: Этот пост в блоге доступен в виде удобного и портативного PDF-файла, который вы можете
можно взять куда угодно.Щелкните здесь, чтобы получить копию. (Загрузить)

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

Зарегистрируйтесь бесплатно!

.

Образец резюме переводчика с указанием навыков (шаблон и руководство)

Образец резюме переводчика

Felicita Ruiz, CT

Сертифицированный переводчик с испанского на английский

[email protected]

(347) 888-9955

linkedin.com/in/felicitaruiz

Краткое изложение квалификаций

Страстный многоязычный переводчик с 2,5 годами опыта перевода с испанского на английский и более 1 года с переводом с английского на испанский.Лингвафил с раннего детства. ATA CT английский> испанский и испанский> английский. Успешно перевел более 300 полных проектов, от документов до целых веб-сайтов. Хотите еще больше улучшить навыки перевода, став главным переводчиком в MegaTron Corporation.

Опыт работы

Переводчик с испанского на английский
Ноябрь 2016 — июнь 2019
One-Stop Translations & Linguists, Jackson Heights, NY

Ключевые квалификации и обязанности

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

Ключевые достижения

  • Успешно перевел более 300 полных проектов, от документов до целых веб-сайтов, с испанского на английский.

Переводчик с английского на испанский
Апрель 2015 г. — сентябрь 2016 г.
Spread the Word Publishers, Нью-Йорк, Нью-Йорк

Основные требования и обязанности

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

Ключевые достижения

  • Получена награда «Переводчик года» за переводы на испанский язык в 2015 году.

Образование

Бакалавр искусств в области испанского письменного и устного перевода

Нью-Йоркский университет, New York, NY

Выпуск: 2014

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

Ключевые навыки

  • Отличное устное, невербальное и письменное общение
  • Культурная осведомленность и интеллект
  • Тайм-менеджмент и многозадачность
  • Анализ и исследования
  • Самоуправление и самомотивация
  • Навыки творческого письма
  • Копирайтинг и копирование

Языки

  • Английский (американский): уровень владения носителями языка (ILR 5, CEFR C2 +, ACTFL Distinguished)
  • Испанский (латиноамериканский): уровень владения носителями языка ( ILR 5, CEFR C2 +, ACTFL Distinguished)
  • Португальский (бразильский): ограниченное рабочее знание (ILR 2+, CEFR B2, ACTFL Advanced Mid)
  • Французский: ограниченное рабочее знание (ILR 2, CEFR B1, ACTFL Intermediate High)
  • Итальянский: базовый уровень (ILR 1+, CEFR A2, ACTFL Intermediate Mid)

Сертификаты 90 020

  • Американская ассоциация переводчиков — сертифицированный переводчик с испанского на английский
  • Американская ассоциация переводчиков — сертифицированный переводчик с английского на испанский

Награды

  • Переводчик года 2015, с английского на испанский , Распространите Word Publishers

Членство

  • Международная федерация переводчиков / Международная федерация переводчиков (FIT)
  • Переводчики без границ (TWB)
  • Международная ассоциация переводов и межкультурных исследований (IATIS )

Хотите сэкономить время и подготовить резюме за 5 минут? Попробуйте наш конструктор резюме.Это быстро и легко. Кроме того, вы получите готовый контент, который можно добавить одним щелчком мыши. Посмотрите 20+ шаблонов резюме и создайте свое резюме здесь .

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

Один из наших пользователей, Никос, сказал следующее:

[Я использовал] хороший шаблон, который я нашел на Zety. В моем резюме теперь одна страница , а не три . То же самое.

Создайте свое резюме прямо сейчас

Вот несколько учебных руководств, связанных с переводом резюме:

Выше была наша идея идеального образца резюме переводчика.

Давай займемся вашим ремонтом.

Вот как написать резюме переводчика:

1. Выберите лучший формат для резюме переводчика

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

То же, что и в резюме —

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

Следуйте этим рекомендациям по форматированию резюме переводчика :

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

2. Напишите цель или резюме резюме переводчика

В резюме ваша презентация — это цель резюме или итоговое утверждение, также называемое профилем резюме.

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

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

A Цель резюме — лучший вариант, когда у вас мало или совсем нет опыта . Этот вводный абзац посвящен вашим карьерным целям. Тем не менее, он по-прежнему предоставляет им пронумерованные достижения, позволяющие вам выделиться как лучший кандидат на перевод.

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

3. Создайте идеальное описание работы переводчика для резюме

Пора показать им, что вы можете # i18n , как будто это никого не касается —

Как?

Зная, как наиболее эффективно описать опыт работы в резюме.

Чтобы сдать описание должности переводчика: davvero eccellente :

  • Сначала добавьте самую последнюю работу, а затем в обратном хронологическом порядке.
  • Поместите названия должностей вверху, даты трудоустройства ниже, название агентства и до 6 пунктов с подробным описанием должностных обязанностей, связанных с переводом.
  • Начинайте ввод каждого маркера с помощью слов действия (например,г., глобальный , локализованный и т. д.).
  • Используйте пронумерованные достижения, чтобы доказать, что вы лучший переводчик, которого они могут нанять.
  • Адаптируйте свое резюме к одной конкретной работе по переводу. Подобно тексту, преобразованному с помощью Google Translate, работодатели-переводчики ненавидят общие резюме.

Совет для профессионалов: Готовите ли вы резюме для первой работы переводчиком? У вас остались задачи, связанные с переводом. Просто поразите их должностными обязанностями, связанными с управлением проектами, точностью и т. Д.

4. Сделайте так, чтобы ваш переводчик продолжил работу в разделе «Образование».

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

Итак —

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

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

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

5.Подчеркните свои навыки перевода в резюме

С 2016 по 2026 год количество рабочих мест в сфере письменного и устного перевода в США увеличится на целых 18%.

Это более 12 000 переводчиков, с которыми нужно соревноваться.

So—

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

20+ наиболее важных навыков для переводчиков

Но…

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

Так что не верьте нашему списку дословно.

Скорее, вот лучший способ:

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

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

Когда вы закончите, конструктор резюме Zety оценит ваше резюме и подскажет , точно , как его улучшить.

6. Добавьте уровень владения языком в резюме переводчика

Ваши языковые навыки в резюме очень важны для работы переводчика (очевидно).

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

Вот как закрепить раздел о языковых навыках в резюме:

  • Перечислите языки в порядке их уровня владения, от самого высокого до самого низкого.
  • Если есть региональные варианты языка, укажите в скобках тот, который вам известен, например, арабский (египетский), немецкий (швейцарский).
  • Используйте стандартизованную структуру уровня владения языком от LinkedIn, ILR, CEFR или ACTFL — не придумывайте свою собственную!

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

7. Добавьте другие разделы в резюме переводчика

У вас есть все самое необходимое в шаблоне резюме переводчика.

Однако —

Если вы действительно хотите выделиться как соискатель переводческой работы, добавьте несколько дополнительных разделов.

Есть несколько хороших вариантов резюме переводчика:

8.Приложите сопроводительное письмо переводчика к своему резюме

Нужны ли сопроводительные письма?

Да.

Большинство менеджеров по найму хотят иметь сопроводительное письмо к заявлению о приеме на работу.

Итак —

Вот как составить сопроводительное письмо для работы по переводу, которую они оценят:

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

Посмотрите!

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

У вас есть какие-либо вопросы по составлению резюме переводчика? Возникли проблемы с разделами о знании языков, сертификатах перевода или опыте работы? Напишите нам в комментариях ниже и спасибо за чтение!

.

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

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