Обновить
16K+

Lua *

Скриптовый язык программирования

8,28
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Заметки на полях: Изолируем Lua окружение в C++ приложении. Стандартные библиотеки

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели7.9K

Скриптовые языки уже давно и прочно заняли свою нишу в игрострое — они существенно упрощают описание игровой логики, уровней, ресурсов, диалогов, квестов, UI и чего только не. Что позволяет отдать эти задачи целиком и полностью в творческие руки гейм-/левел-/прочих-дизайнеров и других членов команды, которым не нужно обладать знаниями в том же C++. Разделение ответственности, ускорение разработки, облегчение моддинга, возможность по завершению разработки самого движка, вышвырнуть программистов на мороз и стричь купоны на бесконечных дополнениях — в общем, одни только плюсы. Да?

Да.

А ещё дыры в безопасности и ...

... уйма путей уронить стабильность.

Микрофичи, которые хотелось бы шире распространить в языках программирования

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели13K

Большая часть работы по теории языков программирования и проектированию языков программирования касается аспектов (1) и (2), так как именно они наиболее важны, но лично я глубоко увлекаюсь фичами типа (3). Поскольку эти фичи такие мелкие, именно они наиболее активно перетекают из языка в язык, ведь добавить их можно совсем «малой кровью». Сам я много времени провёл за изучением нишевых малопонятных языков, и за этим встречал множество крутых фич из третьей категории — таких, с которыми вы, возможно, никогда не сталкивались. Расскажу о некоторых из них!

Читать далее

Кастомизация Angie (njs, Lua, Perl)

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели7K

Север Angie вобрал в себя всю функциональность, которая десятилетиями формировалась в Nginx. Кроме того, разработчики за несколько лет добавили еще несколько модулей и расширили возможности существующих. Тем не менее, при реализации сложных задач может потребоваться индивидуальное решение, нестандартное поведение сервера и кастомизированная конфигурация. В таких задачах полезно использовать модули для расширения функциональности сервера на базе различных языков программирования: доступны njs, Lua и Perl.

Читать далее

Создаём замыкания С из замыканий Lua

Время на прочтение12 мин
Охват и читатели15K

Когда я взялся полноценно портировать API Windows с C на Lua, одна из самых интересных и занимательных задач заключалась в том, как делать обратные вызовы к коду C из функций Lua. Без них значительная часть API — например, WNDPROC – осталась бы бесполезной.

Читать далее

USB Power Box – устройство управления 4-канальным модулем реле с помощью USB GPIO Extender из Роутер ОС Микротик

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

USB Power Box для Микротик - USB-управляемый роутером блок реле в корпусе:

• два управляемых выхода питания

• управление из Микротик Router OS

• независимость от "переполюсовки" фазы и нуля

• пока ручная сборка!

Читать далее

Как мы хакатон в 30ке провели и зачем я форкнул интерпретатор Lua

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели6.3K

18го ноября, в ГФМЛ №30 на дне наук, я, Саша, CGSG, при поддержки Yandex Cloud провели игровой хакатон для школьников!

Задачей ребят было за 2 часа написать бота для змейки на Lua. Они писали и отправляли стратегии, а в фоне постоянно шли матчи, в которых их стратегии и принимали участие.

И тут я хочу поделиться внутренней кухней. Как все это было приготовлено, с какими проблемами столкнулись, какие ошибки допустили, а что вышло хорошо. Будет много картинок, фоток и даже пару видео.

Читать далее

«Русскоязычных пособий по Lua катастрофически не хватает. Мы решаем эту проблему». Читаем главу о введении в стек

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели11K

Мы в МойОфис любим Lua. И сами активно его используем: в наших редакторах с помощью Lua работают макросы и надстройки. И помогаем разработчикам лучше узнать этот язык — при нашей поддержке вышли уже два издания классного учебника по Lua от Роберту Иерузалимски (кстати, сам автор считает, что этот язык в части задач даже более хорош, чем Си!)

А летом 2025 года мы выпустили целый трёхтомник по Lua. Первый том — новое издание книги Роберту. Второй и третий — вышедшие впервые учебники от Дмитрия Шульгина, старшего тренера по продуктам Учебного центра МойОфис.

В этой статье поделимся выдержкой из первого тома, введением в основы языка. А самых искушенных читателей в конце материала ждет «особое приглашение».

