Обзоры Обзоры 15.06.2005 в 21:00 comment

Еще один «летний» язык программирования

author avatar

ITC.UAСтажер

Репутація Наднизька

Неделя ИИ на ITC.ua при поддержке

На ITC.ua Неделя ИИ. Мы исследуем, как именно ИИ улучшает жизнь миллионов людей прямо сейчас и что ждет нас в будущем. Партнер проекта – компания Favbet Tech, которая активно интегрирует ИИ в свои продукты.

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

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

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

Во-вторых, на фоне франко-голландского неприятия европейского единения на основе общей конституции совершенно незамеченным осталось еще одно весьма интересное событие европейского масштаба – выступление Иисуса Вилласанте (Jesus Villasante), главы комитета программных технологий информационного общества Еврокомиссии (EC Information Society). Несмотря на свое имя, как бы призывающее к терпимости, господин Вилласанте был не по-европейски нетолерантен. Он фактически обвинил ряд крупных корпораций в использовании дешевых ресурсов сообщества разработчиков программ с открытыми исходными текстами. Больше того, Вилласанте назвал характер этого использования «субподрядным», при котором сообщество теряет самостоятельный коммерческий потенциал и становится дешевой рабочей силой межнациональных корпораций. Фрагменты выступления Вилласанте на прошедшей в Нидерландах конференции открытого ПО (Holland Open Software Conference) заслуживают цитирования: «IBM спрашивает покупателя: "Вы хотите закрытое или открытое ПО?" И если покупатель отвечает "Открытое", IBM говорит: "Тогда вы хотите открытое ПО IBM"». Досталось на орехи от Вилласанте не только корпорациям, и даже не только сообществу открытого ПО (которое он назвал «полной неразберихой» – complete mess), но и всей Европе в целом. О ней Вилласанте сказал так: «Я думаю, что в Европе в настоящее время нет индустрии программного обеспечения. Она есть сегодня в Америке, она, возможно, будет завтра в Китае или Индии. И нам (речь идет об участниках конференции открытого ПО. – Прим. автора ) решать – быть ли ей в Европе». Один из способов, благодаря которым индустрия ПО в Европе будет существовать, по мнению Вилласанте, таков – самостоятельная разработка коммерческих программных продуктов силами сообщества открытого ПО.

Какие из этих двух фрагментов можно сделать выводы? Да какие угодно. Именно поэтому автор их делать не станет – в конце концов, нельзя лишать людей удовольствия видеть в фактах только то, что им нравится. Разве что пару слов об очевидном сказать стоит (хотя бы потому, что очевидное всегда трудно заметить). Об эффекте «инвестиций из зарплаты», да и о самой зарплате, допускающей такое и не являющейся чем-то исключительным (как-никак 10 тысяч человек – это не плакатная парочка буржуев в цилиндрах), ранее никогда не упоминали ни сторонники, ни самые ярые противники коммерческой модели развития ПО. Позиция Вилласанте интересна хотя бы потому, что это все-таки не болтливый всезнайка «из Интернета», а человек всеевропейского уровня. И наконец, самое очевидное: за окном – лето, посему никаких программ больше сотни килобайт и никаких статей больше четырех страниц я вам предлагать не буду.

Lua, успокой меня, мне нужен твой свет…

Перефразированные слова песни орденоносного Бориса Гребенщикова,
хотя… Lua – это та же луна, но над Бразилией

Начнем мы, как обычно, с попытки автора отвертеться от ответа на вечно главный вопрос современности: «А кому оно надо?» Действительно, зачем учить «еще один язык программирования», если этих языков на хорошем портале (например, здесь – dmoz.org/Computers/Programming/Languages/) собрано, ни много ни мало, несколько сотен? Так вот – на этот вопрос каждый должен найти свой ответ. В случае с Lua (а язык, о котором пойдет речь, именно так называется), правда, есть кое-какие претендующие на объективность соображения. Во-первых, очень элегантная разработка (пока поверьте на слово) – именно элегантная. Во-вторых, Lua существенно отличается от большинства интерпретируемых языков. Задумайтесь сами, много ли вы знаете интерпретаторов, способных легко «перемолоть» программу размером в несколько десятков мегабайтов? Однако для Lua это вполне нормально. А какие языки вообще приспособлены к созданию многомегабайтовых программ? Для Lua это тоже норма – язык создавался в академической среде, в том числе и для описания данных в научных программах и системах автоматизации эксперимента. Многие ли языки при внешне традиционном синтаксисе обладают богатым набором свойств и возможностей, например, присущих функциональным и объектно-ориентированным? Много ли есть языков, вся выразительность и богатство конструкций которых строится на одной-единственной абстракции? А в Lua все именно так. И наконец, о самом по-летнему ленивом в Lua – текст лицензии этой распространяемой свободно открытой программы не просто краток, а изысканно краток. Лицензия описывается всего четырьмя предложениями из 167 слов. Первым предложением утверждается авторское право, вторым разрешается делать с Lua все, что вздумается (использовать, копировать, модифицировать, продавать, включать в продаваемые продукты и т. д.), третьим требуется сохранение во всех случаях текста лицензии, четвертым традиционно снимается всякая ответственность с правообладателя.

