Транспайлер: Что такое транспиляция | Hexlet Guides

Что такое транспиляция | Hexlet Guides

Понять, что такое транспайлеры и какова их роль в программировании, поможет следующий пример. Представим, что вы разрабатываете софт для TV-приставок и вам нужно добавить калькулятор на все приставки определенной фирмы. Есть одно но — некоторые приставки не обновлялись уже 7 лет и могут работать только со старой версией языка, на котором написан калькулятор. Тут появляется выбор:

  • Разрабатывать программу для двух типов приставок: на старой версии языка для тех, которые давно не обновлялись, и на новой — для современных.

  • Использовать «переводчик» с версии языка, которую используете вы, на версии, работающие на всех устройствах

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

Транспиляция — преобразование программы, написанной на одном языке программирования в качестве исходных данных, в эквивалентный код другой версии этого языка или в другой язык программирования того же уровня абстракции.Транспайлер: Что такое транспиляция | Hexlet Guides

  • Когда нужна транспиляция?
  • Как используют транспайлеры?
  • Как работают транспайлеры?
  • Инструменты (реализации) транспиляции кода
  • Итого
  • Дополнительные материалы

Когда нужна транспиляция?

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

Калькулятор запускается на встроенном браузере TV-приставки и написан на JavaScript последней версии. Также учтем, что приставки выпускались каждый год с ограниченным сроком поддержки и сейчас мы имеем множество устройств с разными версиями браузера (а, следовательно, и отличающиеся версии поддерживаемого JS-кода). Кроме того, браузер пользователя давно не обновлялся и код на JS, который может там работать, сильно отличается от текущих версий языка.

В такой ситуации чаще всего может пригодиться транспиляция кода. Транспайлеры помогут преобразовать код, написанный на последней версии JavaScript, в тот, который будет работать у всех пользователей независимо от времени, прошедшего с последнего обновления.Транспайлер: Что такое транспиляция | Hexlet Guides

Как используют транспайлеры?

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

  • Транспиляция одной версии языка в другую. Поскольку языки программирования постоянно обновляются, возникают ситуации, когда разработчик уже пишет на новой версии языка, а среда, где используется код, поддерживает и работает только с предыдущими версиями. Например, для переходов между версиями стандарта ECMAScript используется Babel. Транспайлеры позволяют преобразовывать код и в другую сторону: например, помогают перевести проект на более новую версию языка. Делать это вручную долго и больно. Например, если проект написан на Python 2.x, перевести его на Python 3 можно с помощью трансплайнера 2to3

  • Транспиляция между разными языками. Например преобразование TypeScript в JS. Подробнее об этом расскажем ниже

Как работают транспайлеры?

В качестве примера рассмотрим работу транспайлера над возведением в квадрат кода на JS:

a ** b

Вот как выглядит то же преобразование, проведенное с помощью объекта Math — он и использовался для операций по возведению в квадрат в старых версиях языка:

Math.Транспайлер: Что такое транспиляция | Hexlet Guides pow(a, b)

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

Преобразование исходного кода в абстрактною форму

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

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

  • Синтаксический анализ строит объект, который описывает все токены и их связи между собой. Он называется AST (abstract syntax tree или абстрактное синтаксическое дерево).Транспайлер: Что такое транспиляция | Hexlet Guides Оператор возведения в квадрат является бинарным выражением внутри программы (в нашем случае — единственным), а операнды станут идентификаторами в этом выражении:

Трансформация AST

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

На этом этапе дерево из предыдущего шага изменяется: трансформация меняет текущий код на код на предыдущей версии языка. В данном случае оператор умножения заменяется на вызов выражения, при этом его операнды становятся аргументами выражения (Math.pow):

Генерация конечного кода

Когда все изменения внесены, транспайлер берёт трансформированное AST кода и на его основе генерирует новый код.

В итоге код из начального состояния проходит ряд преобразований (анализ -> трансформация -> генерация) до конечного состояния — этот процесс и называется транспиляцией.

Обратная связь

После всех преобразований мы получили конечный код, который работает на нужной нам версии языка.Транспайлер: Что такое транспиляция | Hexlet Guides Но представим, что после трансилиляции в нашей программе появились ошибки. Как понять, где именно находится ошибка, если она ссылается какое-то место в трансипилированном коде (который может значительно отличаться от того, что мы писали изначально)?

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

Инструменты (реализации) транспиляции кода

Для фронтенд-разработки основной инструмент транспиляции — Babel. Он позволяет не только выполнять транспиляцию между версиями, которую мы рассмотрели выше, но и:

  • преобразовывать JSX-код в JavaScript при разработке на React
  • трансформировать LESS/SCSS в CSS при использовании CSS препроцессоров
  • транспилировать TypeScript в JS, когда нужно использовать типизацию

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

  • Haxe предназначен для транспилирования во Flash, JavaScript и Neko.Транспайлер: Что такое транспиляция | Hexlet Guides Со временем Haxe разросся до набора инструментов, поддерживающих транспиляцию на разные языки и платформы, включая JavaScript, C++, C#, Java, JVM, Python, Lua, PHP и Flash.
  • Lombok — решение для тех, кому хочется расширить возможности Java. Это плагин, добавляющий в Java новые «ключевые слова» и превращающий аннотации в Java-код. Он сокращает время на разработку и обеспечивает дополнительную функциональность.
  • Bridge.NET позволяет использовать в JavaScript производительность C#, а также мощные VisualStudio IDE и стандартные инструменты .NET. Grumpy обеспечивает трансляцию кода на языке Python в представление на языке Go и позволяет бесшовно запускать Python-программы в runtime-окружении Go.

