ShadoWalkeR
Поэтому squirrel lang мне больше луа понравился - нормальные классы, нормальные типы
anton
если хочется строгой типизации, зачем мучаться с луа, если есть c++?
Sergey
Сорри, не туда нажал...
Leon174
если хочется строгой типизации, зачем мучаться с луа, если есть c++?
C++ вместо Lua? Неожиданно. Песок неважная замена овсу. И хочется статической типизации, причем опциональной.
Sergey
Кто-нибудь знает Эрланг достаточно хорошо чтобы парировать выпад Иерсулаимски?
Sergey
C++ вместо Lua? Неожиданно. Песок неважная замена овсу. И хочется статической типизации, причем опциональной.
Согласен. C++ не является сценарным интерпретируемым языком, это очень важная характеристика для домена применения ЯП.
Anonymous
Кто-нибудь знает Эрланг достаточно хорошо чтобы парировать выпад Иерсулаимски?
Я знаю. Но там парировать нечего, товарищ вообще никак не в теме.
Sergey
Я правильно понял, что его сентенция по поводу скрытого состояния сообщений полностью не соответствует действительности?
Anonymous
Оно не то что не соответствует, тут просто нет предмета для критики. Вот есть в Эрланге концепция почтовых ящиков, она обеспечивает определённую инфраструктуру, причём блестяще обеспечивает. Там никакого анализа того, что Роберто кличет "скрытыми состояниями", никак и никогда не требуется (если ты не пишешь свою ВМ, грубо говоря).
Luсky
Знаю автора эрланга.
Luсky
Мир тесен.
Anonymous
Не хочешь обмен сообщениями? Ну вызывай функции как в любом другом функциональном языке. Но зачем, если Эрланг заточен на массовый параллелизм, асинхронность и т.п. Причём настолько грамотно заточен, что после эрланговых процессов ни на какие Го и прочую смешную возню со всякими промисами и корутинами смотреть просто не хочется.
Anonymous
А Роберто пытается натянуть непонятный ему язык на совершенно чужой домен. Всё равно что критиковать, допустим, SQL за то, что на нём как-то сложновато ГИП писать.
mva
а то у меня что кролик, что ёж страдали таким
mva
работает-работает N времени, а потом через ctl к нему обращаешься, а он говорит "не запущено". А что там в спике процессов - не волнует
mva
ну и на запросы извне оно тоже может при этом перестать отвечать
mva
при этом при kill -9 терять данные и ломать собственную базу
Sergey
Мне кажется, я был неправильно понят( Насколько я понимаю, Иерсулаимски критиковал не то, как Эрланг выглядит снаружи, а как устроен внутри. Вот и хотелось бы узнать мнение специалиста по внутрянке)))
Sergey
К примеру, Луа использует +- обычный синтаксис вызова функций, а с C общается через стек. То, что за кулисами может разительно отличаться от того, что на сцене.
Sergey
Вообще, функциональные языки - это здорово, ты мыслишь в терминах что нужно сделать, а не как именно. Но увы, часто этот подход разбивается о суровую реальность нефункционального окружения(
Sergey
вот бы ещё эранговые программы не теряли сами себя в запущенной вм
У нас один товарищ написал на Эрланге базу данных, так она работает на довольно слабом железе (древние АРМы) и почти не падает))) Правда требование - не более 12 часов непрерывной работы, так что... А потом, гад, уволился) У нас никто в Эрланге не шарит, так что мы теперь просто молимся)))
Anonymous
вот бы ещё эранговые программы не теряли сами себя в запущенной вм
Супервизоры для этого и придуманы. Ловишь 'DOWN', реагируешь. Ну, или не реагируешь, если не нужно.
mva
Супервизоры для этого и придуманы. Ловишь 'DOWN', реагируешь. Ну, или не реагируешь, если не нужно.
а ещё придуман нормальный софт, который не уходит в DOWN даже после года работы
Anonymous
Внутри Эрланг устроен по разному, в зависимости от конкретной ВМ. Вот недавно JIT выкатили (на самом деле AOT, но это детали). А так у меня опыт только с BEAM (что очевидно) и AtomVM немного. Всё там хорошо и грамотно, на самом деле.
mva
а ещё, в случае ejabberd'а, если взять тот же prosody, то у последнего и memory footprint на пользователя меньше, и производительность (в плане "максимальное количество передаваемых одновременно сообщений прежде чем захлебнуться") больше :)
mva
(prosody написан на Lua)
Anonymous
а ещё придуман нормальный софт, который не уходит в DOWN даже после года работы
'DOWN' - это не падение всего на свете. Это конкретный атом, сигнализирующий, что конкретный процесс завершил работу. Что для Эрланга совершенно штатный момент, и весь ОТП на такое поведение заточен. Правильно написанное приложение на Эрланге уронить довольно трудно.
Anonymous
Т.е., повторюсь, Роберто полез в тему, которую понимает весьма и весьма поверхностно. Разные языки, разные идеологии, разное всё. Нельзя одни привычки натягивать на всё подряд.
Джифорсович
Я заценил твои репы на битбакете
Джифорсович
А где ты щас хостишь новые? Селфхостед какой то?
Sergey
Т.е., повторюсь, Роберто полез в тему, которую понимает весьма и весьма поверхностно. Разные языки, разные идеологии, разное всё. Нельзя одни привычки натягивать на всё подряд.
Спасибо за большое количество подробностей, я даже кое-что вспомнил из того, что когда-то знал об Эрланге) Рискую быть посланным за занудство, но вот если взять конкретно BEAM - есть там эти чёртовы скрытые состояния? Да/нет? Если не уверены - тоже приемлемый ответ)
Anonymous
Они везде есть :) Какая задача-то стоит, надо лазить в мейлбоксы процессов?
Sergey
Т.е. есть единый глобальный шедулер сообщений? (извините, что вопросом на вопрос)))
Anonymous
Там сложнее. Грубо говоря, по шедулеру на физическое ядро. Но можно играться параметрами ВМ в определённых пределах, плюс есть "грязные" шедулеры, у которых свои заморочки.
Anonymous
Если надо по тексту Роберто пройтись, я могу прямо тут. По интервью который.
Sergey
Вопрос был чисто академический. Я же не говорю, что это плохо - если оно устойчиво работает с приемлемой производительностью, то пользователям должно быть пофиг как оно устроено внутри. Так что Роберто и прав и не прав одновременно)
Anonymous
Он же не пытается отрицать практические преимущества экосистемы Эрланга, он именно идеологию критикует... вообще её не понимая :)
Sergey
Идеологию? Мне показалось, он говорит о том, что язык позиционирующий себя как функциональный, внутри устроен по иным принципам. Он считает это недостатком, я - нет.
Sergey
Lua написан на C и довольно сильно отличается от C. И чтоооо?
mva
на самом деле, Lua больше похож на C, чем отличается от него
mva
в т.ч. в идеологическом плане :)
Anonymous
Ну хорошо, по тексту: > — Erlang is a funny language. It has some really good uses, fault tolerance is really interesting. But they claim it’s a functional language and the whole idea of the functional language is that you don’t have a state. Bzz. Во-первых, общепринятого определения понятия "функциональный" вообще не существует. Во-вторых, Роберто путает функциональность и чистоту. В-третьих, "полностью чистый язык - полностью бесполезен". >And Erlang has a huge hidden state in the messages that are sent and not yet received. А ещё он имеет стейт в стейтах процессов. И в словарях. И в ets/dets. И на этом фоне содержимое мейлбоксов, по которому так скорбит Роберто, вообще не заметно. >So each little process is completely functional but the program itself is completely non-functional. Так и есть. Эрланг - ФП, ОТП - ООП. Это общее место, вообще говоря. >It’s a mess of hidden data А можно продемонстрировать, что это именно mess? А то я вот не могу вспомнить случая, чтобы мне за 16 лет работы с Эрлангом пришлось хоть раз руками лазить в ящик. Я вообще не уверен, что это возможно без дополнительной эквилибристики, зато отчётливо вижу, что сам Роберто подобного даже не пробовал. >that is much worse than global variables because if it were global variables, you would print them Да, Роберто, давай, докажи нам, что local в Луа - это на самом деле преимущество. >Every single moment, what’s the state of the system? Не знаю и знать не хочу. Эрланг позволяет решать задачи, не отслеживая состояние каждого отдельного бита. А если у тебя возникает такое желание, то с тобой как с программистом что-то глубоко не так.
Sergey
Даже если не обращать внимание на синтаксис, весьма сильно отличается.
Egor
Как можно использовать переменные С++ в функциях lua? Использую C API
mva
Как можно использовать переменные С++ в функциях lua? Использую C API
чем переменные С++ отличаются от переменных C?
Sergey
Ну хорошо, по тексту: > — Erlang is a funny language. It has some really good uses, fault tolerance is really interesting. But they claim it’s a functional language and the whole idea of the functional language is that you don’t have a state. Bzz. Во-первых, общепринятого определения понятия "функциональный" вообще не существует. Во-вторых, Роберто путает функциональность и чистоту. В-третьих, "полностью чистый язык - полностью бесполезен". >And Erlang has a huge hidden state in the messages that are sent and not yet received. А ещё он имеет стейт в стейтах процессов. И в словарях. И в ets/dets. И на этом фоне содержимое мейлбоксов, по которому так скорбит Роберто, вообще не заметно. >So each little process is completely functional but the program itself is completely non-functional. Так и есть. Эрланг - ФП, ОТП - ООП. Это общее место, вообще говоря. >It’s a mess of hidden data А можно продемонстрировать, что это именно mess? А то я вот не могу вспомнить случая, чтобы мне за 16 лет работы с Эрлангом пришлось хоть раз руками лазить в ящик. Я вообще не уверен, что это возможно без дополнительной эквилибристики, зато отчётливо вижу, что сам Роберто подобного даже не пробовал. >that is much worse than global variables because if it were global variables, you would print them Да, Роберто, давай, докажи нам, что local в Луа - это на самом деле преимущество. >Every single moment, what’s the state of the system? Не знаю и знать не хочу. Эрланг позволяет решать задачи, не отслеживая состояние каждого отдельного бита. А если у тебя возникает такое желание, то с тобой как с программистом что-то глубоко не так.
Буду краток. Согласен.
Sergey
Ну хорошо, по тексту: > — Erlang is a funny language. It has some really good uses, fault tolerance is really interesting. But they claim it’s a functional language and the whole idea of the functional language is that you don’t have a state. Bzz. Во-первых, общепринятого определения понятия "функциональный" вообще не существует. Во-вторых, Роберто путает функциональность и чистоту. В-третьих, "полностью чистый язык - полностью бесполезен". >And Erlang has a huge hidden state in the messages that are sent and not yet received. А ещё он имеет стейт в стейтах процессов. И в словарях. И в ets/dets. И на этом фоне содержимое мейлбоксов, по которому так скорбит Роберто, вообще не заметно. >So each little process is completely functional but the program itself is completely non-functional. Так и есть. Эрланг - ФП, ОТП - ООП. Это общее место, вообще говоря. >It’s a mess of hidden data А можно продемонстрировать, что это именно mess? А то я вот не могу вспомнить случая, чтобы мне за 16 лет работы с Эрлангом пришлось хоть раз руками лазить в ящик. Я вообще не уверен, что это возможно без дополнительной эквилибристики, зато отчётливо вижу, что сам Роберто подобного даже не пробовал. >that is much worse than global variables because if it were global variables, you would print them Да, Роберто, давай, докажи нам, что local в Луа - это на самом деле преимущество. >Every single moment, what’s the state of the system? Не знаю и знать не хочу. Эрланг позволяет решать задачи, не отслеживая состояние каждого отдельного бита. А если у тебя возникает такое желание, то с тобой как с программистом что-то глубоко не так.
Правда я читал в переводе и долго плевался по поводу качества оного. Ну да ладно)))
Egor
чем переменные С++ отличаются от переменных C?
Я имею ввиду, как я могу передать в функцию не копию, а ссылку(если они есть в lua, конечно) какого-либо моего объекта, чтобы изменять его.
Sergey
В Луа нет переменных, одни ссылки)
Sergey
Userdata represent C values in Lua. A light userdata represents a pointer, a void*. It is a value (like a number): you do not create it, it has no individual metatable, and it is not collected (as it was never created). A light userdata is equal to "any" light userdata with the same C address.
Sergey
Точнее - light userdata. Но я могу быть и не прав) Надеюсь, более опытные товарищи меня поправят.
Sergey
Скорее всего, надо оборачивать в полный userdata.
Leon174
Код писать сюда https://studio.zerobrane.com/
Leon174
Love2d брать тут https://love2d.org/
Leon174
А здесь смотреть https://www.youtube.com/watch?v=QjslCOj9nIA&list=PLNdb9-93_ov4-WcZxzjdFNiZJm4QU4IBM
Anonymous
Leon174
Маньяк ты, боцман, и стикеры у тебя маньяцкие.
Anonymous
anton
вот, может пригодится кому, всё что я нашёл на гитхабе у меня не заработало, этим можно смотреть C стек из gdb и распечатывать таблицу из этого стека по индексу https://gist.github.com/Gliese852/c5aac9a01e5cdea705080be9735cab07
Dmitry
коллеги, вопрос на миллион - как импортировать vim api (библиотеку) в lua?
Dmitry
то есть если что на луарокс его нет
Snusmumriken
Я имею ввиду, как я могу передать в функцию не копию, а ссылку(если они есть в lua, конечно) какого-либо моего объекта, чтобы изменять его.
Кароч. Есть два метода передачи значений в луа. 1. light_userdata — это просто указатель на какую-то структуру. Считай что просто некоторое число. Память под этим указателем должна быть под управлением сишки, сборка мусора её не соберёт, но при множественном пропихивании одного и того же указателя, их можно сравнивать на равенство и на луёвой стороне: допустим, мы с сишки пропихиваем событие и указатель на окно, и события одного и того же окна всегда с одним и тем же указателем. С полной юзердатой такое бы не сработало. 2. Полная юзердата — это выделение памяти на луёвой стороне. Грубо говоря, ты маллокаешь кусочек места, пихаешь в него данные, опционально присоединяешь метатаблицу и луа начинает управлять его памятью: данное значение будет собрано сборкой мусора, когда на *луашной* стороне больше не останется ссылок на данный объект. Советую использовать фулл-юзердату во всех случаях когда возможно, и изначально организовывать своё приложение таким образом, чтобы луа управляла созданием и сборкой мусора.
Snusmumriken
коллеги, вопрос на миллион - как импортировать vim api (библиотеку) в lua?
Я что-то не вижу такой библиотеки в принципе, даже в чисто-сишном виде. Любые сишные библиотеки как бы биндятся биндингами.
Snusmumriken
то есть если что на луарокс его нет
Или ты про ето? https://neovim.io/doc/user/api.html
Dmitry
Или ты про ето? https://neovim.io/doc/user/api.html
Я про это - не могу оттуда понять как взаимодействовать с неовимом через Луа
Snusmumriken
Ну, похоже что примерно так. https://neovim.io/doc/user/lua.html#Lua Неовим где-то держит скрипты внутри себя, и дёргает по каким-то событиям.
Snusmumriken
Возможно, дёргать через :lua scriptname — имя скрипта начинает выступать в роли команды
Snusmumriken
Я не знаю точно, проверь. Практически гарантировано можно :lua require"scriptname"
Wsevolod
Я про это - не могу оттуда понять как взаимодействовать с неовимом через Луа
Взаимодействие с неовимом извне происходит по сокету — либо TCP, либо stdin/stdout, сериализация — msgpack
Wsevolod
Ох ты ж
Плагин хочешь написать?