The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Компания Microsoft опубликовала реализацию Lua VM, написанну..., opennews (ok), 17-Ноя-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


137. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +3 +/
Сообщение от Аноним (137), 19-Ноя-18, 19:34 
Я тот самый анон.
Я писал на ней игрульки (мобильные движки вроде Corona SDK, Defold...), моды к играм, программировал микроконтроллеры (Lua-node), даже писал GUI приложения для десктопа (https://github.com/pavouk/lgi).
Игрушку выложил в Google Play, но популярности она не добилась, моды до сих пор где-то валяются на каких-то форумах, микроконтроллер я вообще воспринимал как игрушку.

Могу сказать, что Lua - хороший язык, LuaJIT очень быстрая. Но если вы привыкли к языкам с жесткой статической типизацией, то lua вам просто не нужна.

Ответить | Правка | Наверх | Cообщить модератору

140. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  –4 +/
Сообщение от Orduemail (ok), 19-Ноя-18, 20:52 
> Но если
> вы привыкли к языкам с жесткой статической типизацией, то lua вам
> просто не нужна.

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

Ответить | Правка | Наверх | Cообщить модератору

168. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Аноним (168), 22-Ноя-18, 23:36 
Есть различные библиотеки для проверки типов (checks, annotate) и статистического анализа кода (lua lint). Действительно большой недостаток - отсутствие статических структур и некоторые чрезмерные упрощения. Например, невозможно различить отсутствие переменной/поля таблицы и равенство его nil. Или то что обычные массивы и словари объединены в одну структуру table. Или десяток способов имитировать классы, несовместимые друг с другом.
Ответить | Правка | Наверх | Cообщить модератору

169. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Orduemail (ok), 23-Ноя-18, 05:13 
> Есть различные библиотеки для проверки типов (checks, annotate) и статистического анализа
> кода (lua lint).

Да, но они для версий старше 5.0, я же завязан на 5.0. Да и глупости всё это, я посмотрев, решил что реально чем возится со всей этой хнёй, проще написать компилятор типизированного языка в lua. Вплоть до того, что реализовать lisp на lua, с компиляцией lisp'а в lua. Правда lisp динамиечески типизируемый, то есть он снимет лишь часть проблем.


Ответить | Правка | Наверх | Cообщить модератору

170. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  –1 +/
Сообщение от Аноним (168), 23-Ноя-18, 06:49 
Так lua тоже динамически типизируемый. Annotate очень интересная библиотека. Там добавляются декоратором doc-строки для проверки типов аргументов функции, по которой генерируется конечный автомат. На luajit работает быстрее чем check type, реализованный на си в виде dll. Да, ещё раздражает обилие locate и end в коде. В moonscript это исправлено. Но разыменование nil - проблема больших скриптов lua. По сути это аналог null pointer exception. Здесь может помочь автоматическая инициализация всех переменных и немутирующие переменные как в функциональных языках. Но тогда это будет другой ЯП и нужно будет всё переписывать.
Ответить | Правка | Наверх | Cообщить модератору

147. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Orduemail (ok), 20-Ноя-18, 04:34 
> Я тот самый анон.
> Я писал на ней игрульки (мобильные движки вроде Corona SDK, Defold...), моды
> к играм, программировал микроконтроллеры (Lua-node), даже писал GUI приложения для десктопа
> (https://github.com/pavouk/lgi).

Ну это не очень показательный проект. Это просто бинды к внешней библиотеке без попытки создать что-то своё. Но и тем не менее вопрос: а там все эти тесты-проверки типов вручную писались, или всё же автосгенерированы были? Если автосгенерированы, то что это за утилита такая замечательная? Позволяет ли она автогенерировать произвольные юзерские типы, чтобы не надо было вручную набирать бы весь этот бойлерплейт с setmetatable, check_type на каждое поле, а тупо описать тип декларативно, и получить всё остальное бонусом?

Ответить | Правка | К родителю #137 | Наверх | Cообщить модератору

152. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Аноним (152), 20-Ноя-18, 13:03 
Эта замечательная утилита называется gobject-introspection. Именно она создаёт такое многообразие биндингов к Gobject.
Если бы не она, я бы выбрал Qt.
Ответить | Правка | Наверх | Cообщить модератору

153. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Orduemail (ok), 20-Ноя-18, 16:07 
> Эта замечательная утилита называется gobject-introspection. Именно она создаёт такое
> многообразие биндингов к Gobject.
> Если бы не она, я бы выбрал Qt.

Это не вариант. В моём случае нужен именно lua код, встроить C'шные модули не удастся. Если бы это было возможно, я бы вообще не парился на тему lua ни секунды.

Ответить | Правка | Наверх | Cообщить модератору

158. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от neit95 (ok), 21-Ноя-18, 03:07 
Lua же встраиваемый язык. Чистый Lua - это на поиграться. Там в стандартной библиотеки нет слишком много того, что нужно. Поэтому и недотягивает до python'а по популярности.
Ответить | Правка | Наверх | Cообщить модератору

162. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Orduemail (ok), 21-Ноя-18, 03:28 
> Lua же встраиваемый язык. Чистый Lua - это на поиграться. Там в
> стандартной библиотеки нет слишком много того, что нужно. Поэтому и недотягивает
> до python'а по популярности.

Да, я понимаю. И именно этот кейс я и имею в виду. Есть приложение, в нём не хватает функциональности на мой взгляд, но там есть встроенный луа. Недостающую функциональность я оцениваю в несколько тысяч SLOC. Я написал около 1 kSLOC и даже когда этот код работает, я не верю в то, что он работает. Ну, я писал его "волнами", типа написал что-то, посмотрел, перелопатил весь код дописал ещё чутка. Посмотрел, перелопатил. И так раза три-четыре. Сейчас я смотрю на то что получилось, и думаю, что же теперь делать -- переписывать заново с учётом обретённых знаний? Тщательно избегая копипаста, чтобы туда не просочились бы косяки типа "я изменил функцию добавив туда аргумент, но исправил не все вызовы этой функции, и некоторые вызывают эту функцию с недостаточным количеством аргументов". Луа, падла такая, не просто радостно принимает такие баги, он даже не даёт никакого способа найти их.

В интернете есть статические анализаторы, но они для lua версий 5.1 и выше. Мне нужно для 5.0. Написать свой статический анализатор? По идее не сложно должно быть, lua маленький и простой язык, но с другой стороны, не сильно-то сложнее запилить маленький и простой язык со статической типизацией, который будет компилироваться в луа. И я бы давно сделал это, но для этого нужно уверенное понимание всяких нюансов lua, которые возможно обрести только через опыт программирования на луа. И поэтому собственно я и задаю вопрос: какие есть секретные тулзы для программирования на lua? Или может быть секретные приёмы? Может быть какой гайд по написанию unit-тестов для нетипизированных языков? Может быть руководство по проектированию API в нетипизированных языках? В идеале, конечно же, книжку с названием "Lua для C-программиста" или "системное программирование на lua" ("системное" -- это в смысле создания сложных систем, а не написания ядра ОС).

Ответить | Правка | Наверх | Cообщить модератору

164. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от neit95 (ok), 21-Ноя-18, 03:44 
Ох, не уверен, что смогу помочь. С функциями жрёт, т.к. для неё не баг, а фича (на сколько помню). Там даже можно несколько значений вернуть, при этом, если у вызывающего есть лишние переменные, они nil'ами будут, если же их недостаёт, ряд возвращаемых значений похерится. Точно не помню (я на нём эпизодически пишу скрипты для сборки C/C++ проектов при помощи premake), но думаю с аргументами такая же ситуация. Единственное, что могу посоветовать, книгу от автора: Роберту Иерузалимски "Программирование на языке Lua" (на русском существует). Правда она для 5.3. Не знаю, но м.б. существовало издание для 5.0, но я не интересовался. У меня её 3-е издание. На крайний случай думаю можно ориентироваться на книгу, а разницу искать в и-нете.
Ответить | Правка | Наверх | Cообщить модератору

165. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от Orduemail (ok), 21-Ноя-18, 06:22 
> Ох, не уверен, что смогу помочь. С функциями жрёт, т.к. для неё
> не баг, а фича (на сколько помню).

Да там всё фича. Некоторые из этих фичей можно пофиксить колупая _G, но вызовы функций можно пофиксить, разве что, собственными реализациями funcall и defun, и вызова/объявлений всех функций через них. Да и то, этот nil, который lua пихает везде по-умолчанию, нехило так будет мешать. Придётся запретить себе использовать nil как значение, и завести новый атом означающий "отсутствие значения", такой который надо указывать явно, чтобы он был передан, и соответственно тогда возникновение nil в любом месте можно будет считать ошибкой типа "попытка доступа к несуществующей/неинициализированной переменной". И я бы сделал это, но чтобы это было бы удобно использоваться, надо написать обёртки для всех библиотечных функций. И для всех функций из разных пакетов, которые я скачиваю из интернета. Опять же надо писать парсер lua, чтобы генерить эти обёртки (не писать же их вручную!), и опять же встаёт вопрос, не проще ли написать нормальный язык, который будет компилироваться в lua.

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

Да-да. А в 5.0 ещё, если использовать эллипсис, и в качестве одного из аргументов передать nil, то все последующие аргументы пропадают. Потому что lua не может отличить неинициализированную переменную от переменной инициализированной значением nil (он даже несуществующую переменную не отличает от переменной инициализированной значением nil, хотя специальными трюками его можно отучить от этой дурной привычки), а итератор по аргументам останавливается, когда найдёт nil. Я вроде читал где-то, что в более старших версиях это пофиксили, но в 5.0 это именно так.

> Единственное, что могу посоветовать, книгу от автора: Роберту Иерузалимски "Программирование
> на языке Lua" (на русском существует). Правда она для 5.3. Не
> знаю, но м.б. существовало издание для 5.0, но я не интересовался.
> У меня её 3-е издание. На крайний случай думаю можно ориентироваться
> на книгу, а разницу искать в и-нете.

Да, я читал эту книгу. Первое её издание о 5.0. Это не то, что нужно. Вообще, в идеале, было бы круто что-то типа "Practical Lua" по аналогии с "Practical Common Lisp". Или "Learning Lua with entirely too many [somthing]" по аналогии с "Learning Rust with entirely too many linked lists". Что-нибудь, что берёт какую-то проблему, и разбирает разные подходы к её решению. Или что-то что берёт несколько проблем, и разбирает подходы к их решению. Доводя эти подходы до какого-то логического завершения. А этот Иерузалимски не парится совершенно, приводя в качестве примеров высосанные из пальца строки кода, которые не делают ничего полезного, кроме демонстрации фишки языка, которые не отвечают на вопрос, когда эту фишку языка уместно использовать, а когда проще обойтись без неё. Типа если читателю надо, пускай он сам выясняет это методом проб и ошибок. Но метод проб и ошибок -- это полгода программирования на языке, с очень скромным выхлопом в плане объёма рабочего кода. Зато груды нерабочих кусков кода, в процессе написания которых было выяснено, что подход X неудачен для решения проблем класса Y.

Впрочем... Может если посмотреть на более поздние издания, то там Иерузалимски исправился и придумал какие-то более реалистичные примеры? Я загляну на досуге.

Ответить | Правка | Наверх | Cообщить модератору

166. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от КГБ СССР (?), 21-Ноя-18, 08:29 
Посмотри эту книжку:

google.com/search?q="Lua+Programming+Gems"+2008

В ней, вроде, как раз даны примеры применения с объяснением.

Ответить | Правка | Наверх | Cообщить модератору

172. "Компания Microsoft опубликовала реализацию Lua VM, написанну..."  +/
Сообщение от hdkfhsfhsiosf (?), 23-Ноя-18, 09:19 
Как вариант - написать внешний dll модуль на С/C#. Примеры есть в книге Иерусалимского и на сайте quikluacsharp.ru. Ещё вариант - через lua socket и json реализовать RPC. Я так связывал брокерский терминал quik c встроенным яп qlua (расширение lua 5.1) c luajit. C json/REST/http интерфейсом можно внешние модули на любом языке написать.
Ответить | Правка | К родителю #162 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру