LINUX.ORG.RU

Опубликован релиз-кандидат эталонной реализации языка Lua 5.4.7-rc1

 , , ,

Опубликован релиз-кандидат эталонной реализации языка Lua 5.4.7-rc1

0

2

Язык Lua – это мощный, переносимый, легковесный, встраиваемый и простой язык программирования, разработанный и развиваемый Роберту Иерузалимски в PUC-Rio вот уже более 30 лет.

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

Разработка Lua ведётся в закрытой форме, публикуются только релизы.

Язык Lua встроен или является основой в таких программах как:

  • Nmap;
  • Mpv;
  • Conky;
  • Redis;
  • Ardor;
  • Apache;
  • Love2d;
  • Defold;
  • INSTEAD;
  • World of Warcraft;
  • Minetest;
  • Celestia;
  • Awesome;
  • Vim/nvim;
  • MediaWiki;
  • Tarantool;
  • Wireshark;
  • Darktable;
  • NetBSD Kernel;
  • NGINX OpenResty;
  • Damn Small Linux;
  • многих, многих других.

В частности, есть возможность использования языка в ядре Linux через Lunatik разрабатываемый в лаборатории LabLua.

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

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 22)

Язык Lua встроен или является основой в таких программах как:...

Что это за безобразие? Где minetest, я вас спрашиваю, ГДЕ МАЙНТЕСТ???

Smacker ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Ну отвлёкся, хотел вписать, а не вписал. А уже всё :(

hobbit придёт, порядок наведёт!

А то правда, что это за список проектов с Lua, где нет главной ИГРЫ, которая ЦЕЛИКОМ моддится на Lua?

Smacker ★★★★★
()
Последнее исправление: Smacker (всего исправлений: 1)

Проблема Lua в том, что это не один язык, а N несовместимых языков.

В рамках его сферы применения это, конечно, не очень мешает…

wandrien ★★
()
Ответ на: комментарий от Smacker

Поправил. Заодно и WoW добавил, а то это действительно позорище…

hobbit ★★★★★
()

пререлиз минорщины => в фемтоновости

t184256 ★★★★★
()
Ответ на: комментарий от wandrien

Да, но это проблема всех языков в той ил иной мере. Опять же учитывая специфику языка когда ты вшиваешь его в свою программу (основной смысл языка) то для тебя этой проблемы не существует. То что все начали использовать его просто как язык и выдаёт наружу эти приколы с версиями, но опять же есть цель, язык должен быть небольшим это один из столпов и фундаментов и про это уже очень много и подробно сказано почему так, есть чёткие обоснования. Иначе язык распухнет. Тут баланс между необходимостью развиваться и сохранением основных несокрушимых правил для языка. Советую посмотреть выступления Роберту на этот счёт. Если бы не обязанность языка быть маленьким можно было бы держать в кодовой базе всё для совместимости. Ой короче Роберту очень сопротивляется любым изменениям и на луа если хочется можно писать как на С89 переносимый код между любыми версиями, а можно и не писать.

В версии 6.0 вероятно будет опубликован официальный ещё один язык Pallene (он есть уже давно, но как эксперимент) для написания быстрых модулей для луа, что позволит поделить luajit на ноль с его костылями и ограничениями и не ограничивать разработчиков в версии, если бы не luajit версии 5.1 5.2, померли своей смертью как lua5.0. Но людям нужен быстрый код, а есть ограничения в том что Lua C API имеет накладные расходы на трансфер данных из машины в С и обратно что может поделить на ноль оптимизацию модуля на Си. Но и у luajit нет упреждающей оптимизации, а pallene буде её делать, так можно будет писать код на луа как код на луа, а высокопроизводительные модули на pallene который является статически типизированным луа подмножеством генерирующим код на Си.

Тут можно почитать

Самая главная проблема луа, это nil в таблицах как он себя проявляет и как люди игнорируют его особенности больно стукая себя граблями. Всё остальное херня.

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

В версии 6.0 вероятно будет опубликован официальный ещё один язык Pallene (он есть уже давно, но как эксперимент) для написания быстрых модулей для луа, что позволит поделить luajit на ноль с его костылями и ограничениями и не ограничивать разработчиков в версии, если бы не luajit версии 5.1 5.2, померли своей смертью как lua5.0.

Ну посмотрим, что получится. А пока luajit всё еще актуален по этой причине.

wandrien ★★
()
Ответ на: комментарий от wandrien

Конечно актуален и будет ещё очень и очень долго, ручные оптимизации для выборочной Jit компиляции пока самый эффективный способ ускорения интерпретируемых программ в мире, ничего эффективнее этого пока даже не придумано, luajit,v8 js и так далее. Есть попытки автоматической оптимизации, но там конь с ушами размером со слона типа LLVM монстра подучается, а не элегантные и компактные решения что даже мыслить недопустимо в рамках lua. Опять же pallene не будет частью луа, это будет отдельный проект, просто отдельный микромикро язык, как С отдлельный язык на написания модулей (и ещё десятки других яыков для написнаия модулей луа) так и pallene будет в их числе, отдельной помогалкой, дабы прозрачно писать код. Где то будет быстрее Jit, где то медленее. Со стороны Луа просто будет API позволяющее манипулировать внутренними данными машины напрямую, но с гарантией корректности учитывая чудовищную гибкость луа. Pallene будет это обеспечивать, пишешь код на той же луа, но с типами, а на выходе mymodule.so подключаемый как обычный модуль require(mymodule) но быстрый как Си без накладных расходов Lua С API.

Конечно это не идеальное решение, идеально если бы сам луа сам себя так ускорял и при этом не вырос в размере, но это сделать просто невозможно в принципе. А модули для луа пишут не только на луа, вот будет и ещё один =)

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от wandrien