Lua – проект и достижения

Размеры дистрибутивов Lua не должны вызывать мыслей о несерьезности стоящего за ними проекта. Создание языка началось почти 12 лет назад – в 1993 г. Команда разработчиков из католического университета Рио-де-Жанейро невелика – Роберто Иерусалимский (Roberto Ierusalimschy), Вольдемар Целес (Waldemar Celes) и Луис Энрике (Luiz Henrique). Изначально язык задумывался как описательный – для удобства формирования больших массивов данных при решении задач вычислительного эксперимента и машинного моделирования. За 12 лет язык претерпел множество изменений и ряд серьезных архитектурных модификаций. Сегодняшняя популярность Lua такова, что Microsoft выделила разработчикам грант на создание .NET-версии языка. Во многих играх Lua используется в качестве «скриптового движка» благодаря уникальному сочетанию быстродействия, легкости встраивания в программы и поддержке «расширяемой семантики».

Раз уж создатели языка Lua разрешают делать с ним все что угодно, попробуйте хотя бы для начала обзавестись исполняемой бинарной версией интерпретатора для вашей платформы. Пользователям Unix-совместимых ОС можно (и нужно) прибегнуть к традиционному способу – загрузке исходных текстов (URL файла последней на момент написания статьи версии www.lua.org/ftp/lua-5.0.2.tar.gz, его размер, как и обещано, – 185 KB) и компиляции-сборке. C последней процедурой проблем быть не должно – Lua написан на ANSI стандартном C, и написан образцово-мобильно (кстати, изучающим C можно порекомендовать поработать с исходными текстами Lua, но, естественно, осенью). Пользователи ОС семейства Windows могут загрузить один из многих готовых бинарных комплектов, например со страницы Филиппа Ости (Philippe Lhoste). В этом дистрибутиве размером 130 KB собран «полный боекомплект», необходимый для изучения и использования Lua, – интерпретатор, байт-код-компилятор, руководство по Lua (на английском языке) и reg-файл для ассоциирования файлов с расширением .lua с соответствующими приложениями. Установка этого «дистрибутива» крайне проста – создайте каталог (скажем, C:Lua) и распакуйте в него содержимое архива. Откройте файл luafile-en.reg текстовым редактором и замените слова ProgCmdLine на Lua. Запустите обновленный и сохраненный reg-файл. Теперь ваша персональная копия Lua готова к употреблению. Любители интеллектуальных развлечений на свежем воздухе могут установить Lua на свой карманный компьютер. Например, на любой семейства Pocket PC (URL исполняемого файла для карманных машинок с процессором ARM – luaforge.net/frs/download.php/53/Lua.exe; заметьте, это не инсталлятор программы, а именно исполняемый файл, который надо скопировать в какой-либо каталог КПК). В дополнение к этому файлу размером 130 KB вам понадобится «довесок» – консоль Pocket PC, чей инсталлятор занимает целых 90 KB (URL – www.symbolictools.de/public/pocketconsole/bin/pocketconsole/pocketconsole_arm_setup.exe; в отличие от предыдущего exe-файла это именно инсталлятор, запускаемый на «большом» ПК).

Итак, не откладывая в долгий ящик, начнем с традиционной первой программы. Создадим файл, назовем его p_lua_first.lua и запишем в него следующую программу:

print(«My first Lua-programm!»)
Рис. 1
Рис. 2
Рис. 3

Теперь запустим файл и посмотрим результат. Так как он стратегически важен (большой путь начинается с первого маленького шага), то продемонстрируем его сразу двумя снимками экранов – настольного компьютера и КПК (рис. 1 и 2 соответственно).