Итого

В мире, где есть огромное количество языков программирования, а сами языки имеют множество версий, транспайлеры выполняют крайне важную работу — делают разработку удобнее. Программисты могут писать код на языке или версии языка, которая им удобна или имеет нужные функции, а транспайлеры выполнят работу по доставке этого кода до среды исполнения в нужном виде.Транспайлер: Что такое транспиляция | Hexlet Guides

На данный момент реализовано множество различных транспайлеров (Babel, Vala, Typescript transpiler, Bridge и другие), каждый из них решает свою задачу по-своему, но общий принцип работы транспайлеров похож у всех.

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

Дополнительные материалы

  • Сайт для построения AST
  • Перевод проекта The Super Tiny Compiler! (Супер Маленького Компилятора)

Все страницы — Юнионпедия

Все страницы — Юнионпедия

Новый! Скачать Юнионпедия на вашем Android™ устройстве!

Установить

Более быстрый доступ, чем браузер!

Все страницы · Предыдущая (Трансантарктическая экспедиция Британского содружества (1955 — 1958)) · Следующий (Транспорт Бутана)

Из:

ТранспайлерТранспанамская тропа Транспирация
Транспирационный коэффициентТранспирационное охлаждениеТрансплантат
ТрансплантацияТрансплантация сердцаТрансплантация фекальной микробиоты
Трансплантация роговицыТрансплантация головыТрансплантация гемопоэтических стволовых клеток
Трансплантация кроветворных стволовых клетокТрансплантация костного мозгаТрансплантация лёгких
Трансплантация лицаТрансплантация легкихТрансплантация матки
Трансплантация мозгаТрансплантация островковых клетокТрансплантация органов
Трансплантация органов в КитаеТрансплантация почкиТрансплантация пениса
ТрансплантологияТранспневматикаТранспорт
Транспорт (скульптурные композиции, Тольятти)Транспорт (завод)Транспорт (значения)
Транспорт (издательство)Транспорт / Трансинфо (издательство)Транспорт Кургана
Транспорт КрымаТранспорт КрасноярскаТранспорт Красногорска
Транспорт КНДРТранспорт КазахстанаТранспорт Казани
Транспорт Кайзерсверта (Дюссельдорф)Транспорт КанадыТранспорт Квебека
Транспорт КишинэуТранспорт КишинёваТранспорт Кишинева
Транспорт КитаяТранспорт Китайской Народной РеспубликиТранспорт Киргизии
Транспорт КладовоТранспорт Кладово (1939)Транспорт Королёва
Транспорт Пуща-ВодицыТранспорт Пущи-ВодицыТранспорт Праги
Транспорт ПриштиныТранспорт ПакистанаТранспорт Петрозаводска
Транспорт ОрлаТранспорт Афганистана Транспорт Арубы
Транспорт АвстралииТранспорт АвстрииТранспорт Азербайджана
Транспорт Алтайского краяТранспорт АлчевскаТранспорт Албании
Транспорт АлжираТранспорт Нагорно-Карабахской РеспубликиТранспорт Нижнего Новгорода
Транспорт РжеваТранспорт РоссииТранспорт Российской Федерации
Транспорт Российской Федерации.Транспайлер: Что такое транспиляция | Hexlet Guides Журнал о науке, экономике, практикеТранспорт Республики КосовоТранспорт Республики Корея
Транспорт Сьерра-ЛеонеТранспорт СШАТранспорт Санкт-Петербурга
Транспорт Сейшельских ОстрововТранспорт СенегалаТранспорт Туркмении
Транспорт ТаджикистанаТранспорт Тверской областиТранспорт Удмуртии
Транспорт УзбекистанаТранспорт УкраиныТранспорт Фарерских островов
Транспорт ФинляндииТранспорт ХарьковаТранспорт Чада
Транспорт ЧерниговаТранспорт ШумихиТранспорт Шадринска
Транспорт ЭфиопииТранспорт Экваториальной ГвинеиТранспорт Южной Кореи
Транспорт ЮнайтедТранспорт ЯкутииТранспорт Японии
Транспорт в КувейтеТранспорт в КрымуТранспорт в КНР
Транспорт в КНДРТранспорт в КатареТранспорт в Карелии
Транспорт в КазахстанеТранспорт в КазаниТранспорт в Калгари
Транспорт в Камбодже
Транспорт в КанадеТранспорт в Китайской Народной Республике
Транспорт в Китайской РеспубликеТранспорт в КитаеТранспорт в Киргизии
Транспорт в КиевеТранспорт в КоломнеТранспорт в Приднестровской Молдавской Республике
Транспорт в ПриднестровьеТранспорт в ПарагваеТранспорт в Париже
Транспорт в ПакистанеТранспорт в ПортугалииТранспорт в Польше
Транспорт в ОрлеТранспорт в Объединённых Арабских ЭмиратахТранспорт в Омской области
Транспорт в ОманеТранспорт в АстраханиТранспорт в Афганистане
Транспорт в АрубеТранспорт в АргентинеТранспорт в Армении
Транспорт в АвстралииТранспорт в АвстрииТранспорт в Азербайджане
Транспорт в АлбанииТранспорт в АлжиреТранспорт в Антигуа и Барбуда
Транспорт в АндорреТранспорт в Набережных ЧелнахТранспорт в Нагорно-Карабахской Республике
Транспорт в НигерииТранспорт в НидерландахТранспорт в Нижегородской области
Транспорт в НиколаевеТранспорт в Новой КаледонииТранспорт в Новокузнецке
Транспорт в Рязанской областиТранспорт в РоссииТранспорт в Республике Карелия
Транспорт в Республике КосовоТранспорт в Республике КореяТранспорт в Республике Сербской
Транспорт в Республике МакедонииТранспорт в Республике МолдоваТранспорт в Сьерра-Леоне
Транспорт в СуринамеТранспорт в СШАТранспорт в Саудовской Аравии
Транспорт в Сахалинской областиТранспорт в Саратовской областиТранспорт в Самарской области
Транспорт в Сан-МариноТранспорт в Санкт-ПетербургеТранспорт в Сирии
Транспорт в СингапуреТранспорт в СловакииТранспорт в Сербии
Транспорт в СенегалеТранспорт в ТурцииТранспорт в Туркмении
Транспорт в Тульской областиТранспорт в ТунисеТранспорт в Тыве
Транспорт в ТаджикистанеТранспорт в ТаиландеТранспорт в Тверской области
Транспорт в УдмуртииТранспорт в УзбекистанеТранспорт в Ульяновской области
Транспорт в Фарерских островахТранспорт в ФинляндииТранспорт в Химачал-Прадеш
Транспорт в ХорватииТранспорт в ХерсонеТранспорт в Чаде
Транспорт в ЧилиТранспорт в ЧехииТранспорт в Швеции
Транспорт в ШвейцарииТранспорт в ЭстонииТранспорт в Эфиопии
Транспорт в Экваториальной ГвинееТранспорт в Южной КорееТранспорт в Южном Судане
Транспорт в ЯкутииТранспорт в ЯпонииТранспорт в Мурманской области
Транспорт в МариуполеТранспорт в МароккоТранспорт в Мавритании
Транспорт в МалайзииТранспорт в МинскеТранспорт в Москве
Транспорт в Московской областиТранспорт в МолдавииТранспорт в Молдове
Транспорт в МонголииТранспорт в ИсландииТранспорт в Испании
Транспорт в ИшимбаеТранспорт в ИталииТранспорт в Ираке
Транспорт в ИранеТранспорт в Иркутской областиТранспорт в Ирландии
Транспорт в ИзраилеТранспорт в ИндииТранспорт в Индонезии
Транспорт в ИорданииТранспорт в ИерусалимеТранспорт в Западной Сахаре
Транспорт в БутанеТранспорт в БурундиТранспорт в Буркина Фасо
Транспорт в Буркина-ФасоТранспорт в БразилииТранспорт в Башкортостане
Транспорт в БакуТранспорт в БангладешТранспорт в Боснии и Герцеговине
Транспорт в БотсванеТранспорт в БолгарииТранспорт в Белгородской области
Транспорт в БелоруссииТранспорт в Восточном ТимореТранспорт в Воронеже
Транспорт в Волгоградской областиТранспорт в ВеликобританииТранспорт в Венгрии
Транспорт в ВенесуэлеТранспорт в ГрузииТранспорт в Грозном
Транспорт в ГрецииТранспорт в ГренландииТранспорт в Габоне
Транспорт в ГайанеТранспорт в ГоаТранспорт в Гондурасе
Транспорт в ГонконгеТранспорт в ГерманииТранспорт в ДРК
Транспорт в ДанииТранспорт в ДжибутиТранспорт в Доминиканской Республике
Транспорт в ДонецкеТранспорт в Демократической Республике КонгоТранспорт в Европе
Транспорт в ЕгиптеТранспорт в ЛюксембургеТранспорт в Латвии
Транспорт в ЛаосеТранспорт в ЛитвеТранспорт в Ливане
Транспорт в ЛивииТранспорт в Ленинградской областиТранспорт в Йемене
Транспорт во ФранцииТранспорт во ВьетнамеТранспорт во Владимирской области
Транспорт на сжатом воздухеТранспорт на КипреТранспорт на Сейшельских Островах
Транспорт на СейшелахТранспорт на УкраинеТранспорт на Фарерских островах
Транспорт на Шри-ЛанкеТранспорт на МартиникеТранспорт на Мадейре
Транспорт на МальдивахТранспорт общего пользованияТранспорт правоохранительных служб
Транспорт МценскаТранспорт МытищТранспорт Мариуполя
Транспорт МароккоТранспорт МадейрыТранспорт Минска
Транспорт МосквыТранспорт Московской областиТранспорт Молдавии
Транспорт МонголииТранспорт ИсландииТранспорт Ирака
Транспорт ИранаТранспорт Иркутской областиТранспорт Ирландии
Транспорт ИзраиляТранспорт ИерусалимаТранспорт Запорожья

