Тип работы:
Предмет:
Язык работы:


Транскомпилятор Resembler

Работа №84369

Тип работы

Дипломные работы, ВКР

Предмет

информатика

Объем работы43
Год сдачи2016
Стоимость4240 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
31
Не подходит работа?

Узнай цену на написание


Список использованных сокращений 1
Введение 4
ПРЕДМЕТНАЯ ОБЛАСТЬ 7
Расширяемое программное обеспечение 7
Многоуровневые приложения 10
RESEMBLER 13
Host Application Interface 13
Генерация C кода 17
RESEMBLY 19
Resembler IR 19
Система типов 23
RESEMBLER VS ВСТРАИВАЕМЫЕ ИНТЕРПРЕТАТОРЫ 29
Производительность 29
Потребление памяти 31
ИНТЕГРАЦИЯ В QT ПРИЛОЖЕНИЕ 33
Заключение 37
Список использованной литературы 40
Приложение 41
Список «расширяемых приложений» 41
Cкоростъ байткода Emacs Lisp 42
Сравнение скорости компиляции


Встраивание языка программирования - это распространённый приём для решения двух классов задач:
1. Расширение программного продукта.
2. Организация многоуровневой архитектуры1.
Для многоуровневой архитектуры обычно достаточно одного встроенного языка программирования, а в расширяемом программном обеспечении работает правило «чем больше, тем лучше»2.
Проблема #1 - встроить несколько языков программирования значительно сложнее, чем один.
Не любой язык программирования может быть эффективно3 встроен в произвольную систему. Выбор здесь - почти всегда компромисс между желаемым и доступным.
Проблема #2 - не у любого языка программирования есть имплементация, предназначенная для встраивания.
Если система позволяет интегрировать пользовательские модули на разных языках программирования, это ещё не означает, что возможно свободное взаимодействие между этими модулями. Если какой-то из модулей представляет собой набор функций (библиотеку), то, чаще всего, воспользоваться ей можно только из того же языка программирования, на котором написана библиотека.
Проблема #3 - взаимодействие между различными встроенными языками программирования внутри одного процесса зачастую осложнено или невозможно.
1 См. главу «Многоуровневые приложения».
2 Пример: игровой движок Unity предоставляет более одного языка программирования.
3 Производительность, потребление памяти и возможность запуска интерпретатора в режиме «песочницы».
Проект Resembler - это совокупностью компонентов, которые решают задачу интеграции группы языков программирования в программные продукты. Все поддерживаемые языки программирования имеют единый Host Application Interface и могут свободно взаимодействовать друг с другом практически без накладных расходов.
Основной идеей является транскомпиляция всех запрашиваемых языков программирования в язык программирования, на котором написано ядро интегрирующего приложения.
Целью данной работы является разработка комплекса Resembler:
• Host Application Interface (FFI)
o Binary encoder & decoder для файлов HAI конфигураций
• Менеджер загрузки динамических модулей (плагинов)
• SDK для лексического и синтаксического разбора
• Генератор C кода из промежуточного представления
• Синтаксический анализатор языка программирования Go
• Qt приложение, которое использует Go плагины
MVP включает в себя поддержку интеграции языка программирования Go в приложения, которые могут взаимодействовать с языком программирования C.
Архитектура Resembler позволяет добавлять новые frontend и backend компоненты без необходимости редактировать существующую кодовую базу. Со временем может появиться поддержка JVM как целевой платформы. Следующими языками, доступными для встраивания, будут: Lua, JavaScript, PHP и Scheme.
Почти каждый реализованный в Resembler язык программирования удовлетворяет лишь части спецификации этого языка. Соответственно их можно назвать диалектами, во многом соответствующие оригиналам. Причин такому решению несколько:
• Реализовать 80% спецификации значительно проще, чем все 100%.
• Не всем нужно полное соответствие. Не каждый знает все тонкости стандарта языка.
• Качество некоторых формальных описаний оставляет желать лучшего. Иногда они просто огромные, а для некоторых языков и вовсе нет спецификации.
Настоящий документ сначала описывает предметную область, затем сам Resembler и только потом существующие решения.
Описание предметной области вводит некоторые определения, которые необходимы для понимания сути работы. Там же приведены некоторые доводы, обуславливающие актуальность проектируемой системы.
В основной части описывается высокоуровневая архитектура, параллельно поднимаются некоторые вопросы реализации и возможные альтернативы. Дополняющие табличные материалы вынесены в приложение (ссылка на исходные коды Resembler там же).


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Результатом дипломной работы являются компоненты системы Resembler, которые в совокупности представляют MVP решение.
Пользователь может интегрировать в свои C/C++ приложения язык программирования Go и использовать клиентскую библиотеку для загрузки этих модулей в работающее приложение без его перезагрузки.
На основе Resembler можно построить интерактивную оболочку , ведь HotPlug маленьких сниппетов выполняется почти мгновенно и не снижает отзывчивость приложения (особенно если запускать эту процедуру в отдельном потоке). В дальнейшем может появиться возможность интерпретировать Resembly, что окончательно устранит разрыв в скорости вычисления коротких программ по отношению к встраиваемым интерпретаторам.
Помимо разработки самого программного пакета, были проведены измерения производительности нескольких встраиваемых интерпретаторов, а также производительность генерируемого кода других транскомпиляторов в язык программирования C. Самые значимые результаты приведены в приложении.
Resembler не упрощает задачу подготовки экспортируемого приложением API. И даже стандартная библиотека, которая поставляется вместе с основным дистрибутивом, может не подойти каждому мыслимому проекту. Скорее наоборот, трудно представить серьёзное приложение, где интегрирующей стороне было бы безразлично, как плагинами выделяется память и как именно они могут взаимодействовать с файловой системой. Проектирование этих интерфейсов - сложная задача, которую следует решать в отрыве от Resembler.



* Харольд Абельсон, Джеральд Джей Сассман [книга]: «Структура и интерпретация компьютерных программ» // учебник; 2 издание, Добросвет 2015
* Блог Intel [Электронный ресурс]: «Прошлое роста производительности: конец гонки частот, многоядерность и почему прогресс увяз на одном месте» // жанр; Хабрахабр, 2013 (http://habrahabr.ru/company/intel/blog/174719/)
* Russ Cox [Электронный ресурс]: «Thompson NFA regular expression engine» // жанр; Swtchboard, 2007 (https://swtch.com/~rsc/regexp/regexp1.html)
* Golang разработчики [Электронный ресурс]: «Go hashmap impl» // исходные коды; Google, 2014 (https://golang.org/src/runtime/hashmap.go)
* Doug Hoyte [Электронный ресурс]: «Programs that program» // жанр; Let over Lambda, ?? (http://letoverlambda.com/index.cl/guest/chap5.html)
* [Электронный ресурс] «Programming tasks solutions» // справочник; Rosetta code, 2015 (rosettacode.org/wiki/Category:Solutions_by_Programming_Task)
* Jneem [Электронный ресурс] «DFA regular expression is Rust» // исходные коды; Github, 2015 (https://github.com/jneem/regex-dfa)
* Goffrie [Электронный ресурс] «Parser & Lexer generator written in Rust, for Rust» // исходные коды; Github, 2015 (https://github.com/goffrie/plex)
* Niko Matsakis [Электронный ресурс] «LR(1) parser generator» // исходные коды; Github, 2015 (https://github.com/nikomatsakis/lalrpop)
* Jisang Yoo [Электронный ресурс] «Differences between Common Lisp and Emacs Lisp» // жанр; yoo2080, 2013 (https://yoo2080.wordpress.com/2013/08/16/differences-between-common-lisp-and-emacs-lisp/)
* [Электронный ресурс] «C++ language reference» // справочник; 2015 (http://en.cppreference.com/w/)
Статьи на Wikipedia:
https://en.wikipedia.org/wiki/Off-side rule
https://en.wikipedia.org/wiki/Off-side rule
https://en.wikipedia.org/wiki/Extended Backus%E2%80%93Naur Form
https://en.wikipedia.org/wiki/Self-organizing list


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