А пока luajit всё еще актуален по этой причине.

luajit has wares if you have bitcoin

Smacker ★★★★★
()
Ответ на: комментарий от dataman

Фсё не впихнуть, хотя ради прикола можно было бы список хотябы в пару сотен программ вбабахать :D Но меня бы в новости не пропустил фейсконтроль, мол «губа не треснет?» :D

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от vbr

Все изменение языка начиная от 5.1 до 5.4

До 5.1 смысла нет смотреть, оно нигде не используется уже.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от dataman

Ой дядя датаман, а дядя датаман мне конпелировать Pluto вот прям сейчас почему то очень лень, поэтому можешь проверить вот этот свежий баг воспроизводится на Pluto? Он у тебя конпеливан и установлен я знаю :)

sample = 'print("hello")'
stripped = load(string.dump(load(sample), true))
print(debug.getinfo(stripped, "L").activelines)

pluto test.lua что выдаст nil или segfault?

Баг свежий как пирожок

Воспроизводится через извращение, но всё же.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Я не стержался @dataman наверное тебе можно/надо оформить баг в Pluto

dron@gnu:~/Рабочий-стол/Pluto-0.9.2$ ./src/pluto test.lua 
Ошибка сегментирования
dron@gnu:~/Рабочий-стол/Pluto-0.9.2$ 

Тут кодовая база одна, получается.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от dataman

Насколько я раскурил ошибка проявляется в ldblib.c Lua и ldblib.cpp Pluto строка 162 некоректный параметр options наверху там проверка на > в начале, но в options первый символ пробел (вроде) и luaL_argcheck этот факап пропускает. Но надо уточнять, я просто дебаг принтами делал там выше luaL_optstring фигню вертает походу (не проверял, бегаю межу варкой супа и дебагом)

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от dataman

Лень двигатель прогресса :)

Я не понял зачем в коде это

 options = lua_pushfstring(L, ">%s", options);  /* add '>' to 'options' */

Если этот > убрать (ошибку на который буквально выше выдаёт основной код) то не падает и выдаёт nil что логично так как до этого байт код подвергается strip через опцию true для string.dump переводящую функцию в байт код. Надо в 5.3 глянуть как там, так как там не воспроизводится баг.