Transpiler

Предположим, вы написали программу на одном языке, но хотите преобразовать ее в другой язык, тогда вы должны вызвать так называемый транспайлер .Транспайлер: Что такое транспиляция | Hexlet Guides Язык программирования на входе транспилятора может быть назван исходным языком, тогда как язык на выходе может быть назван целевым языком. Транспайлер иногда называют компилятором исходного кода .

Например, для преобразования кода C++ в код C потребуется транспилятор. Для преобразования кода Python в код Ruby потребуется транспилятор. Отметим, что в этом примере и исходный, и целевой языки находятся на одном уровне абстракции. Но допустим, мы конвертируем Java-код в байт-код или C-код в ассемблерный код, тогда это не называется транспиляцией. Транспиляторы не изменяют уровень абстракции, такой как перевод с языка высокого уровня на ассемблерный код, байт-код или машинный код.

Обсуждение

  • Чем транспилер отличается от компилятора?

    Транспиляция — это не то же самое, что компиляция. Источник: Ackerman 2016.

    Компилятор преобразует высокоуровневый удобочитаемый код в низкоуровневые инструкции, которые могут выполняться на компьютере.Транспайлер: Что такое транспиляция | Hexlet Guides Например, компилятор C преобразует код C в исполняемый код. Компилятор Java преобразует код Java в так называемый байт-код Java, который интерпретируется во время выполнения для выполнения на целевой машине.

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

    Однако некоторые люди используют эти термины как синонимы. Например, VOC считается транспилером из исходного кода Python в байт-код Java, хотя на самом деле эти два находятся на разных уровнях абстракции. Однако допустимо вызывать переводы на том же уровне абстракции, что и транспиляция, например из ассемблерного кода .ASM в ассемблерный код .A86.

    ISO/ IEC / IEEE 24765 определяет пять поколений языков, которые могут быть связаны с абстракциями, описанными выше.Транспайлер: Что такое транспиляция | Hexlet Guides

  • Зачем мне использовать транспилятор?

    Критический код Python перенесен на Фортран для повышения производительности. Источник: Bysiek et al. 2016, рис. 1.

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

    • Миграция : Миграция устаревшего кода на современный язык.
    • Совместимость : Создание кода, соответствующего более старой версии, в то время как разработчики получают преимущества от функций более новой версии, например, с браузерами, не обновленными до последних стандартов JavaScript.
    • Навыки кодирования : Кодовая база может быть переведена на язык, на котором навыки легко доступны. Или это может быть вопрос предпочтений. Например, те, кто из ООП предпочитаю фон TypeScript. Вместо этого программисты Python предпочитают CoffeeScript.Транспайлер: Что такое транспиляция | Hexlet Guides В обоих случаях код переносится в JavaScript.
    • Производительность : Исходный код был написан для быстрого прототипирования или проект перемещается на другую платформу, где другой язык более подходит. Возможно, у целевого языка есть лучший компилятор, который может генерировать более оптимизированный код. Например, критические части кодовой базы Python могут быть перенесены в Fortran, а затем вызваны из Python.
    • Инструментарий : Исходный язык лучше IDE , средства тестирования и отладки, такие как .NET и Visual Studio.
  • Как транспилятор работает внутри?

    шагов, которые выполняет транспилятор. Источник: Samuels 2017.

    Транспилятор анализирует код и извлекает токены, которые являются основными строительными блоками языка. Ключевые слова языка, переменные, литералы и операторы являются примерами токенов.Транспайлер: Что такое транспиляция | Hexlet Guides Этот шаг представляет собой комбинацию лексического анализа и синтаксического анализа. Transpiler знает, как это сделать, потому что он понимает правила синтаксиса входного языка. Учитывая это понимание, транспилятор строит то, что называется Дерево абстрактного синтаксиса ( AST ) .

    Следующим шагом является преобразование AST в соответствии с целевым языком. Затем это используется для генерации кода на целевом языке.

    AST Explorer — это онлайн-инструмент, который поможет вам просмотреть AST с фрагментом кода на многих популярных языках.

  • Не могли бы вы назвать какие-нибудь транспиляторы?

    JavaScript — это язык, который развивается в обычном темпе, но в Интернете также есть множество браузеров, использующих более старые версии языка.Транспайлер: Что такое транспиляция | Hexlet Guides Поэтому транспиляторы обычно используются в JS world для переноса кода в ES5, версию, поддерживаемую большинством браузеров. Существует множество транспилеров для JS , но самыми популярными являются Babel, TypeScript и CoffeeScript.

    ClojureScript транспилируется из Clojure в JS . JSweet транспилирует из Java в TypeScript или JS . GWT Web Toolkit, ранее известный как Google Web Toolkit, позволяет программистам Java использовать интерфейс JS для браузерных приложений. GWT включает транспилятор с Java на JS . Script# преобразуется из C# в JS . C2Rust и Corrode — две альтернативы транспиляции C в Rust.

    VOC — это транспилятор с Python на Java, а это значит, что даже приложения для Android можно создавать из кодовой базы Python.Транспайлер: Что такое транспиляция | Hexlet Guides Сам Python имеет две несовместимые версии: 2 и 3. Однако доступны инструменты для преобразования из одной версии в другую: 2to3 , модернизация , futurize и pasteurize . Их можно назвать транспиляторами.

