ucode
Oct. 24th, 2026 07:58 amПопробовал тут переписать один свой скрипт для openwrt с lua на ucode.
Ucode это такой ECMAscript с полноценной стандартной библиотекой. Там есть нормальные модули для работы с вводом-выводом - причем два - эквивалент stdio и низкоуровневый, есть куча модулей для работы с сетью, а работа с json, функции printf и sprintf (которые заодно и сериализаторами json работают) и регулярные выражения (правда таки, какие есть в нижележащей libc) - вообще в ядре языка.
Размер скрипта при переписывании немножко возрос. Точки с запятой в конце операторов, отсутствие перевода строки по умолчанию при выводе и прочие мелочи C-подобного синтаксиса место всё же жрут. Скорость выполнения замерить трудно, даже на медленном процессоре роутера оба скрипта запускаются примерно за минимальный квант времени, измеримый командой time, но вроде чуть уменьшилась. Это я еще скрипт держу в виде текста, а можно в байткод откомпилировать и хранить на диске в виде байткода.
Подозреваю, что второй скрипт, который для работы с sms, выиграет существенно больше. Потому что в ucode есть и нормальные строковые операции, и то, что в lua делается регекспами, можно будет делать substr и split (хотя стоп, split там как в перле - тоже с регекспами) и нормальные битовые операции, так что превращать целое число в последовательность байт utf-8 будет явно быстрее, чем через вещественную арифметику lua.
Немножко напрягает необходимость использования ключевого слова let в операторах присваивания. Тот, кто давно забыл про ранние диалекты бейсика, но зато помнит Lisp и Rust, от let ждет подвоха, особенно при общей C-подобности синтаксиса.
Но в общем, возникло желание собрать ucode для нормального linux-а. Чтобы можно было отладкой скриптов заниматься не на роутере. А то и писать на этом что-нибудь, для чего perl с python-ом кажутся тяжеловатыми. Почему-то в debian пакета ucode пока нет. Даже в sid. Хотя в README.md утверждается что сборка для linux с glibc вполне поддерживается.
Upd если читать мануал, а не примеры, выясняется что подвох с let действительно есть, причем тот самый, которого ожидаешь. Просто тот скрипт который я писал был короткий и каждая из используемых переменных присваивалась ровно один раз (ну кроме тех, которые переменные цикла, но там let все равно нужен).
Upd А функцию для получения последовательности байт utf-8 из числового значения unicode codepoint на ucode писать не надо. Она там в ядре готовая есть. uchr() называется.