Читать далее

Напердолил целую игру

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели38K

Уууу, давно хотелось чего-то простого, смешного и без лишних заморочек. Чтобы мемов побольше и можно было с пацанами погонять. В итоге получились "TANKOLINI NAPIERDOLKI".

Старый добрый монохромный экран, тетрис, мультиплеер и редактор карт для каждого. С другой стороны — всё на канвасе, с вручную отрисованными пикселями, без всяких ассетов и движков. Python на бэке, PostgreSQL для карт и Redis для игровых комнат. Обо всём этом — в статье.

Читать далее

3 кусочка «сахара» к синтаксису языка Lua

Время на прочтение10 мин
Охват и читатели10K

Lua — симпатичный и хороший язык — умещает богатый функционал в очень маленькой реализации (интерпретатор и библиотека — это всего один исполнимый файл на 300кб) — и притом изначально ориентирован на «человечный» синтаксис. Хотя он не в топе популярности, но за простоту встраивания (помимо человечности и функциональности) он используется в ряде популярных проектов — от Roblox до Tarantool, например.

Однако есть мелочи которые несколько снижают радость от его использования. Когда я встроил его у себя на сайте для того чтобы сделать несколько «игровых» задач на программирование, пользователи высказывали неодобрение из‑за непривычного оператора неравенства, отсутствия комбинированных операторов присваивания и пр.

В этой статье мы разберемся как (и куда) внести маленькие дополнения чтобы усовершенствовать синтаксис интерпретатора, но сохранить совместимость. Результат можно «потыкать живьём» в онлайновой «песочнице».

Читать далее

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

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели30K

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

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

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

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

Во второй части поговорим об играх, которые на мой взгляд больше всего развиты и походят для создания собственных модификаций внутри уже готовой платформы. (Т.Е. Разработки плагинов и собственных доработок)

Читать далее

Небольшое ретро-программинг приключение, или как я снова полюбил кодить

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели23K

Когда много лет руководишь командами, легко забыть, каково это — просто сесть и закодить что‑то самому.

Эта статья о том, как я сделал фэнтези‑консоль под DOS, и снова влюбился в программирование.

Читать далее

LuaJIT: что делает его таким производительным и почему вам стоит его попробовать

Время на прочтение9 мин
Охват и читатели15K

LuaJIT является одной из наиболее производительных реализаций динамического языка программирования. В этой статье мы рассмотрим, благодаря каким механизмам и подходам достигается такой результат. Эта статья не дает всех ответов, но задает необходимую базу и направления для самостоятельного изучения темы.

Меня зовут Максим Кокряшкин, я занимаюсь разработкой языковых рантаймов в Tarantool. Это решение класса middleware, разрабатываемое VK Tech, сочетающее в себе базу данных in-memory и application-сервер. Как раз таки наш application-сервер, который позволяет писать логику и хранимые процедуры, работает на LuaJIT

Читать далее

Учим Xiaomi Mi Band 9 ходить в сауну

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели25K

Сегодня у меня в работе самый популярный продукт линейки часов Xiaomi - Mi Band 9.
В данных моделях есть специальный режим мониторинга температуры, который, в случае перегрева выключает часы, сегодня мы посмотрим как это работает и я покажу как изменить поведение системы даже не меняя прошивку, создадим циферблат для управления функционалом на языке LUA

Читать далее

Ближайшие события

Мой худший образец полезного кода

Время на прочтение5 мин
Охват и читатели17K

Однажды на собеседовании меня попросили привести примеры написанного мной кода: один — которым я наиболее горжусь, и другой — который я считаю наиболее неудачным. Недолго думая, я осознал, что на оба вопроса у меня готов ответ, и это один и тот же фрагмент кода. Горжусь я им потому, что, пожалуй, из всей моей практики именно этот код оказался наиболее весом, а стыжусь из-за него, так как, по мнению большинства из его читателей, этот код начался с костыля, который затем стали развивать: 

Читать далее

Транзакционный Ratelimit

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели3.8K

В статье расскажу про задачу и её решение, связанную с организацией лимитов для выполнения различных операций и http запросов. Изначально задача звучала как создание распределенного решения, библиотека или микросервис на основе хранилища в redis, который бы мог обеспечить достаточный уровень отказоустойчивости и наблюдаемости. Функциональные и не функциональные требования были обычными для подобной задачи и казалось, что можно обойтись стандартным готовым решением, но не тут то было.