Вехи

Входные и выходные файлы CONV86. Источник: Intel 1979, рис. 1-2.

Intel публикует подробную информацию о преобразователе под названием CONV86 . Он может преобразовывать исходный код сборки 8080/8085 в исходный код сборки 8086. Поскольку последний является типизированным языком, конвертер присваивает типы каждому символу. Обратите внимание, что используется термин преобразователь . Срок 9Транспайлер 0081 , возможно, появился позже.

Тим Патерсон пишет ПЕР. COM для перевода ассемблерного кода Z80 в ассемблерный код .Транспайлер: Что такое транспиляция | Hexlet Guides ASM для процессора Intel 8086. Процесс не полностью автоматизирован и требует ручной корректировки.

Гэри Килдалл пишет программу под названием XLT86 для преобразования ассемблерного кода .ASM, написанного для процессора Intel 8080, в ассемблерный код .A86 для Intel 8086. Идея состоит в том, чтобы автоматически портировать P/M-80 и MP/M-80. программы до Платформы CP /M-86 и MP/M-86.

Бьерн Страуструп, создатель C++, создает Cfront для преобразования кода C++ в код C, поскольку в то время у C++ не было собственного компилятора. Разработка Cfront прекращена в 1993 году.

Facebook создает HipHop для PHP (HPHPc) для преобразования PHP в C++ для повышения производительности во время выполнения. Это устарело в 2013 году виртуальной машиной HipHop ( HHVM ), которая использует компиляцию точно в срок.Транспайлер: Что такое транспиляция | Hexlet Guides HPHPc не полностью поддерживал PHP, его производительность снизилась, а его развертывание на всех серверах Facebook было нетривиальной задачей.

