Введение
Встроенный язык программирования широко использовался и используется программистами всех стран. Он позволяет модифицировать компьютерные программы, не изменяя основной код этой программы, даёт возможность экспортировать данную модификацию с одной платформы на другую платформу (с Windows на Linux и наоборот).
Актуальность исследования заключается в том, что встроенный язык программирования используется для облегчения работы с основными языками программирования, не требует специального программного обеспечение, которое требует дополнительного времени для обработки, и позволяет модифицировать программу автономно от основного кода.
Встроенных языков программирования много и большинство из них предназначены для разных областей применения. Каждый программист, начинающий или профи, подбирает себе, тот встроенный язык, который ему удобен в использовании, который требует меньше временных затрат. Я разработал свой встроенный язык программирования BearScript, поэтому решил провести исследование, где использовал популярные встроенные языки программирования и авторский BearScript.
Цель исследования: выявление оптимального встроенного языка программирования при работе с основным кодом.
Задачи исследования:
1. Изучить литературу и Internet – информацию по заявленной теме.
2. Сравнить встроенные языки программирования на удобность использование с основным языком программирования (C++).
3. Разработать рекомендации по выбору встроенного языка программирования
Объектом исследования являются встроенные языки программирования
Предмет исследования является - отражение функций, экспорт на другие платформы (Windows, Linux), синтаксис и требование дополнительного программного обеспечения (ПО).
В данной работе применялись методы:
эмпирического уровня: тестирование, сравнение;
экспериментального уровня: анализ;
теоретического уровня: изучение и обобщение, абстрагирование.
Гипотеза: встроенные языки программирования по своей сути выполняют одинаковые функции, следовательно, ничем друг от друга не отличаются.
Основная часть
1.Встроенные языки программирования.
Встроенные языки программирования это мощное средство SCADA Первые версии SCADA - систем либо не имели подобных языков, либо эти языки реализовывали небогатый набор функций. В современных версиях SCADA - систем функциональные возможности языков становятся существенно богаче. [6]
Бывают такие моменты в программировании, когда основной код программы много весить и при компиляции в машинный код (язык процессора) занимает много времени. Для облегчения этой работы используют встроенные языки программирования, которые не компилируют основной код, а сразу его запускают. Позволяют модифицировать компьютерную программу, не меняя основной код. Встроенный язык программирования - это транслятор основного языка программирования.
Существуют разные встроенные языки программирования.
Первый это Lua ( «луна») — скриптовый язык программирования, разработанный в подразделении Tecgraf (ComputerGraphicsTechnologyGroup) Католического университета Рио-де-Жанейро (Бразилия). Интерпретатор языка является свободно распространяемым, с открытыми исходными текстами на языке Си.
По идеологии и реализации язык Lua ближе всего к JavaScript, в частности, он также реализует прототипную модель ООП, но отличается Паскале-подобным синтаксисом и более мощными и гибкими конструкциями. Характерной особенностью Lua является реализация большого числа программных сущностей минимумом синтаксических средств. Так, все составные пользовательские типы данных (массивы, структуры, множества, очереди, списки) реализуются через механизм таблиц, а механизмы объектно-ориентированного программирования, включая множественное наследование — с использованием метатаблиц, которые также отвечают за перегрузку операций и ряд других возможностей. Язык широко используется для создания тиражируемого программного обеспечения (например, на нём написан графический интерфейс пакета AdobeLightroom). Также получил известность как язык программирования уровней и расширений во многих играх (в том числе WorldofWarcraft и S.T.A.L.K.E.R.) из-за удобства встраивания, скорости исполнения кода и лёгкости обучения. [2].
Следующий - Python- высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.
Python поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты — динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Python организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты).
Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией PythonSoftwareFoundationLicense, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Python с использованием JIT-компиляции, которая значительно увеличивает скорость выполнения Python-программ. [3]
Ещё один язык C♯ (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров компании Microsoft под руководством Андерса Хейлсберга и Скотта Вильтаумота как язык разработки приложений для платформы Microsoft .NET Framework. Впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.
C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Переняв многое от своих предшественников — языков C++, Pascal, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов). [4]
Ещё существуют такие встроенные языки как ECMAScript [5], встроенный язык программирования 1С:Предприятие [1], UnrealScript [7],
BearScript - авторская разработка.
Изучив и проанализировав информацию в интернете, по данной теме, я узнал, что встроенные языки программирования это мощное средство SCADA - систем, предоставляющее разработчику гибкий инструмент для разработки сложных приложений.
2. Сравнение встроенных языков программирования.
Как мы видим, существует множество встроенных языков программирования. Для сравнения отражения функций и экспорта на другие платформы (Windows , Linux), возьмем самые популярные встроенные языки программирования Lua,Python,C# и авторский - BearScript.
Отражение функций я условно поделил на два типа ручной и облегчённый. Ручной тип - это когда функцию экспортируют через функцию транслятор, а облегченный тип позволяет без дополнительных усилий экспортировать функцию.
Ручное отражение функций.
Python |
Lua |
static PyObject * spam_system(PyObject *self, PyObject *args) { const char *command; intsts; if (!PyArg_ParseTuple(args, "s", &command)) return NULL; sts = system(command); return Py_BuildValue("i", sts); } static PyMethodDefSpamMethods[] = { ... {"system", spam_system, METH_VARARGS, "Execute a shell command."}, ... {NULL, NULL, 0, NULL} /* Sentinel */ }; PyMODINIT_FUNC initspam(void) { (void) Py_InitModule("spam", SpamMethods); } |
static int average(lua_State *L) { int n = lua_gettop(L); assert(n==1); lua_pushnumber(L, std::system(lua_tostring(L, 1)) return 1; } lua_register(L, “system", system); |
Облегчённое отражение функций
Python(boost) |
Lua(boost) |
BearScript( встроено ) |
BOOST_PYTHON_MODULE(имя_модуля){class_ (“Имя класса", init()).def(«Имя функции", &Имя класса::Имя функции);} |
luabind::module(имя_модуля) [ luabind::class_ ("Test") .def("Имя функции", &Имя класса::Имя функции) ];0 |
имя_модуля.getRegister(). registerClass (“Имя класса”) .registerFunction(("Имя функции", &Имя класса::Имя функции); |
Проведя тестирование, я выявил следующие данные, которые я представил в таблицах.
Таблица 1. Наличие типа облегченного отражения функции.
Встроенный язык программирования |
Облегчённый тип отражения функции |
Lua |
Да (Через дополнительную библиотеку) |
Python |
Да (Через дополнительную библиотеку) |
C# |
Да (Встроенный в сам язык) |
BearScript |
Да (Встроенный в сам язык) |
В облегчённом типе отражение функции, которая идёт через дополнительную библиотеку, могут возникнуть проблемы несовместимости с некоторыми версиями встроенного языка программирования или сама дополнительная библиотека может требовать ещё и дополнительное ПО.
Таблица 2. Возможность экспортировать на другую платформы.
Встроенный язык программирования |
Возможность экспортировать на другую платформу |
Lua |
Да (Имеется исходный код) |
Python |
Да (Имеется исходный код) |
C# |
Нет (Только под windows) |
BearScript |
Да (Имеется исходный код) |
Таблица 3. Наличие дополнительного ПО для встроенного языка программирования.
Встроенный язык программирования |
Требуется дополнительное ПО |
Lua |
Нет |
Python |
Нет |
C# |
Да (.net framework) |
BearScript |
Нет |
Таблица 4 .Типы синтаксиса встроенных языков.
Встроенный язык программирования |
Тип синтаксиса |
Lua |
Паскале-подобный синтаксис |
Python |
Синтаксис ядра минималистичен (рассчитан для командой строки) |
C# |
C-подобный синтаксис |
BearScript |
Паскале-подобный синтаксис |
Встроенные языки программирования отличаются между собой и рассчитаны на разные сферы использования. Есть даже сделанные специально для одной программы. Некоторые требуют дополнительное программное обеспечение. Почти все они на динамической типизации это значит, что использование ускорителя не имеет никого смысла.
Заключение
Исследование проводилось в три этапа. Первый этап – изучение встроенных языков программирования для облегчения работы с основным языком программирования. Второй этап - сравнение, с помощью тестирования различных встроенных языков программирования на основном языке программирования С++. Третий этап - анализ полученных результатов, составление рекомендаций по возможности использования встроенных языков программирования.
Изучив и проанализировав информацию в интернете, по данной теме, я узнал, что встроенные языки программирования это мощное средство SCADA - систем, предоставляющее разработчику гибкий инструмент для разработки сложных приложений. Встроенные языки программирования отличаются между собой и рассчитаны на разные сферы использования. Есть даже сделанные специально для одной программы. Некоторые требуют дополнительное программное обеспечение. Почти все они на динамической типизации это значит, что использование ускорителя не имеет никого смысла.
После тестирования встроенных языков программирования Lua, Python, C# и авторского – BearScript я пришёл к выводу, что оптимальные встроенные языки программирования при работе с основным кодом это Lua и BearScript. Lua и BearScript более оптимальные из-за Паскаля - подобного синтаксиса, на них есть инструменты облегченного отражения функции, если у BearScript встроено, то у Lua идёт отдельно и их несколько, можно выбрать оптимальный. Python сделанный на минималистическом синтаксисе что делает его неудобным при ориентации в большом объеме кода, но при этом очень удобен для использование в консоли, также минималистический синтаксис удобен для начинающих. C# очень функциональный, но огранен в использование из-за того, что продукция Microsoft распространяется только под Windows.
Основным результатом моего исследования стало отрицание выдвинутой гипотезы. Встроенные языки программирования по своей сути выполняют одинаковые функции, но отличаются друг от друга способом применения.
Рекомендации.
После проведенного мною исследования я рекомендую:
Lua и BearScript лучше всего использовать при разработке тяжелых программ (3d редакторы , графические редакторы , видео редакторы) или игровых движков;
Python - для командной строки;
C# - для работы с C++/CLI.
Список используемых источников и литературы:
1. Википедия [https://ru.wikipedia.org/wiki/Встроенный_язык_программирования_1С:Предприятие]
2.Википедия [https://ru.wikipedia.org/wiki/Lua]
3.Википедия [https://ru.wikipedia.org/wiki/Python]
4. Википедия [https://ru.wikipedia.org/wiki/C_Sharp]
5. Википедия [https://ru.wikipedia.org/wiki/ECMAScript]
6. Файловый архив студентов [https://studfiles.net/preview/951026/]
7. UnrealScript [https://docs.unrealengine.com/udk/Three/UnrealScriptHome.html]