Anonymous
они отлажены и протестированы в боевых условиях
Snusmumriken
Редиски и мемкешды уже тоже отлажены и протестированы в боевых условиях : )
Snusmumriken
Как будто только я их на бой выкатываю )))
Anonymous
ну, не знаю та же монго была бажная до последнего
Anonymous
мол ее проекты использовали такие же как редис и мемкашед
Anonymous
а потом срочно платили саппорту монги за багфиксы
Snusmumriken
Монга сложная и поэтому бажная, чем сложнее инструмент тем более бажен он, пока всё не отловили.
Anonymous
нет, она изначально говном была
Revertron
Anonymous
это как попил бюджета
Snusmumriken
Раз она есть и используется - значит есть ниша : )
Anonymous
просто на хайпе хотели срубить бабла
ShadoWalkeR
Самые боевые - когда базы данных отношения на серваке начинают выяснять? 😃
Snusmumriken
"- Это моя память, я первый её зарезервировал!"
"- Memory exception, сучки!"
"- Сук, сервер упал!"
ShadoWalkeR
"Остаться должен только один!"
ShadoWalkeR
Нууууу... у кого пурген для сахара и ключи от туалета, тот и прав😈
ShadoWalkeR
Ну пока остальные админы отсутствуют, правый накатывает те решения в прод, которые он видит как художник😂
mva
😢
> JavaScript's ecosystem is awesome.
ну-ну. Как там та хренота называлась когда все дружно соснули? leftpad?
Co(n)stantine👨🔬
Snusmumriken
это фиаско https://realmensch.org/2016/05/28/goodbye-lua/
Я читал эту фиговину в свой день рождения два года назад. Ну сбежал один чел потому что ему что-то не понравилось, ну что поделать. Сколько было статей по поводу "JS/Python/C/C++/Java/C#/Obj-C/[any_lang] - это фиаско, не таким я его хотел видеть!", что пересчитать не выйдет.
ShadoWalkeR
В прямых руках любой инструмент хорош
ShadoWalkeR
Но все же нельзя отрицать что у lua есть недостатки
Anonymous
Дело не в недостатках луа, ьут просто человек пишет жаваскрипт экосистем из авесоме + агитирует за ссаный обрубок под названием тайпскрипт
Anonymous
Это как бы диаггноз уже, вот эти две фразы
Lucky
Co(n)stantine👨🔬
это точно)
Yuriy
Snusmumriken
ShadoWalkeR
luarocks, упоротая конкатенация строк, и хтонические таблицы - которые в себя поглотили почти все классы
ShadoWalkeR
А еще неявная типизация и слабая стандартная билиотека)
ShadoWalkeR
Я как то попробовал через нее с файловой системой поработать
ShadoWalkeR
ShadoWalkeR
Упоротая в том смысле, что синтаксис выбрали две точки)
ShadoWalkeR
Все же таблицы оказались сильно переусложнены за счет того что они и массивы и словари и типаооп
ShadoWalkeR
В squirrel это разбили на отдельные сущности)
Snusmumriken
1. Бедная стандартная библиотека - это хорошо, но могли бы заняться официальными подключаемыми модулями, крутыми и отлаженными, как LPEG, только в большем количестве областей. Они "не стандартные" но "от разрабов языка", типа появляется хоть какой-то стандарт.
2. Сборка мусора - довольно упоротая, слишком много елозенья сборщика мусора без необходимости, особенно когда у нас уже есть тонна объектов.
3. Мало современных-молодёжных синтаксических фич (особенно всяких стрелочных лямбд `a, b => a + b') и мелкой функциональщины.
4. Отсутствие аналога PEP8, в результате народ калякает кто во что горазд, а чем меньше мозгов тем сложнее и упоротее это получается. Ну, или сишники лезут в луа и делают миллиард глобальных функций в разных модулях, и тонну констант.
> синтаксис выбрали две точки
Это осознанный ход. В lua, '8' + '5' == 13.
Если строка приводится к числу, она работает как число при арифметике.
Иначе получишь мясо как в JS.
Snusmumriken
Snusmumriken
> таблицы оказались сильно переусложнены
Ну такое. Я бы не трогал таблички, потому что они ШИКАРНЫ. Единственное неприятное - в ООП тип остаётся табличкой, поэтому приходится заводить поля класса типа __type.
Таблички, имхо, это неплохой пример не плодения сущностей без необходимости, очень не хватает подобной штуки в нормальных языках.
Швабодка!
Переусложнённость только в метатаблицах. В остальном - отлично.
ShadoWalkeR
JS:
1 + 1 = 11
11 - 1 = 10
)))))
ShadoWalkeR
На неподготовленного человека они сваливаются как кирпич на голову 😃
Snusmumriken
Ну и пущай использует как знает, пока учится.
Как словарик или массивчик. Я так и делал!
ShadoWalkeR
А пример выше с '5' + '8' = 13 как раз изза нестрогой типизации и неявного приведения
Snusmumriken
Я сам это выяснил сравнительно недавно, всю жизнь явно приводил и буду продолжать приводить : )
Snusmumriken
Но две точки конкатенации - это пример ХОРОШЕГО дизайна чётко определённого поведения, пусть и непривычно.
Snusmumriken
Ну, знаешь? Когда результат твоих действий очевиден - это хорошо, разве не так?
ShadoWalkeR
Неявное приведение как раз хуже - везде приходится проверки и приведения типов делать, чтобы быть уверенным в коде
Snusmumriken
Где-то валялась функция проверки типов:
function foo(a, b, c)
check(a, 'n', b, 's', c, 't?')
end
ShadoWalkeR
Еще один пример бедности стандартной библиотеки)
ShadoWalkeR
Хотя там вроде было чтото для проверки типов
Snusmumriken
Конечно же есть
type(5) ==> 'number'.
ShadoWalkeR
)
Snusmumriken
Но опять таки, при нормальной грамотности разраба - он будет чисто и нормально (и с комфортом) калякать на луях всё что хочешь.
Остальное - рассуждения на тему "почему на луа нельзя биться головой о клавиатуру и получать поддерживаемый продукт?(((".
ShadoWalkeR
Ну для меня это дико слегка после языков с нормальной типизацией
Dika
Snusmumriken
Но на самом деле, статическая таки нужна, но только в некоторых условиях, поэтому я предпочёл бы опционально статическую.
ShadoWalkeR
Ну в том же С++ и ruby не совсем строгая - они float и int позволяют друг к другу приводить. А вот преобразования строка<->число уже нужно явно делать
ShadoWalkeR
А и жутко бесит глобальность переменных по умолчанию
Snusmumriken
Но если ты пилишь библиотеку или модуль, следить за локалами почти не надо:
local lib = {}
function lib.foo(a, b)
return a + b
end
return lib
Ну, типа функции присобаченные к lib имеют ту же область видимости что и lib.
Не надо лишний раз писать local и следить за этим.
ShadoWalkeR
У меня в астериске на нем логика. В неумелых руках это один файл на пару тысяч строк 😃
Nikolay
конкатенация двумя точками - везде бы так. мне как раз не нравится плюс в питоне и JS.
Nikolay
таблицы 👍
mva
и никто не озвучит маленький футпринт рантайма :(
ShadoWalkeR
Да я знаю - я тут в руби гем для общения с AMI интерфейсом астериска переписываю, потому что там такой лютый трэш в чужих поделиях
Snusmumriken
Говнокод, говнокод никогда не меняется.
ShadoWalkeR
https://www.rubydoc.info/gems/asterisk-ami/0.0.4/Asterisk/Connection#events-instance_method
Метод events советую заглянуть
bebebe
ShadoWalkeR
Там еще в функции парсинга того что этот метод возвращает не меньшее говно
ShadoWalkeR
Оно за пару часов выжирает весь лимит памяти в 512 мегабайт и падает
ShadoWalkeR
Ну и вложенные циклы)))
Snusmumriken
Красиво. Такую вложенность я обычно убираю через досрочный return. Ну, типа
function foo()
if not (good_condition) then
return nil, 'bad condition!'
end
if (something_bad) then
return nil, 'something is bad!'
end
do something nice end
return nice
end
Типа точно проверяем что всё ок, и делаем чистый код в конце, который делается "как на лучший вариант стечения событий". Но мы уже как бы всё проверили.
mva
я, кстати, никогда не использовал парадигму do ... return за пределами циклов
mva
ибо не очень понимаю профита её использования по сравнению с неиспользованием :D