Код | 496855 |
Дата создания | 2023 |
Мы сможем обработать ваш заказ (!) 24 декабря в 12:00 [мск]
Файлы будут доступны для скачивания только после обработки заказа.
|
Оригинал документа в pdf, конвертация в Word автоматическая (в word могут быть недочеты, которые вы легко исправите самостоятельно)
В данной работе создан прототип расширения синтаксиса для языка программирования Lua, которой при компиляции преобразовывается в необработанный Lua. В процессе анализа синтаксиса, семантики и стандартной библиотеки Lua, были выявлены недостатки, которые нужно будут исправлены в прототипе. Синтаксис языка был значительно расширен, в него добавлены некоторые функции из популярных объектно-ориентированных языков программирования, например быстрая проверка существования объектов и упрощенные анонимные функции. Добавлена простая версия статической типизации, позволяющая избежать ошибок во время выполнения программы, когда переменная не была ожидаемого типа. Добавлена поддержка создания классов. Классы позволяют наследовать логику от классов и объектов Lua, реализовать интерфейсы, а так же включать поля и методы из других Lua объектов. Наконец, на основе классов, была добавлена стандартная библиотека, позволяющая упростить работу с простейшими типами данных. Все расширения языка направлены на улучшение работы с языком Lua в проектах среднего и большого размера
Lua - это скриптовый язык программирования, одной из ключевых
оссобенностей которого является его простота в обучении и небольшой размер, что позволяет даже начинающим программистам быстро научиться создавать собственные программы. Одно из самых популярных применений языка Lua – это его использование в создании видеоигр. Наиболее известные игровые онлайн-платформы, использующие Lua: Roblox и Garry’s Mod.
Например, Roblox – игровая платформа с более 200 миллионами активных пользователей [1], которая позволяет создавать свои собственные и играть в созданные другими пользователями игры. Игры в Roblox создаются в среде объектно-ориентированного программирования (ООП), использующей язык программирования Lua.
Однако игры бывают разных размеров, и по мере того, как размер игры растет, разработчики вскоре начинают понимать, что простота языка является не только достоинством, но и недостатком. Самыми очевидными из недостатков Lua в разработке средних и больших игр являются громоздкий синтаксис, отсутствие статической типизации, отсутствие поддержки программирования на основе классов и маленькая стандартная библиотека.
Подобные недостатки аналогичного языка JavaScript послужили причиной создания TypeScript [2] - статически типизированной версии с дополненными функциями синтаксиса.
Соответственно, актуальность дипломной работы заключается в востребованности улучшенной версии языка Lua для использования в разработке видеоигр среднего и большого размера.
Цель работы - создать прототип языка программирования, который исправит недостатки синтаксиса, добавит систему работы с классами, базовую статическую типизацию и расширит стандартную библиотеку. Код созданных программ на языке-прототипе будет преобразовываться в программный код Lua.
Задачами дипломной работы в связи с указанной целью являются:
- Проанализировать недостатки Lua и выявить проблемы, которые
необходимо решить;
- Расширить стандартный функционал Lua, спроектировав новый
синтаксис, который позволит создать классы, статические типы, синтаксический сахар;
- Создать компилятор, который будет выполнять статическую проверку типов для классов и переменных, а также преобразовывать код прототипа в код Lua;
- Улучшить стандартную библиотеку, добавив туда новые модули,
основанные на классовой системе.
Данная работа прошла апробацию на конференции ИТТММ-2021.
Введение ................................................................................................................... 2 1 Обзор Lua, его экосистемы и похожих решений ............................................... 4
1.1 История создания .......................................................................................... 4 1.2 Lua в разработке игр ..................................................................................... 5 1.3 Обзор похожих решений............................................................................... 9
2 Анализ недостатков Lua .................................................................................... 12 2.1 Анализ синтаксиса ...................................................................................... 13 2.2 Анализ семантики языка ............................................................................ 17 2.3 Анализ стандартной библиотеки и объектно ориентированного
программирования ............................................................................................ 19
3 Создание прототипа ........................................................................................... 26 3.1 Создание синтаксиса для прототипа ......................................................... 26 3.2 Компиляция кода прототипа ....................................................................... 36 3.2.1 Токенизация и создание синтаксического дерева ................................. 37 3.2.2 Система типизации .................................................................................. 40 3.2.3 Преобразование в код Lua ....................................................................... 43 3.3 Создание стандартной библиотеки для работы с таблицами ................. 49 Заключение ............................................................................................................. 53
1. DEFYING PREDICTIONS, ROBLOX MAU HITS ALL TIME HIGH AT 202
MILLION ESTIMATED USERS IN APRIL 2021, PICKING UP 10 MILLION USERS COMPARED TO THE MONTH BEFORE. – Текст : электронный // Rtrack : [сайт]. - URL: https://blog.rtrack.live/index.php/2021/05/04/defying-predictions-roblox-
mau-hits-all-time-high-at-202-million-estimated-users-in-april-2021-picking-up-10-million-users-compared-to-the-month-before (дата обращения 04.05.2021).
2. TypeScript : Typed JavaScript at Any Scale : сайт. - URL: https://www.typescriptlang.org (дата обращения 04.05.2021) – Текст : электронный.
3. Roberto I., L.H. de Figueiredo, Waldemar C. The evolution of Lua // HOPL III: Proceedings of the third ACM SIGPLAN conference on History of programming languages. San Diego, California 2007. – С. 2–1–2–26.
4. PEP 602 -- Annual Release Cycle for Python : Python Software Foundation : сайт. – URL: https://www.python.org/dev/peps/pep-0602 (дата обращения 04.05.2021) – Текст : электронный.
5. Java to Move to 6-Monthly Release Cadence : InfoQ. – URL: https://www.infoq.com/news/2017/09/Java6Month/ (дата обращения 04.05.2021) – Текст : электронный.
6. Mogilefsky, B. Lua in Grim Fandango. / B, Mogilefsky. - 1999. - URL: http://www.grimfandango.net/?page=articles&pagenumber=2 (дата обращения 04.05.2021) – Текст : электронный.
7. Announcing Game Developer magazine's 2011 Front Line Award winners : Gamasutra : сайт. - URL: https://www.gamasutra.com/view/news/129084/Announcing_Game_Develop er_magazines_2011_Front_Line_Award_winners.php. –Дата публикации: 13.01.2012. – Текст : электронный.
8. Jung K., Brown A. Beginning Lua Programming : Wrox, 2007. – ISBN 978-
0470069172 – Текст : непосредственный.
9. Manyen M., Schuytema P. Game Development with Lua : Delmar Thomson
Learning, 2005. - ISBN 978-1584504047. – Текст : непосредственный.
10. Kasuba M. Lua Game Development Cookbook: Over 70 recipes that will help
you master the elements and best practices required to build a modern game engine using Lua : Packt Publishing, 2015. – 360 с. - ISBN 978-1849515504 – Текст : непосредственный.
11. Young D. Learning Game AI Programming with Lua : Packt Publishing, 2014.
– 352 с. – ISBN 978-1783281336 – Текст : непосредственный.
12. Brumbaugh Z. Coding Roblox Games Made Easy: The ultimate guide to
creating games with Roblox Studio and Lua programming : Packt Publishing, 2021. – 238 с. – ISBN 978-1800561991 – Текст : непосредственный.
13. Игры, использующие язык Lua : Википедия. Свободная энциклопедия. -
URL:
https://ru.wikipedia.org/wiki/Категория:Игры,_использующие_язык_Lua (дата обращения 04.05.2021) – Текст : электронный.
14. Roblox’s 10 biggest games of all time — each with more than a billion plays : Venture Beat. - URL: https://venturebeat.com/2019/12/09/robloxs-10-biggest-games-of-all-time-each-with-more-than-a-billion-plays/ (дата обращения 04.05.2021) – Текст : электронный.
15. Pall, M. Re: Port bitop to 5.3?. – 2015. - URL: https://www.freelists.org/post/luajit/Port-bitop-to-53,1 (дата обращения 13.05.2021) – Текст : электронный.
16. Luacheck : Github : сайт. - URL: https://github.com/mpeterv/luacheck/ (дата
обращения 04.05.2021) – Текст : электронный.
17. Luanalysis (an EmmyLua fork) for IntelliJ IDEA : Github : сайт. - URL:
https://github.com/Benjamin-Dobell/IntelliJ-Luanalysis (дата обращения 04.05.2021) – Текст : электронный.
18. Metalua : Github : сайт. – URL: https://github.com/fab13n/metalua (дата
обращения 04.05.2021) – Текст : электронный.
19. Tidal Lock: optional static type checking and inference for Lua : lua-users :
сайт. - URL: http://lua-users.org/lists/lua-l/2013-02/msg00403.html (дата обращения 04.05.2021) – Текст : электронный.
20. Sol - Typesafe Lua : Github : сайт. – URL: https://github.com/emilk/sol (дата
обращения 04.05.2021) – Текст : электронный.
21. Typed Lua: An Optional Type System for Lua // Dyla'14: Proceedings of the
Workshop on Dynamic Languages and Applications. Edinburgh, United Kingdom, 2014. – С. 1-10.
22. Teal: Github : сайт. – URL: https://github.com/teal-language/tl (дата
обращения 04.05.2021) – Текст : электронный.
23. MoonScript : A programmer friendly language that compiles to Lua. : сайт. –
URL: https://moonscript.org (дата обращения 04.05.2021) – Текст : электронный.
24. Declaring Global Variables : Programming in Lua. : сайт. - URL: https://www.lua.org/pil/14.2.html (дата обращения 13.05.2021) – Текст : электронный.
25. Table Manipulation : Lua 5.1 Reference Manual : сайт. – URL: https://www.lua.org/manual/5.1/manual.html#5.5 (дата обращения 04.05.2021) – Текст : электронный.
26. Kim B. B. Foundations of Object-oriented Languages: Types and Semantics. :
MIT Press, 2002. - С. 17-21
27. The Packrat Parsing and Parsing Expression Grammars Page / B. Ford : сайт.
- URL: https://bford.info/packrat/ (дата обращения 13.05.2021) – Текст : электронный.
28. Jeremy G. S., Walid Taha. Gradual typing for objects. // In Proceedings of the
21st European Conference on Object-Oriented Programming. -С. 2–27
29. Jeremy G. S., Walid T. Gradual typing for functional languages. // In Scheme
and Functional Programming Workshop. - 2006. -С. 81–92
30. Benjamin C. P., David N. T. Local type inference // ACM Transactions on Programming Languages and Systems (TOPLAS). – Вып. 22. - 2000. -С. 1– 44.