Несмотря на более чем скромную логику, с помощью этой нашей программы можно исследовать ряд важных особенностей языка и его реализации. Во-первых, в силу того что p_lua_first.lua исполняется, она, очевидно, является фрагментом кода, который может исполняться (диковинная формулировка, но что поделаешь…). Такие фрагменты кода в Lua принято называть «ломтями» или «кусками» (но в дальнейшем мы все-таки будем использовать оригинальный термин chunk). Определение chunk не налагает никаких ограничений на оформление фрагмента кода – им может быть и файл, и даже строка кода в интерактивном режиме работы интерпретатора. Во-вторых, мы можем не просто исполнить этот chunk, а скомпилировать его с помощью компилятора в байт-код (в Windows-дистрибутиве он называется LuaC.exe). В результате запуска LuaC.exe с параметром – полным именем файла p_lua_first.lua, будет создан файл байт-кода с именем luac.out. Его содержимое, естественно, радикальным образом отличается от исходного текста (рис. 3). Но теперь давайте попробуем данный файл указать в качестве параметра интерпретатору (в Windows-дистрибутиве – программе Lua.exe). Интерпретатор успешно выполнит и его (это видно в окне консоли на рис. 3). Мы открыли первое свойство интерпретатора Lua – он сам определяет, что поступило на его вход – исходный текст или байт-код. Никаких дополнительных указаний от пользователя не требуется.

Попробуем несколько усложнить тот же самый пример – создадим два файла с именами c_01.lua, содержащий одну строчку sz="My second Lua programm", и c_02.lua, состоящий также из одной строки print(sz). Пока все совершенно очевидно: в первом файле объявляется переменная с именем sz, содержащая строку "My second Lua programm", во втором файле выводится «на печать» содержимое переменной sz. Давайте попробуем запустить файл c_02.lua. Он выполнится, и результатом станет специальное уникальное значение nil (о нем мы поговорим позднее). А вот теперь продемонстрируем специфику chunk именно как «ломтя» кода. Давайте передадим интерпретатору Lua эти два «ломтя». Такое действие можно выполнить с помощью специального спецификатора -l, за которым следует полное имя файла. Например, если полные имена файлов выглядят так: c:LuaProgrammsc_01.lua и c:LuaProgrammsc_02.lua, то наберем и запустим следующую команду:

Lua.exe -l c:LuaProgrammsc_01.lua -l c:LuaProgrammsc_02.lua

Результатом ее исполнения будет выведенная строка "My second Lua programm". Это действительно существенное отличие от многих языков, в которых файл с исходным текстом обладает определенной дополнительной семантикой (например, неявной семантикой модуля). В Lua же файл – это действительно просто «ломоть» кода. Причем представлен ли этот «ломоть» в исходном тексте или же он уже откомпилирован в байт-код, интерпретатору совершенно безразлично. Если с помощью компилятора LuaC.exe оттранслировать c_02.lua в байт-код и переименовать получившийся файл, например, в c_02.bla (расширение можно выбирать, к слову, произвольно – интерпретатор все равно правильно определит, что ему поступило на вход), то результат выполнения следующей команды будет точно таким же, как и предыдущей:

Lua.exe -l c:LuaProgrammsc_01.lua -l c:LuaProgrammsc_02.bla

Пока мы использовали интерпретатор Lua в так называемом пакетном режиме – передавали ему на исполнение «ломти» кода. Естественно, что как и у любых интерпретируемых языков программирования, у Lua есть и интерактивный режим работы. Просто запустите на исполнение программу Lua.exe – и вы попадете в среду Lua. В ней вы можете набирать «ломти» кода и сразу же их исполнять, активировав нажатием Enter). Функция Lua, с которой стоит начинать знакомство с интерактивным режимом Lua, – dofile(). В полном соответствии с именем она позволяет прочесть и выполнить файл-«ломоть» Lua-программы. вы можете повторить предыдущий пример в интерактивном режиме так:

dofile("c_01.lua")
dofile("c_02.bla")

Чтобы завершить работу в интерактивном режиме интерпретатора Lua, необходимо или ввести символ конца файла (в Windows – Ctrl-Z), или вызвать без всяких параметров библиотечную функцию Lua os.exit() (просто набрать строку os.exit() и нажать Enter).

Итак, первый шаг в Lua мы сделали, и пути назад уже нет. Пусть в этой статье мы «долго запрягали» – не переживайте, в продолжении непременно «поедем», но с летней скоростью.

Favbet Tech — украинская продуктовая компания, разработчик iGaming-решений. Входит в топ-50 крупнейших IT-компаний Украины по версии DOU. Специализируется на высоконагруженных системах, облачной инфраструктуре и искусственном интеллекте. В 2025 году стала инициатором создания АИ-комитета Ассоциации «ИТ Ukrainе» — первого отраслевого объединения, занимающегося вопросами развития АИ на уровне бизнеса и государства.

Що думаєте про цю статтю?
Голосів:
Файно є
Файно є
Йой, най буде!
Йой, най буде!
Трясця!
Трясця!
Ну такої...
Ну такої...
Бісить, аж тіпає!
Бісить, аж тіпає!
Loading comments...

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: