Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Lua. кто-нибудь пользуется? почему это хорошо?

752  1 2 3 все
  moose старожил11.12.17 15:43
11.12.17 15:43 

столкнулся с такой интересной архитектурой: в чипе прошивается интерпретатор луа, который после загрузки ищет файл с определенным именем, в котором луа-скрипт, а дальше все оттуда управляется.

архитектура не новая, java тоже создавалась когда-то с мыслью программировать "игрушки".

смущает, что сама луа занимает прилично памяти (хотя ее футпринт на порядок меньше, чем у python'а, но в конце-концов зависит от того, какой функционалитет мы включим в этот интерпретатор (есть "стандартный" вариант прошивки, и можно скомпилировать индивидуально). некая RTOS, но убогенькая, как мне показалось. и сырая

пошел на сайт производителя чипа, https://nodemcu-build.com/, там они предлагают самому выбрать конфигурацию, они сгенерируют байнэри и вышлют. выслали. прошил. чип вместо того чтобы сказать, как при дифолтном, что он не находит инициализационного файла, "пришел в панику": начал что-то делать, вообще непонятно что. я устал с этим разбираться. может, кто-то уже пробовал и подскажет? пока перепрошил "нормальным" си-кодом, чип работает без проблем (в нужном мне объеме), но нервирует, что не получился эксперимент.

#1 
AlexNek патриот11.12.17 21:46
AlexNek
NEW 11.12.17 21:46 
в ответ moose 11.12.17 15:43

А что можно хорошего ожидать от кодогенератора, наверняка чего то нестандартного захотелось.

А эмулятора для отладки нет?

#2 
  moose старожил11.12.17 22:58
NEW 11.12.17 22:58 
в ответ AlexNek 11.12.17 21:46, Последний раз изменено 11.12.17 23:01 (moose)

в принципе есть и кроссплатформ компайлеры и много чего еще, но дибажить, вроде, нечем. по крайней мере, нет никакой гарантии, что если все правильно в дивэлопмэнт окружении, то оно так же все будет и на устройстве. брэйкпоинт поставить и посмотреть, что там с переменными - никаких шансов. что-то от психологии бедного мужика. но скорее всего, я просто не понимаю, чем это так хорошо. наверняка имеются случаи, где это (или подобное) оправдано. у nordic semiconductor это называется soft device, у большинства - просто RTOS, однако там код пишется на с/с++. все это, конечно, лучше, чем все писать на ассемблере, и только если имеется что-то готовое, перенимать, на чем бы оно не было сделано, как я это делаю. но я могу себе это позволить, т.к. никто мне не говорит, что и как, я сам определяю, и могу выбрать не то, что производительно, а то, что мне хочется. а если идет работа над коммерческим продуктом, там от выбора платформы/технологии во многом зависит успех/провал. почему для кого-то луа - хорошее решение, я пока не поймал.

как-то (года два назад) ездил собеседоваться в фирму, которая забыл уже что разрабатывает, но они для гуи своего продукта используют javaFX. спросил, имеют ли они целью мультиплатформенность. ответ - нет, только windows. тогда спросил, откуда такой выбор. честно признались, что лучше всего (а похоже, что только и всего) "главный" знает java, и они решили таким образом выбрать цукунфтзихэрэ тэхнологи. но луа, в отличие от жавы, похоже, скорее экзотика, чем то, что знает каждый студент. поэтому ее применение не может быть вызвано тем, что "мы знаем только луа, поэтому...".

не догоняю пока...

#3 
AlexNek патриот11.12.17 23:27
AlexNek
NEW 11.12.17 23:27 
в ответ moose 11.12.17 22:58

К сожалению, с Луа совсем не знаком, но применять скриптовые языки в железяке, как то напрягает. Помню как то плюсы засунул, когда все С пользовали, но давно это было. Сейчас с железяками на уровне АПИ, не ниже.

#4 
  moose старожил12.12.17 10:49
NEW 12.12.17 10:49 
в ответ AlexNek 11.12.17 23:27
К сожалению, с Луа совсем не знаком

да я тоже. вот только начал разбираться, и оно меня только расстроило...


применять скриптовые языки в железяке, как то напрягает.

не знаю. если бы оно работало, как обещает, то почему нет? вам не нужно весь чип перепрошивать, там есть простенькая файловая система (SPIFFS: SPI Flash File System), наличие которой позволяет не переписывать каждый раз весь чип, а только те файлы, которые вы изменили. а скрипты здесь очень даже кстати, и язык вполне достаточный для приложений, работающих "в игрушках".


#5 
AlexNek патриот12.12.17 21:44
AlexNek
NEW 12.12.17 21:44 
в ответ moose 12.12.17 10:49
и оно меня только расстроило...

А отчего расстроило, ну не получилось как хотелось - часто бывает. У разработчиков то получается,значит какие то отличия были.

Я просто пока не сталкивался с "игрушками"

#6 
  moose старожил12.12.17 23:32
NEW 12.12.17 23:32 
в ответ AlexNek 12.12.17 21:44
Я просто пока не сталкивался с "игрушками"

знаю. а то бы вы давно разрулили мою проблему : )

