На игровых проектах что я работал у нас было и по 2 и по 3 инстанса, даже разных версий, луы. Использовалось чисто для скриптования внутренних с/с++ api разных систем, практически без использования даже стандартных модулей и даже без использования таблиц и других наворотов с метами. Чисто тубо обёртка над с. Интеграция предельно простая, намного проще чем тот же Питон. Скорость интерпретации при таком использовании было близка и нативной. В дебегере не больше 10 степов и ты уже в функции своей нативной. Короче, для встраивания скриптования штука предельно полезная.
Про Roblox и разработку команды Roblox - язык luau стоило бы тоже упомянуть. Люди сделали апгрейд lua 5.1, добавили аннотацию типов как в питоне. Всякие штуки к которым мы привыкли вроде += и даже режим песочницы. Чтобы никто не обращался к файловой системе. То есть Roblox довольно безопасен за счёт luau. Получается сейчас есть три ветки lua: 1. Обычная lua 5.4 2. luaJIT - форк lua5.1 просто с лучшей производительностью 3. luau - форк lua5.1 с крутыми апгрейдами языка luau встроили в игру в стиме Retro gadgets. Что как бы показатель, что язык не только в Roblox можно применить
Я, безусловно, глуп, но просветите, а зачем он, даже забывая о том, что он вскользь упоминается. Скорее всего как факт сравнения. Но, для меня лисп загадка, никогда не понимал всего флера вокруг него, а все что и слышал так 2 магических слова макросы и репл.
Lua мой любимый язык, особенно его улучшенная версия luau. Пишу много лет. И в Roblox тоже писал. Но есть люди которые такие: "фу тут нет ООП, тогда буду транслировать typescript в lua" Это может и удобнее, но зачем для маленьких скриптов качать ноду и писать на ts. Если можно простые скрипты писать на специально для этого сделанном lua. Это обидно что никто не хочет учить lua используя только ts. В lua только две проблемы: 1. Странное ООП через метатаблицы. Ими просто не удобно пользоваться. 2. Нет лямбда выражений, а создавать анонимные функции слишком громоздко. 3. Можно было бы добавить ещё отсутствие типизации, но в luau как раз была добавлена типизация и остальные полезные штуки вроде оператора +=
1 Можно по подробнее чем оно странное? Тоже самое, что и js, как в питоне не знаю, но в остальном. Ну методы пишутся в нотации Class.\:method, подумаешь беда. 2 Но, если говорить по сути, громоздкие не значит нет. Все же все пользуются чем-то с автодополнением и уж там-то этот вопрос решаем, а смотрим мы все равно на тело. А вообще я бы еще больше раскрыл, lua в целом громоздок. else if вместо хоть какого, но свитча или pattern matching, continue через goto + метки. ("string"):gsub, но ({}):insert не работает, может только в нвиме так. Недалеко от кассы куцие регулярки еще и через %, банально в стд либе нет стандартных методов, там поиск, split(лишь через for gmatch), про таблицы я вообще молчу, вот вы жалуетесь на анонимные функции, а я иду дальше, а куда вам их применять то? Map filter, reduce, то нет. Итерация по строке, как, правильно только предварительно преобразовав ее в таблицу или gmatch хак, или sub(i, i), ну что это такое. Кстати, вы в 3 добавили, но вот тоже, нет банальных инкрементов и +=. Я понимаю, что встраивание, все дела, допишите сами на си, но. 3. Если вам нужна типизация, то скриптовые языки, причем все мимо, что печально. Так как в лучшем случае это будет jit\умный интерпретатор. А указания типов это лишь капля в море, то что , что-то является числом, не говорит о том, какое это число.
@@daiske2867 lua сравнивают обычно с python, хоть языки совершенно разные. lua минималистичен, без ООП. В lua очень мало функционала. А python носит статус "простого" языка. Хотя это не совсем так. lua ещё проще так как в ней меньше правил. Так вот ближе всего к lua только js. Да в js больше возможностей, но в js как и в lua возможно реализовать ТОЛЬКО прототипное ООП. Минусы такого ООП: отсутствие и невозможность реализовать самому абстрактный класс, нормальную типизацию которая бы реально скрывала поля при апкасте. Нет интерфейсов. Так как нет типов нет и дженериков. Именно из-за кривого ООП в js придумали язык ts в котором всё это есть. Который бы транслировался в js. Позже появился проект "ts to lua" который может ts транслировать в lua код.
@@daiske2867 использовать методы с точкой и двоеточием это крутая фича языка. Это наоборот плюс lua ведь в метод с точкой можно первым аргументом передать контекст метода.
@@daiske2867 так js обмазан сахаром по этому применение точки к строке или числу автоматические оборачивает это значение в класс и вызывает у него метод. А lua минималистичен. lua можно сравнить с Си на котором он написан. Какой ещё язык будет весить меньше мегабайта? Из-за простоты его и проще выучить. continue как и другие дополнения языка вроде замороженных таблиц и += есть в luau. По сути как и на Си, на lua можно создать своё ООП и ФП. Я лично добавляю функцию filter. Она часто используется в проектах. Хорошая типизация в Julia. Там есть абстрактные типы Number, Int, Float и конкретные Int32, Int16, Float64. Можно перегружать функции для работы с Int и Float по разному если необходимо.
@@qwertymangames1800 начну с главного. Большая часть того, что вы описали не нужна или реализуема. С точки зрения встраиваемости, сильно с ООР разгуливаться, ну странно, вы же язык встраивание, так в той системе все и реализуйие, а на луа чисто по мелочи, но даже так. Интерфейсы + абстрактные классы, банально через метатаблицы решаются. Да громоздко, но язык такой. К если не нравится, существуют действительно трансляторы в него, аля moonscript и fennel. Дженерики в динамическом языке это оксюморон. Потому что он by design дженерик. Либо опять уточняйте, если вам не хватает с++ шаблоново, то отсылка к началу, вам не стоит использовать динамику. Ну и про js и ts. Классы в js с es6 как языковая конструкция есть, да даже с приватными полями. Но я тут уже играет лично мое мнение, что и от кого вам скрывать? Всегда можно договориться _поле -> не публичное. Если говорит о луа, то даже больше того, существует local функции и переменные, просто класс в отдельный модуль и не давайте доступа к этим локальным. Ну решается все это. Ну и раз уж АК по честному, то никто не запрещает пользовать lsp, который сам типы просчитает и которому ты их можешь подсказать, что вообще говоря вопрос не столько языка, сколько инфраструктуры.
Ужасное качество звука у гостя, приходится вслушиваться в каждое слово. Меня хватило на 15 минут. Так и не узнаю, почему нумерация массива с 1 - это технологический прорыв.
у луа есть несколько дебильных фишек которые помоему на порядок снижают удобство, а с ним и популярность языка это do end, отсутствие continue и x = x + 1 может еще чтото, давно не писал на нем
Почему же Вы не умеете по-русски разговаривать? Понятно что Вы понимаете о чём говорите, но Вы так криво и косноязычно повествуете, что во первых ничего не понятно, а во вторых это невозможно слушать. Так и не понял нафига он нужён, кроме того что у него есть реализованный интерпретатор, который удобно встроить куда-то и пользоваться самим фактом того, что можно динамически интерпретируемые куски кода использовать - ну это видимо и привело к популярности в качестве языка для модов в играх. 33:52 Ну может хоть сейчас что то полезное расскажете? Я видимо тупой, я совсем ничего не понял из всего что вы бубнили и жевали.
8:00 говорит что "закопает язык одним фактом". Но как раз нумерация с единицы единственная адекватная вещь которую должны были использовать все высокоуровневые языки программирования по типу python, js. А не тащить низкоуровневый стиль из Си в высокоуровневые языки. То что python нумерует с нуля бред. Ещё больший бред что в python так же 1 - это true, 0 - false. Опять же стащили с Си. Но в контексте python/js эти штуки контринтуитивные. На js мы не пишем код близкий к машинному. Так почему нас обязывают думать как машина, возвращаться к Си??? Очень глупо было так строить высокоуровневые языки. И тут lua преуспел - в нём всё логично. Любые цифры - true. А false может быть только у самого false и у nil. И всё.
>python так же 1 - это true, 0 - false. это уже очень давно не так. в python3 это исправили и еще очень много накопившихся проблем, хотя жаль что не все. для перечисления с 1 если так уж хочетя - используйте enumerate(my_list, start=1). абсолютное большинство использует индексацию с 0, так даже математики решили сделать в большинстве пакетов и довольны. python - это клей для сишных либ, поэтому он такой популярный и поэтому для него уже все понаписали. хотелось бы подмножество питона, которое было бы удобно встраивать, тогда бы луа просто вытеснили. посмотрите на всякие godot.
@@oriontvv однако python 2 всё ещё используется и обновляется. Так что не вижу смысла писать код на 3 версии. Ситуация аналогичная lua где версию 5.4 не используют только потому что luau и luajit базируются на lua 5.1
@@oriontvv python, js и прочие языки никогда не будут весить меньше мегабайта как lua. Не будут иметь такой простой и малый синтаксис чтобы его можно было изучить за 15 минут. Нет таких языков просто. Изучать python гораздо сложнее чем lua. Так что lua ещё долго никто не сможет вытеснить с рынка встраиваемых языков. lua это компактный и простой синтаксис с кучей логичных и удобных особенностей которых нет у сиподобных языков. Сиподобные языки просто наворовали своих фишек у Си. Даже если в языке им не место и они не логичные. Например оператор + который работает по разному со строками и числами.
@@qwertymangames1800 у вас неверная информация. Второй питон не обновляется официально. поддерживают код на нем пара процентов бедолаг, которые не могут попросту смигрироваться. В 3й версии очень много удобных нововведений типа async/await, gradual typing и многого другого. Да и работает он быстрее.
@@qwertymangames1800 поэтому я и отметил что "подмножество языка". На счёт кучи удобных особенностей - звучит довольно смешно для языка, в котором нет множеств, деревьев и вообще все надо реализовывать самому. Язык безусловно очень компактный, но от того заставляет писать велосипеды для всего(пример с парсингом JSON - отлично это подчеркивает), что плодит баги, удорожает разработку и поддержку. Оттого вообще странно что он находит применение в современном мире, где абсолютно все стремится к жесточайшей оптимизации.
Питон своей базовой простотой, снижает порог вхождения программиста в профессию. Луа УСЛОЖНЯЕТ старт. Питон позволяет сделать приложение целиком, Луа скриптовый язык. Питон позволяет своей мощью, разработчику быть в его окружении. Не подгружая знания из других языков. На этапе обучения программист получает от Питона, отклик, даёт на выходе даже работающие приложения 🙂Питон перерос уже язык для обучения, язык для скриптования. Став языком разработки. Причём признан в так называемых кругах, "профессиональных разрабов". А Луа так и остался скриптовым. Никуда не растёт. Не взлетел. Сравнивать туповато. Но в целом контент пилится, пипл хавает 🙂