Oleg
Snusmumriken
Python, VBA, Fortran, Matlab, Delphi да и Scratch — имеют огромную долю популярности с курсов, школ и университетов.
Snusmumriken
(по луа не дают курсов примерно нигде, потому что не нужно, поэтому для анализа остаются только проекты в гите и мелкая мишура)
Михаил
кто как думает, есть смысл писать целиком движок на luavela (форке луажит)?
предыстория. у меня в движке на плюсах после сотни килобайт кода начался ад с хедерами, из-за сериализации (bitsery). нужно включать заголовки со всеми типами до включения самого bitsery, чтобы он видел сами функции сериализации (про исходники bitsery вообще говорить нечего).
насколько я заметил, в луашке такого ада нет. разрешение глобальных переменных происходит в рантайме. следовательно порядок включения не важен.
+ перф сравним с сишным. Вполне можно переписать те же функции на луа и кайфовать.
Также luavela, как позиционируют авторы, - продакшен форк, и в нем можно адресовать более 2 ГБ ОЗУ, для движка - то что надо.
Так вот, если перф гипотетически получится хотя бы 75% от решения на с++ то я бы по приколу наверн попробовал переписать движок на луа
Михаил
а еще что важно - подключение плагинов. ничего лишнего, никакой принудительной предкомпиляции, просто закидываешь аддон в папку с уже запущенным приложением и подключаешь
Михаил
чем не прелесть
Михаил
Snusmumriken
кто как думает, есть смысл писать целиком движок на luavela (форке луажит)?
предыстория. у меня в движке на плюсах после сотни килобайт кода начался ад с хедерами, из-за сериализации (bitsery). нужно включать заголовки со всеми типами до включения самого bitsery, чтобы он видел сами функции сериализации (про исходники bitsery вообще говорить нечего).
насколько я заметил, в луашке такого ада нет. разрешение глобальных переменных происходит в рантайме. следовательно порядок включения не важен.
+ перф сравним с сишным. Вполне можно переписать те же функции на луа и кайфовать.
Также luavela, как позиционируют авторы, - продакшен форк, и в нем можно адресовать более 2 ГБ ОЗУ, для движка - то что надо.
Так вот, если перф гипотетически получится хотя бы 75% от решения на с++ то я бы по приколу наверн попробовал переписать движок на луа
*myheader.h*
#ifndef MYHEADER_H
#define MYHEADER_H
void foo() {}
void bar() {}
...
#endif
Готово. Инклудь в любом порядке, в любом количестве.
Snusmumriken
Ну и битсери.. Попробуй выставить вообще последним. У тебя есть момент когда ты инклюдишь основную массу модулей? Может, попробовать дёрнуть его в main.h как бы уже после всех модулей?
Михаил
Snusmumriken
Михаил
хм ладно, значит мой костыль не такой костыльный
Михаил
спс тогда, пойду на плюсах кодить)
Михаил
Михаил
но структуры данных у меня массивные, и как это - не влияет на время компиляции?
Михаил
в любом случае я им немного пожертвовал уже
Igor
Это даже незаметно будет, если код проекта весит меньше 50 мегабайт, скажем так. Именно код, не весь проект.
Igor
Очень грубое обобщение, но примерно так и есть.
Igor
Есть много других довольно неочевидных способов заставить компилятор плакать, помимо лишних зависимостей.
Михаил
Михаил
50к вроде
Igor
Чем активнее используются всякие крестовые наворочки по типу темплейтов, классов, неймспейсов и т.д., тем тяжелее компилятору становится это всё разобрать. Не в том смысле, что вот создал ты допустим 100 классов, и компилятор сразу на 5 секунд дольше компилить стал, нет. Всё зависит от сложности этих классов.
Михаил
да я понимаю примерно, мне даже не настолько важна скорость компиляции, но API...
Igor
да я понимаю примерно, мне даже не настолько важна скорость компиляции, но API...
Если интересно. как я для своего сервера API плагинское реализовывал, можешь глянуть тут. Не претендую на то, что это лучшая архитектура, но в целом она работоспособна и делает всё, что мне было тогда нужно))) Я там даже делал небольшой прикол такой, чтобы плагины могли между собой общаться по стандартизированному каналу. Но это всё не на крестах, чистая сишка. И предупреждаю - большая часть кода писалась в сонном состоянии и не всегда трезвом))))
Petr
Друзья, кто-нибудь может мне вкратце объяснить взаимоотношения Lua и LuaJIT?
Почему многие предпочитают последнее хотя там поддержка Lua 5.1 только, а луа уже вроде 5.4.
Спасибо.
Petr
Т.е. LuaJIT это сторонняя реализация рантайма в пределах версии Lua 5.1? А любят её видимо потому что она "хорошая"?
Igor
Igor
Он фактически является компилятором, а не интерпретатором
Petr
А LOVE-ка допустим на какой луа работает? Обычно или LuaJIT?
Igor
Vlad
Я помню этот момент перехода
Vlad
Когда внезапно мой говнокод стал быстро работать на моем тогда древнем нетбуке
Petr
Интересно. Раскол такой.
Uni_X
Igor
Vlad
Vlad
Плюс есть кастомные реализации, типа того что в PICO-8
Uni_X
То есть как С++. Есть стандарт Луа и под него надо всем Луа подходить
Igor
Igor
И просто вносят в уже имеющуюся кодовую базу изменения
Uni_X
Понял, спасибо
Igor
Многие форкаются и от LuaJIT
Igor
Есть редкие исключения, когда полностью с нуля пишут новые имплементации Lua
Snusmumriken
Snusmumriken
Интересно. Раскол такой.
Ну вообще как бы да, с другой стороны, большая часть даже сишных луа-библиотек, имеющих совместимость с 5.1 (почи всех), прекрасно работают на Luajit.
А на 5.1 просто так забить не получится — слишком много проектов работают на чистой PUC реализации 5.1 и всё ещё нуждаются в поддержке.
Snusmumriken
Друзья, кто-нибудь может мне вкратце объяснить взаимоотношения Lua и LuaJIT?
Почему многие предпочитают последнее хотя там поддержка Lua 5.1 только, а луа уже вроде 5.4.
Спасибо.
Со времён 5.1, в луа произведено сравнительно мало качественных изменений.
Из заслуживающих внимания:
1. В 5.2 введено goto (портировано в luajit) и немножко метаметодов а ля __gc для табличек.
2. В 5.3 введены битовые операторы и соответствующие метаметоды и немножко longlongint-чисел (есть в luajit в виде bit-либы, и доступа к произвольным сишным структурам объявленным в рантайме через ffi)
3. В 5.4 введён генеративный сборщик мусора и скоупгварды
И без всего, этого достаточно легко жить, продолжая писать по 5.1-стандарту (или по пересечению стандартов 5.1-5.4, чтобы работало везде). Качественно, функционал очень мало изменился. Особого смысла переходить выше нет.
Вот если бы добавили что-то мощное, например какую-нибудь многопоточку с семафорами-мутексами, с шаред-табличками и прочей фигнёй из коробки — тогда возможно был бы прям серьёзный смысл брать более старшие версии, и то не во всех случаях.
Petr
Понятно, спасибо за информацию. Я сейчас портирую проектик с луа 5.0.3 на современную луа и думаю что использовать, судя по всему надо луажит.
Snusmumriken
Можешь портануть код просто на 5.1, и запускать в луажыте. Высока вероятность что потребуется минимум правок (или вовсе без них) для портов на любые, чуть более современные версии луашки.
Snusmumriken
Petr
Petr
В нем на луа проекты которые он запускает
Petr
Это типа движка для myst-подобных адвенчур
Snusmumriken
Пон, да, у Уука проекты не особо большие по объёму логики.
Если тот будет писать на том проекте свой десятый реймаршинг, то лучше луажит.
Если нет то что угодно.
Petr
Мне бы по идее чтобы проекты старые работали, но видимо это нереально? Надо переписывать с 5.0 на 5.1?
Snusmumriken
Да, там довольно много различий в интерпретаторах, есть довольно высокая вероятность что просто так не заработает.
Petr
Ну оно и не работает 😅
Snusmumriken
Хотя если там просто объявления колбеков, арифметика всякая и дёрганье экспортнутых функций движка то может и норм.
Petr
Проблема тогда в том, что у меня нет рабочего кода для старта проекта. Там луа для гуя тоже используется похоже да.. ладно, буду спрашивать, если что.
Petr
А гайда или даже может тулы по конверсии луа 5.0 в луа 5.1 случайно не существует?
Snusmumriken
Не думаю.
Нормальный список изменений и несовместимостей начал появляться с 5.1-5.2.
Petr
Печаль, печаль, да похоже это дохлый номер там мне разобраться.
Luсky
Учёные нашли способ удвоить скорость вычислений компьютеров без замены железа
https://3dnews.ru/1100733/predstavlen-paket-rasparallelivaniya-kotoriy-na-lyubom-geleze-udvoit-skorost-vichisleniy-i-v-dva-raza-sokratit-potreblenie
Snusmumriken
Petr
На 5.1 валится вот тут с ошибкой: resources/defaults.lua:277: calling 'setstandardcursor' on bad self (node expected, got table)
При этом он должен загружать нулевую ноду .
При этом есть заменить node: на node. то получаем resources/defaults.lua:277: bad argument #1 to 'setstandardcursor' (node expected, got userdata) т.е. он действительно хочет node в self.
Нода у нас определена в Сях (nodes.h). В двигле там много непонятной мне "магии" относительно сетапа pipmak* и node, у меня не получилось разобраться. Я вообще не понял откуда он берет этот тип node.
Igor
Snusmumriken
Uni_X
Я помню потерял страх и одновременно запустил 2 вкладки в браузере и Intelij ideю
Snusmumriken
Uni_X
Snusmumriken
У нас теперь новый эвфемизм для "шкурки чебурашки".
Uni_X
Oleg