Читать далее

ОС реального времени в эмуляторе Mario, или Как устроены потоки

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели7.3K

В своём предыдущем посте о потоках я привёл импровизированное сравнение1:

Потоки2 — это просто состояния сохранения3 эмулятора4, связанные с условием, при котором продолжается их выполнение.

В тот момент я подумал, что это неплохая аналогия, но не мог перестать размышлять о ней. Я какое-то время крутил её в голове. Мне кажется, что у этой аналогии есть серьёзный потенциал в качестве инструмента обучения.

Поэтому я добавил многопоточность в Super Mario Bros. для NES.
Читать дальше →

Реализация self-hosted карт в закрытом контуре

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели5.2K

На связи разработчики продукта Аврора Центр компании Открытая мобильная платформа. Сегодня мы расскажем как реализовать сервис self-hosted карт в закрытом контуре.

Наша компания активно развивается и добавляет новый функционал в продукт по удалённому управлению устройствами — Аврора Центр (UEM-решение, которое позволяет управлять устройствами и жизненным циклом приложений на ОС Аврора, Android и Linux). Так по запросам заказчиков было решено добавить отображение геопозиции мобильного устройства на карте территории России. И вот перед нами встаёт задача по работе с картами в АЦ.

Читать далее

Обходим подводные камни работы с UDA в коде на Lua для ScyllaDB: дружим Java-драйвер и пустые значения

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели1.5K

Привет, Хабр! Мое имя Александр Коваль, я разработчик IoT-сервисов в МТС Web Services. Сейчас ScyllaDB поддерживает ограниченное количество функций, в том числе агрегационных. В стандартном наборе: min, max, count, avg. Но ее функциональность расширяется двумя типами пользовательских функций: скалярными (scalar functions) и агрегационными (aggregate functions). Первые работают со значениями одной строки, а вторые — нескольких. Реализовать такие функции можно на Lua или Rust.

В процессе работы с агрегационными функциями можно столкнуться с тем, что ScyllaDB и Java-драйвер по-разному обрабатывают пустые значения. В этом посте я расскажу, как это можно решить относительно просто и без сложных дополнительных телодвижений. Для примера возьму код на Lua и покажу, как он реализуется в виде функции ScyllaDB.

Дисклеймер: этот материал написан на основе личного опыта — все решения получены методом проб и ошибок. Конструктивные предложения и советы по их улучшению приветствуется. Код с примерами и ссылки на ресурсы можно найти у меня в репозитории GitHub.

Читать далее

Что такое Lua: почему стоит его попробовать и как встроить в программу на Go

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели20K

Lua — это лёгкий, быстрый и гибкий скриптовый язык, который появился в 1993 году. Он написан на C и чаще всего используется не как самостоятельный язык, а как встраиваемый инструмент для других приложений.

Если вы играли в World of Warcraft и устанавливали аддоны, вы уже сталкивались с Lua. Redis исполняет Lua-скрипты внутри себя. Lua используется в Nginx через модуль ngx_http_lua_module, который позволяет писать обработчики HTTP-запросов. В NeoVim плагины тоже можно писать на Lua. Короче говоря — язык не из популярных топов, но крайне полезен и встраиваем во многие инфраструктурные решения.

Я опишу главные особенности языка и приведу небольшой пример использования из Go.

Читать далее

Пишем игру на LUA для часов Xiaomi Redmi Watch 4.Часть 1. Знакомство с экосистемой Xiaomi

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.7K

Всем привет, меня зовут Алексей Ляховский, я на протяжение последних 10 лет занимаюсь изучением, разработкой и развитием экосистемы часов Xiaomi для глобального сообщества.

Я разобрал формат циферблатов Xiaomi последних поколений, сделал распаковщик циферблатов, и компилятор их для оригинального старого редактора циферблатов Xiaomi, сделал мод MiFitness, где активные пользователи сообщества создают и публикуют кастом циферблаты для часов, собрал из китайского IDE отдельный автономный эмулятор часов, для проверки циферблатов и приложений, модифицирую и дорабатываю оригинальные прошивки часов, а так же создаю приложения для данных моделей на JerryScript и LUA, о чем мы познакомимся подробнее чуть позже на примере данной игры.

Читать далее