я сегодня ее уже и сам разрулил. обыдно стало, решил вернуться к теме, почитать побольше (иногда полезно : ), и оказалось, что вычитал причину: при ПЕРЕпрошивках нужно учитывать тот факт, что при этом перезаписывается только память, занимаемая новой версией, остальное остается как было. а эта фирмвара лезет за пределы своей памяти, предполагая, что там находится "файловая система" (о которой я писал), отформатированная исходя из размеров самой фирмвары. а форматируется она только, если там ничего нет. а там - файловая система, созданная предыдущей прошивкой. поэтому сперва следует потереть весь флэш, и только потом аплоудить новую версию. проделал это все (пришлось и python вспомнить, с которым почти не знаком, и кое-что еще), и ОНО РАБОТАЕТ! осталось в луе поднасобачиться (книга хорошая уже скачана и полупрочитана), освоить тулчейн для компиляции-загрузки скриптов на чип, и все пойдет как по маслу : ). единственное что смущает - дибажить невозможно (люди пишут). придется или лог какой-нибудь изобретать или изобретенный осваивать, или еще как, но у меня задачи простенькие относительно, надеюсь, без ошибок все запрограммирую (это ведь луа : )


#7 
AlexNek патриот13.12.17 22:58
AlexNek
NEW 13.12.17 22:58 
в ответ moose 12.12.17 23:32
знаю. а то бы вы давно разрулили мою проблему

ну об этом то и речи не могло идти, вроде понятно было с самого начала.

Просто иногда, даже просто при пересказе свой проблемы может "загореться лампочка".

Я вот тоже вчера нашел отчего у меня гит по SSH не работал, долго искал, оказалось одного каталога на сервере не хватало.

#8 
  moose старожил15.12.17 12:23
NEW 15.12.17 12:23 
в ответ AlexNek 13.12.17 22:58, Последний раз изменено 15.12.17 12:27 (moose)
Просто иногда, даже просто при пересказе свой проблемы может "загореться лампочка".

это очень верно. я еще лет 30 назад начал пользоваться этой "зажигалкой": была одна коллега, которая понять меня не могла, но умела на удивление внимательно слушать: кивать, держать визуальный контакт, в общем, вести себя, будто ни на миг не упускает нить. и, рассказывая ей, я был вынужден то, что "плавало в воздухе", четче формулировать, и в конце-концов начинал это ясно понимать. вы тоже этот механизм имели ввиду?


немного "сблизился" с этой луой, и у меня на данном этапе такое создается впечатление, что это - попытка изобрести костыль, пользуясь которым, любой калека сразу должен бы побежать, причем очень быстро и в нужном направлении.

все, что народ пытается сделать и показать на этой луе, гораздо эффективнее делается на с/с++. причем здесь уже наработана масса библиотек, другого кода, и тем, кто имеет опыт в этих языках, нет необходимости осваивать еще и луу. но чтобы человеку освоить с/с++, требуется время, и не каждый, затративший это время, освоит это хорошо. а луа - некий basic, который, считается, каждый человек с улицы в состоянии за пару вечеров освоить в объеме, достаточном, чтобы создавать качественные приложения. уверен, и на луа в принципе можно писать эффективный код, и на с/с++ создавать ужас, на который нельзя смотреть. но продемонстрирую на живом примере актуальный уровень.

задаем в гугле lua esp8266 smtp send email example

в вервых рядах - эта ссылка:

https://github.com/nodemcu/nodemcu-firmware/blob/master/lu...

в первой строчке кода следующий комментарий:

Working Example:

.

о! форум даже сразу ссылку расшифровал!

на видео кто-то рассказывает и демонстрирует, как этот код работает. и массы берут этот код за образец, пытаются его воспроизвести и пр.

не нужно знать даже основы луа, чтобы понять, что здесь делается. а делается то, чего делать в принципе никогда нельзя.

нашел еще пример кода на adafruit, уже получше, но все равно для меня - очень непрофессионально. т.е. вывод напрашивается, что в среде луа даже учиться не у кого (в интернете по крайней мере). а когда нет грамотного ядра комъюнити, там не могут вырасти хорошие плоды: они смотрят на говнокод, другого они ничего в жизни не видели (и, возможно, видеть не желают), и сами начинают плодить подобное.

вспомнил нашего "коллегу" из соседней ветки с его потугами призвать regex, чтобы наконец-то запихнуть -1.5 в целое число : ). но он хоть признается, что не учился и не собирается, а здесь - говнокод прямо от "гуру".


#9 
  moose старожил15.12.17 20:31
NEW 15.12.17 20:31 
в ответ moose 15.12.17 12:23

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

#10 
AlexNek патриот16.12.17 17:25
AlexNek
NEW 16.12.17 17:25 
в ответ moose 15.12.17 12:23
вы тоже этот механизм имели ввиду?

ну что то подобное...

#11 
  moose старожил17.12.17 21:27
NEW 17.12.17 21:27 
в ответ moose 15.12.17 20:31

таки залез поглубже. новые эркэнтниссэ - неприятные. не знаю, назвать ли это "гибкостью" или дерьмовым концептуальным решением.

короче так. я как-то привык ("в других, нормальных языках" : ), что если я не объявлю переменную или ф-ю, то при обнаружении сразу возникает особый случай. в луе - "никаких проблем"! причем, если вы описали ф-ю, а потом какой-то переменной присвоили ее значение, то можно потом вызвать ф-ю через эту переменную. но если вы или опечатались в имени ф-ии (или переменной), или объявили ф-ю позже, чем переменную, то никто не будет ругаться, аж пока не произойдет попытка вызова этой ф-ии! естественно, "нужно программировать правильно". но я еще во времена фортрана встречал ошибки, вызванные "вольным стилем" объявления переменных. в общем, час потерял, пока это дошло. хотя сейчас удивляюсь, отчего так долго тупил : )

#12 
Simple Nothing is f*cked18.12.17 14:07
Simple
NEW 18.12.17 14:07 
в ответ moose 17.12.17 21:27

Нормальные свойства динамических языков.

#13 
AlexNek патриот18.12.17 22:10
AlexNek
NEW 18.12.17 22:10 
в ответ moose 17.12.17 21:27
"в других, нормальных языках"

Одна из причин по которым не люблю интерпретаторы

#14 
  moose старожил18.12.17 23:02
NEW 18.12.17 23:02 
в ответ AlexNek 18.12.17 22:10

а причем здесь интерпретаторы? в этом смысле и java, и c# - интерпретаторы. и знаю точно, что уже давно имеются компиляторы, позволяющие из жава-кода икзэшник изготовить (не мультиплатформенный теперь уже, естественно : ). наверное, и с сишарпом такое же уже проделывают (или подмножеством). также можно в принципе написать с++-машину, которая будет интерпретировать с++ код.

#15 
AlexNek патриот18.12.17 23:59
AlexNek
NEW 18.12.17 23:59 
в ответ moose 18.12.17 23:02

ну когда на байт коде или ИЛе будете писать приходите в гости смущ

#16 
  moose старожил19.12.17 18:57
NEW 19.12.17 18:57 
в ответ AlexNek 18.12.17 23:59
ну когда на байт коде или ИЛе будете писать приходите в гости смущ

знаю, у вас писька длинее. и толще. "еще бы стояла, цены бы ей не было" (с; )


#17 
AlexNek патриот19.12.17 22:41
AlexNek
NEW 19.12.17 22:41 
в ответ moose 19.12.17 18:57

А я уж было решил что с Вами можно и нормально общаться, типа как на перекуре. Жалко. Прийдется тогда тоже другую пластинку ставить.


Для тех кто кроме своих личных проблем ничего больше не замечает, поясню что имелось в виду.

Код на Java и С# компилируется в некий промежуточный код (байт код и ИЛ соответственно), а уж этот промежуточный код интерпретируется.


Вот еще табличку нашел по разным видам типизаций. Вроде интерпретируемые и компилируемые языки имеют различные тенденции или?


Статическая / динамическая | Сильная / слабая |Явная / неявная
---------------------------------------------------
JavaScript  - Динамическая | Слабая      | Неявная
Ruby        - Динамическая | Сильная     | Неявная
Python      - Динамическая | Сильная     | Неявная
Java        - Статическая  | Сильная     | Явная
PHP         - Динамическая | Слабая      | Неявная
C           - Статическая  | Слабая      | Явная
C++         - Статическая  | Слабая      | Явная
Perl        - Динамическая | Слабая      | Неявная
Objective-C - Статическая  | Слабая      | Явная
C#          - Статическая  | Сильная     | Явная
Haskell     - Статическая  | Сильная     | Неявная
Common Lisp - Динамическая | Сильная     | Неявная
D           - Статическая  | Сильная     | Явная
Delphi      - Статическая  | Сильная     | Явная

вв

#18 
  moose старожил19.12.17 23:57
NEW 19.12.17 23:57 
в ответ AlexNek 19.12.17 22:41

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


зы. не понимаю, что вы хотите сказать? вижу только "а я все равно больше знаю, толще вижу, длиннее понимаю...". я не против, если вас это тешит : )

#19 
AlexNek патриот20.12.17 00:15
AlexNek
NEW 20.12.17 00:15 
в ответ moose 19.12.17 23:57
а я все равно больше знаю

где это Вы такое увидели?


не понимаю, что вы хотите сказать?

то что уже и сказал - не люблю интерпетируемые языки.

#20 
1 2 3 все