Сен
2014

Себастьян Маккензи создает транспайлер с именем 6to5 , который переводит код ES6 в код ES5. В феврале 2015 года он становится Babel .

Каталожные номера

  1. Аккерман, Дэвид. 2016. «WebAssembly: наконец-то избавились от JavaScript?» Simple Programmer, 25 мая. По состоянию на 03 июня 2018 г.
  2. Бисек, Матеуш, Александр Дрозд и Сатоши Мацуока. 2016. «Миграция устаревшего Fortran на Python с сохранением производительности на уровне Fortran за счет транспиляции и подсказок типов». 6-й семинар по Python для высокопроизводительных и научных вычислений (PyHPC) через Semantic Scholar.Транспайлер: Что такое транспиляция | Hexlet Guides Доступ 2018-06-03.
  3. ИСО/МЭК/ИИЭР. 2017. «Системная и программная инженерия — Словарь». ISO/IEC/IEEE 24765:2017, международный стандарт, второе издание, сентябрь. Проверено 24 января 2019 г.
  4. Интел. 1979. «MCS-86, преобразователь языка ассемблера, инструкции по эксплуатации для пользователей ISIS-II». Доступ 2018-06-05.
  5. Кейт-Маги, Рассел. 2017. «Как написать транспилятор Python». BeeWare, PyCon US 2017, Портленд, Орегон, 17-25 мая.
  6. Кайл, Джеймс. 2015. «Не рожден умирать». Блог Babel, 15 февраля. По состоянию на 03 июня 2018 г.
  7. Манчини, Альберто. 2015. «Набор инструментов GWT: создание мощных интерфейсов JavaScript с использованием Java».Транспайлер: Что такое транспиляция | Hexlet Guides Топтал. Доступ 2018-06-03.
  8. Павляк, Рено. 2016. «Сравнение транспилятора GWT с JSweet». JSweet, 10 февраля. По состоянию на 03 июня 2018 г.
  9. Сэмюэлс, Чарльз. 2017. «Мир транспиляторов Javascript». Сайт, 31 мая. По состоянию на 03 июня 2018 г.
  10. Шульц, Мариус. 2015. «Эпоха транспайлеров». Блог, 4 мая. По состоянию на 03 июня 2018 г.
  11. Сенгстаке, Пелеке. 2016. «Транспилеры JavaScript: что это такое и зачем они нам нужны». Скотч, 25 апреля. По состоянию на 03 июня 2018 г.
  12. Шарп, Джеймс. 2018. «c2rust против Corrode». Блог non-O(n) musings, 30 июня. По состоянию на 02 июля 2018 г.Транспайлер: Что такое транспиляция | Hexlet Guides
  13. Википедия. 2018а. «Компилятор исходного кода». Википедия, 31 мая. По состоянию на 03 июня 2018 г.
  14. Википедия. 2018б. «Передний фронт». Википедия, 18 апреля. По состоянию на 03 июня 2018 г.
  15. Википедия. 2018г. «Хип-хоп для PHP». Википедия, 25 марта. По состоянию на 03 июня 2018 г.
  16. Зацина, Фэрис. 2015. «Как Babel сравнивается с TypeScript». Блог Министерства программирования, 23 августа. По состоянию на 03 июня 2018 г.
  17. Чжу, Генри. 2016. «Вавилонское государство». Блог Babel, 7 декабря. По состоянию на 03 июня 2018 г.
  18. Нихилк GitHub.Транспайлер: Что такое транспиляция | Hexlet Guides 2013. «Сценарист». Доступ 2018-06-03.
  19. гитхаб. 2018. «ЛОС». Доступ 2018-06-03.

Дополнительная литература

  1. Сэмюэлс, Чарльз. 2017. «Мир транспиляторов Javascript». Сайт, 31 мая. По состоянию на 03 июня 2018 г.
  2. Эверлёф, Алекс. 2017. «Возможно, вам не нужно транспилировать ваш JavaScript». freeCodeCamp, 19 мая. По состоянию на 03 июня 2018 г.
  3. Шульц, Мариус. 2015. «Эпоха транспайлеров». Блог, 4 мая. По состоянию на 03 июня 2018 г.
  4. Кит-Маги, Рассел. 2017. «Как написать транспилятор Python». BeeWare, PyCon US 2017, Портленд, Орегон, 17-25 мая.

Статистика статьи

1070

Слова

2

Авторы

5

Правки

2

Чаты

10

Нравится

29K

Просмотров

Процитировать как

Девопедия.Транспайлер: Что такое транспиляция | Hexlet Guides 2019. «Транспилятор». Версия 5, 24 января. По состоянию на 02 мая 2023 г. https://devopedia.org/transpiler

Предоставлено
2 автора

Последнее обновление
2019-01-24 14:15:00

Интернет языки инструменты обратная совместимость

  • Транспиляторы JavaScript
  • Абстрактное синтаксическое дерево
  • Машинопись
  • Вавилон (транспилятор)
  • Поколения языков программирования
  • Средний язык

qiskit.compiler.

Транспайлер: Что такое транспиляция | Hexlet Guides transpile — Документация Qiskit 0.43.2
transpile( схемы , backend=нет , base_gates=нет , inst_map=нет , connection_map=нет , backend_properties=нет , initial_layout = нет , layout_method = нет , routing_method =Нет , translation_method=Нет , scheduling_method=Нет , инструкция_durations=Нет , dt=Нет , аппроксимация_степень=1.0 , Timing_constraints=Нет , 900 81 seed_transpiler=Нет , Optimization_level=Нет , callback=Нет , output_name=Нет , unitary_synchronous_method=’default’ , unitary_synchronous_plugin_config=Нет , target=Нет , hls_config=Нет , init_method =Нет , optim_method=Нет , ignore_backend_supplied_default_methods=False ) [источник]

Транспиляция одной или нескольких цепей в соответствии с желаемыми целями транспиляции.Транспайлер: Что такое транспиляция | Hexlet Guides

Устарело, начиная с версии 0.23.0: ранее все аргументы принимали списки той же длины, что и цепей , который использовался для специализации аргументов для схем в соответствующем индексы. Поддержка использования таких списков аргументов теперь устарела и будет быть удалены в версии 0.25.0. Если вам нужно использовать несколько значений для аргумент, вы можете использовать несколько transpile() вызовов (и потенциально parallel_map() для использования многопроцессорности, если это необходимо).

Транспиляция выполняется параллельно с использованием многопроцессорной обработки.

Параметры
  • схемы ( _CircuitT ) – Схема(ы) для передачи

  • бэкенд ( Необязательный [ Бэкэнд ] ) — если установлено, транспилятор скомпилирует входную схему для этой цели устройство. Если какой-либо другой параметр задан явно (например, connection_map ), это переопределит бэкэнд.Транспайлер: Что такое транспиляция | Hexlet Guides

  • base_gates ( Дополнительно [ Список [ стр ] ] ) — Список имен базовых ворот, на которые нужно развернуться. (например: ['u1', 'u2', 'u3', 'cx'] ). Если None , не разворачивать.

  • inst_map ( Дополнительно [ Список [ InstructionScheduleMap ] ] ) — сопоставление развернутых ворот с расписанием импульсов. Если это не предусмотрено, транспайлер пытается получить от бэкенда. Если какая-либо пользовательская калибровка находится на карте и используется в цепи, транспилятор прикрепляет пользовательское определение ворот для схемы. Это позволяет гибко переопределить реализацию инструкции низкого уровня. Эта функция доступна если серверная часть поддерживает эксперимент с импульсными воротами.

  • карта_сцепления ( Дополнительно [ Соединение [ CouplingMap , Список [ Список [ ] ] ] ] ) –

    Карта направленной связи (возможно, пользовательская) для цели в отображении.Транспайлер: Что такое транспиляция | Hexlet Guides Если карта связи симметрична, необходимо указать оба направления.

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

    1. Карта соединения экземпляр

    2. Список должен быть представлен в виде матрицы смежности, где каждая запись определяет все направленные двухкубитные взаимодействия, поддерживаемые серверной частью, например: [[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]

  • backend_properties ( Необязательный [ BackendProperties ] ) — свойства, возвращаемые бэкендом, включая информацию о шлюзе ошибки, ошибки считывания, время когерентности кубитов и т. д. Найдите бэкенд который предоставляет эту информацию: бэкенд.свойства()

  • initial_layout ( Дополнительный [ Union [ Layout , Dict 9008 4 , Список ] ] ) –

    Исходное положение виртуальных кубитов на физическом кубиты.Транспайлер: Что такое транспиляция | Hexlet Guides Если этот макет делает схему совместимой с Coupling_map ограничения, он будет использоваться. Окончательный макет не обязательно будет таким же, поскольку транспилятор может переставлять кубиты с помощью свопов или других средств. Поддерживается несколько форматов:

    1. Макет Экземпляр

    2. Диктовка * виртуальный в физический:

       {qr[0]: 0,
       qr[1]: 3,
       qr[2]: 5}
       
    3. Список

      • виртуальный в физический:

         [0, 3, 5] # упорядочены виртуальные кубиты (помимо именованных)
         
      • физическое в виртуальное:

         [qr[0], нет, нет, qr[1], нет, qr[2]]
         
  • layout_method ( Дополнительно [ str ] ) – Имя прохода выбора раскладки («тривиальный», «плотный», «шум_адаптивный», «сабля»). Это также может быть имя внешнего плагина для использования на этапе макета .Транспайлер: Что такое транспиляция | Hexlet Guides Вы можете увидеть список установленных плагинов, используя list_stage_plugins() с "layout" для аргумента stage_name .

  • метод_маршрутизации ( Дополнительно [ стр ] ) — Имя прохода маршрутизации («базовый», «упреждающий», «стохастический», «саблезный», «нет»). Примечание Это также может быть имя внешнего плагина для использования на этапе маршрутизации . Вы можете увидеть список установленных плагинов, используя list_stage_plugins() с "routing" для аргумента stage_name .

  • translation_method ( Необязательный [ str ] ) – Название прохода перевода («unroller», «translator», «synthese») Это также может быть имя внешнего плагина для использования в перевод этап. Вы можете увидеть список установленных плагинов, используя list_stage_plugins() с "перевод" для аргумента stage_name .Транспайлер: Что такое транспиляция | Hexlet Guides

  • метод_планирования ( Дополнительный [ стр ] ) – Имя прохода планирования. * 'as_soon_as_possible' : Расписание инструкций жадно, как можно раньше на кубитовом ресурсе. (псевдоним: 'как можно скорее' ) * 'как_поздно_как_возможно' : Инструкции по расписанию с опозданием, т.е. сохранение кубитов в основном состоянии, когда это возможно. (псевдоним: 'алап' ) Если None , планирование выполняться не будет. Это также может быть имя внешнего плагина. для использования на стадии планирования . Вы можете увидеть список установленных плагинов по используя list_stage_plugins() с "планированием" для stage_name аргумент.

  • инструкция_длительность ( Дополнительно [ Союз [ Список [ Кортеж [ стр , 900 84 Дополнительный [ Итеративный [ целое число ] ] , float , Необязательный [ Итерируемый [ float ] ] , стр ] ] , Список [ Кортеж [ стр , Дополнительно [ 90 084 Iterable [ int ] ] , float , Дополнительно [ Итерируемый [ float ] ] ] 9008 1 ] , Список [ Кортеж [ str , Дополнительно [ Итерируемый [ int ] ] , плавающий , стр ] ] , Список [ Кортеж [ str , Дополнительно [ Iter способный [ целое число ] ] , с плавающей запятой ] ] , InstructionDurations ] ] ) – продолжительность инструкций.Транспайлер: Что такое транспиляция | Hexlet Guides Применимо, только если указан метод планирования. Длина шлюза, определенная в backend.properties , используется по умолчанию. Они перезаписываются, если указано это инструкция_длительности . Формат инструкций_длительности должен быть следующим. инструкций_длительности должны быть указаны в виде списка кортежей. [(имя_инструкции, кубиты, продолжительность, единица измерения), …]. | [(‘cx’, [0, 1], 12.3, ‘ns’), (‘u3’, [0], 4.56, ‘ns’)] | [(‘cx’, [0, 1], 1000), (‘u3’, [0], 300)] Если единица измерения опущена, по умолчанию используется значение «dt», что представляет собой шаг расчета, зависящий от бэкенда. Если единицей времени является «dt», продолжительность должна быть целым числом.

  • dt ( Необязательный [ float ] ) – Время выборки (разрешение) серверной части в секундах. Если None (по умолчанию), используется backend.configuration().Транспайлер: Что такое транспиляция | Hexlet Guides dt .

  • аппроксимация_степень ( float ) — эвристический циферблат, используемый для аппроксимации схемы (1,0=нет приближения, 0,0=максимальное приближение)

  • timest_constraints ( Дополнительно [ Dict [ стр , инт ] ] ) – 9000 8

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

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

    • min_length: целочисленное значение, представляющее минимальный импульсный строб длина в единицах dt . Определяемый пользователем импульсный строб должен быть длиннее чем эта длина.Транспайлер: Что такое транспиляция | Hexlet Guides

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

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

    Эта информация будет предоставлена ​​серверной конфигурацией. Если у бэкенда нет ограничений на распределение времени инструкций, тогда Timing_constraints имеет значение None, и корректировка выполняться не будет.

  • seed_transpiler ( Необязательный [ int ] ) — Устанавливает случайное начальное число для стохастических частей транспайлера

  • уровень_оптимизации ( Необязательный [ int ] ) — Сколько оптимизации нужно выполнить в цепях.Транспайлер: Что такое транспиляция | Hexlet Guides Более высокие уровни генерируют более оптимизированные схемы, за счет увеличения времени транспиляции. * 0: без оптимизации * 1: оптимизация света * 2: сильная оптимизация * 3: еще более тяжелая оптимизация Если None , по умолчанию будет выбран уровень 1.

  • обратный вызов ( Дополнительный [ Вызываемый [ [ BasePass , DAGCircuit , float , PropertySet 90 081 , инт ] , Любой ] ] ) –

    Функция обратного вызова, которая будет вызываться после каждого пройти исполнение. Функция будет вызываться с ключевым словом 5 аргументы, | pass_ : выполняется проход. | dag : dag вывод прохода. | время : время выполнения прохода. | property_set : набор свойств. | count : индекс выполнения прохода.Транспайлер: Что такое транспиляция | Hexlet Guides Точные переданные аргументы раскрывают внутренности менеджера проходов, и могут быть изменены по мере изменения внутреннего устройства диспетчера пропусков. Если вы собираетесь повторно использовать функцию обратного вызова в нескольких выпусках, обязательно проверьте, что передаваемые аргументы одинаковы. Чтобы использовать функцию обратного вызова, определите функцию, которая будет возьмите kwargs dict и получите доступ к переменным. Например:

     по определению callback_func(**kwargs):
        pass_ = kwargs['pass_']
        даг = kwargs['даг']
        время = kwargs['время']
        property_set = kwargs['property_set']
        количество = kwargs['количество']
        ...
    транспортировать (циркуляр, обратный вызов = callback_func)
     
  • output_name ( Дополнительный [ Union [ str , List 9 0081 [ str ] ] ] ) — список со строками для идентификации выходные цепи.Транспайлер: Что такое транспиляция | Hexlet Guides Длина список должен быть точно такой же длины, как цепей параметр.

  • унитарный_синтез_метод ( стр ) — Название унитарного синтеза метод для использования. По умолчанию используется «по умолчанию» . Вы можете увидеть список установленных плагины с unitary_synchronous_plugin_names() .

  • unitary_synchronous_plugin_config ( Необязательный [ dict ] ) — Дополнительный словарь конфигурации который будет передан непосредственно плагину унитарного синтеза. К по умолчанию этот параметр не будет иметь никакого эффекта, так как по умолчанию унитарный метод синтеза не требует пользовательской конфигурации. Это должно быть необходимым только тогда, когда унитарный плагин синтеза указан с унитарный_синтез аргумент. Так как это индивидуально для каждого плагин унитарного синтеза, обратитесь к документации плагина, чтобы узнать, как чтобы использовать эту опцию.Транспайлер: Что такое транспиляция | Hexlet Guides

  • target ( Необязательный [ Target ] ) — целевой транспилер. Обычно это указывается как часть аргумент серверной части , но если вы вручную создали Целевой объект , здесь вы можете указать его вручную. Это переопределит цель с бэкэнд .

  • hls_config ( Необязательный [ HLSConfig ] ) — дополнительный класс конфигурации HLSConfig , который будет передан напрямую в HighLevelSynthesis проход преобразования. Этот класс конфигурации позволяет задавать для различных высокоуровневых объектов списки алгоритмы синтеза и их параметры.

  • init_method ( Дополнительно [ str ] ) — имя плагина для использования на этапе init . По умолчанию внешний плагин не используется. Вы можете увидеть список установленных плагинов по используя list_stage_plugins() с "init" для этапа аргумент имени.Транспайлер: Что такое транспиляция | Hexlet Guides

  • optim_method ( Необязательный [ str ] ) – имя плагина для использования этап оптимизации . По умолчанию внешний плагин не используется. Вы можете увидеть список установленных плагинов по используя list_stage_plugins() с "оптимизацией" для имя_стадии аргумент.

  • ignore_backend_supplied_default_methods ( bool ) — если установлено значение True любые методы по умолчанию, указанные бэкенд будет проигнорирован. Некоторые бэкенды указывают альтернативные методы по умолчанию. для поддержки пользовательских проходов/плагинов, специфичных для цели компиляции, которые поддерживают методы компиляции, специфичные для серверной части. Если вы предпочитаете, чтобы эти значения по умолчанию были не используется. Этот параметр используется для отключения этих специфических для бэкенда значений по умолчанию.Транспайлер: Что такое транспиляция | Hexlet Guides

Ответить

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