UDP блин в 5.3 стурктура данных LuaState уже другая, надо раскручивать код до самого низа. Нафиг нафиг пусть там сами, потом увидим изменения. В 5.3 если не считать внутренней суб-под реализации код полностью аналогичен, гдет в кишках логический косяк. Надо дебуг версию собрать и под gdb дёрнуть, но скорее всего там нифига понятного не будет.

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от dataman

Given that this is an issue in upstream Lua, it will have to be fixed there, and then we will downstream the fix.

Ах он ленивая жопка, даже не сказал «я разберусь, но исправление будет из апстрима»! :D

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Ах он ленивая жопка

Ну вот, будем знать. :)

Given that this is an issue in upstream Lua, it will have to be fixed there, and then we will downstream the fix.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Блин интернеты вырубали. Пока вырубали я понял что промахнулся со своими дебагами принтами

rogram received signal SIGSEGV, Segmentation fault.
0x000055555556120e in nextline (p=0x5555555edd30, currentline=0, pc=0)
    at ldebug.c:284
284	  if (p->lineinfo[pc] != ABSLINEINFO)

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

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от jolka

Зачем нужен?

Скрипты писать

Чем знаменит?

Мелкий, но полноценный язык чтобы скрипты писать для случаев когда не хочется писать мелкий язык чтобы скрипты писать :D

LINUX-ORG-RU ★★★★★
() автор топика
Ответ на: комментарий от Anoxemian

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

Anoxemian ★★★★★
()
Ответ на: комментарий от Anoxemian

Наверняка уже есть. Но там ядро программы всё равно надо на C делать. Но проще встроить в любой готовый инит и дёргать код луашный, всё лишнее выкинуть. Это буквально работа на пару вечеров для любого инита будет. Тут больше останавливает переписывание потом юнитов сисьд и шеллов рунитов на lua код. Но зато потом да, красота, можно совмещать с sh просто выкидывать его не надо, в своём деле (для кратких но ёмких выражений) конкурентов у него нет, а вот если что размашистое то уже с ним проблемы и тут можно на более многословном, но удобно языке уже писать.

Но всё же нужно поступать логично и не пихать везде язык только потому что он нравится :D. В том плане что для таких штук как иниты нужно отдавать себе отчёт что ты подсаживаешь на язык буквально всех, нужно очень тщательно взвесить все за и против. Хотя вон в NetBSD не парились и засунули в ядро и норм

LINUX-ORG-RU ★★★★★
() автор топика
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Может быть Вам в хозяйстве пригодится.

https://github.com/royqh1979/libturtle
A C graphic library for turtle drawing

https://en.wikipedia.org/wiki/Turtle_graphics
The turtle has three attributes: a location, an orientation (or direction), and a pen.
The pen, too, has attributes: color, width, and on/off state (also called down and up).
                    
У черепахи есть три атрибута: местоположение, ориентация (или направление) и загон.
Перо тоже имеет атрибуты: цвет, ширину и состояние включения/выключения (также называемое « вниз» и «вверх» ).

Черепаха перемещается по командам, которые зависят от ее 
собственного положения, например «перейти вперед на 10 делений» и «повернуть налево на 90 градусов».

Ручкой, которую носит черепаха, также можно управлять, включив ее, задав ее цвет или ширину.

Студент мог понять (а также предсказать и рассуждать) движение 
черепахи, представляя, что бы он делал, если бы был черепахой.
Сеймур Пейперт назвал такое рассуждение «телесно-синтонным».

https://en.wikipedia.org/wiki/Logo_(programming_language)
Logo is an educational programming language, designed in 1967 by 
Wally Feurzeig, Seymour Papert, and Cynthia Solomon.[1] Logo is 
not an acronym: the name was coined by Feurzeig while he was at 
Bolt, Beranek and Newman,[2] and derives from the Greek logos, meaning word or thought.

https://github.com/royqh1979/raylib A simple and easy-to-use library to enjoy videogames programming

https://www.raylib.com/

В https://www.raylib.com/ имеется простой парсер С++ в части: defines structs enums and functions.
Результат в xml, ...
Может быть к Lua прикрутите.

Forum0888
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.