Snusmumriken
04.05.2018
14:54:22
Как будто только я их на бой выкатываю )))
Насибуллин
04.05.2018
14:55:42
ну, не знаю та же монго была бажная до последнего
мол ее проекты использовали такие же как редис и мемкашед
а потом срочно платили саппорту монги за багфиксы
Google
Snusmumriken
04.05.2018
14:58:03
Монга сложная и поэтому бажная, чем сложнее инструмент тем более бажен он, пока всё не отловили.
Насибуллин
04.05.2018
14:58:34
нет, она изначально говном была
Revertron
04.05.2018
14:58:42
Насибуллин
04.05.2018
14:58:48
это как попил бюджета
Snusmumriken
04.05.2018
14:58:50
Раз она есть и используется - значит есть ниша : )
Насибуллин
04.05.2018
14:58:57
просто на хайпе хотели срубить бабла
Andrey
04.05.2018
14:59:09
Snusmumriken
04.05.2018
14:59:43
"- Это моя память, я первый её зарезервировал!"
"- Memory exception, сучки!"
"- Сук, сервер упал!"
Andrey
04.05.2018
14:59:46
"Остаться должен только один!"
Philipp
04.05.2018
15:00:40
Andrey
04.05.2018
15:01:41
Snusmumriken
04.05.2018
15:03:14
Andrey
04.05.2018
15:04:08
Ну пока остальные админы отсутствуют, правый накатывает те решения в прод, которые он видит как художник?
Google
Vadim
04.05.2018
17:04:51
?
> JavaScript's ecosystem is awesome.
ну-ну. Как там та хренота называлась когда все дружно соснули? leftpad?
Philipp
04.05.2018
17:05:18
?
04.05.2018
17:05:44
Snusmumriken
04.05.2018
17:15:34
это фиаско https://realmensch.org/2016/05/28/goodbye-lua/
Я читал эту фиговину в свой день рождения два года назад. Ну сбежал один чел потому что ему что-то не понравилось, ну что поделать. Сколько было статей по поводу "JS/Python/C/C++/Java/C#/Obj-C/[any_lang] - это фиаско, не таким я его хотел видеть!", что пересчитать не выйдет.
Andrey
04.05.2018
19:01:43
В прямых руках любой инструмент хорош
Но все же нельзя отрицать что у lua есть недостатки
Насибуллин
04.05.2018
19:22:42
Дело не в недостатках луа, ьут просто человек пишет жаваскрипт экосистем из авесоме + агитирует за ссаный обрубок под названием тайпскрипт
Это как бы диаггноз уже, вот эти две фразы
Lucky
04.05.2018
19:23:52
Snusmumriken
05.05.2018
15:10:27
?
05.05.2018
15:29:09
это точно)
Yuriy
05.05.2018
15:57:26
Snusmumriken
05.05.2018
15:58:18
Andrey
05.05.2018
16:24:42
Snusmumriken
05.05.2018
16:28:18
Andrey
05.05.2018
16:29:34
luarocks, упоротая конкатенация строк, и хтонические таблицы - которые в себя поглотили почти все классы
А еще неявная типизация и слабая стандартная билиотека)
Я как то попробовал через нее с файловой системой поработать
Упоротая в том смысле, что синтаксис выбрали две точки)
Все же таблицы оказались сильно переусложнены за счет того что они и массивы и словари и типаооп
Google
Andrey
05.05.2018
16:34:14
В squirrel это разбили на отдельные сущности)
Snusmumriken
05.05.2018
16:39:13
1. Бедная стандартная библиотека - это хорошо, но могли бы заняться официальными подключаемыми модулями, крутыми и отлаженными, как LPEG, только в большем количестве областей. Они "не стандартные" но "от разрабов языка", типа появляется хоть какой-то стандарт.
2. Сборка мусора - довольно упоротая, слишком много елозенья сборщика мусора без необходимости, особенно когда у нас уже есть тонна объектов.
3. Мало современных-молодёжных синтаксических фич (особенно всяких стрелочных лямбд `a, b => a + b') и мелкой функциональщины.
4. Отсутствие аналога PEP8, в результате народ калякает кто во что горазд, а чем меньше мозгов тем сложнее и упоротее это получается. Ну, или сишники лезут в луа и делают миллиард глобальных функций в разных модулях, и тонну констант.
> синтаксис выбрали две точки
Это осознанный ход. В lua, '8' + '5' == 13.
Если строка приводится к числу, она работает как число при арифметике.
Иначе получишь мясо как в JS.
> таблицы оказались сильно переусложнены
Ну такое. Я бы не трогал таблички, потому что они ШИКАРНЫ. Единственное неприятное - в ООП тип остаётся табличкой, поэтому приходится заводить поля класса типа __type.
Таблички, имхо, это неплохой пример не плодения сущностей без необходимости, очень не хватает подобной штуки в нормальных языках.
Швабодка!
Переусложнённость только в метатаблицах. В остальном - отлично.
Andrey
05.05.2018
16:40:27
JS:
1 + 1 = 11
11 - 1 = 10
)))))
На неподготовленного человека они сваливаются как кирпич на голову ?
Snusmumriken
05.05.2018
16:43:37
Ну и пущай использует как знает, пока учится.
Как словарик или массивчик. Я так и делал!
Andrey
05.05.2018
16:44:24
А пример выше с '5' + '8' = 13 как раз изза нестрогой типизации и неявного приведения
Snusmumriken
05.05.2018
16:44:47
Я сам это выяснил сравнительно недавно, всю жизнь явно приводил и буду продолжать приводить : )
Но две точки конкатенации - это пример ХОРОШЕГО дизайна чётко определённого поведения, пусть и непривычно.
Ну, знаешь? Когда результат твоих действий очевиден - это хорошо, разве не так?
Andrey
05.05.2018
16:46:41
Неявное приведение как раз хуже - везде приходится проверки и приведения типов делать, чтобы быть уверенным в коде
Snusmumriken
05.05.2018
16:47:33
Где-то валялась функция проверки типов:
function foo(a, b, c)
check(a, 'n', b, 's', c, 't?')
end
Andrey
05.05.2018
16:48:39
Еще один пример бедности стандартной библиотеки)
Хотя там вроде было чтото для проверки типов
Snusmumriken
05.05.2018
16:49:20
Конечно же есть
type(5) ==> 'number'.
Andrey
05.05.2018
16:49:51
)
Snusmumriken
05.05.2018
16:51:10
Но опять таки, при нормальной грамотности разраба - он будет чисто и нормально (и с комфортом) калякать на луях всё что хочешь.
Остальное - рассуждения на тему "почему на луа нельзя биться головой о клавиатуру и получать поддерживаемый продукт?(((".
Andrey
05.05.2018
16:51:56
Ну для меня это дико слегка после языков с нормальной типизацией
Snusmumriken
05.05.2018
16:52:15
Google
Dika
05.05.2018
16:53:03
var x * 3;
невалидно
Snusmumriken
05.05.2018
16:53:20
Но на самом деле, статическая таки нужна, но только в некоторых условиях, поэтому я предпочёл бы опционально статическую.
Andrey
05.05.2018
16:54:01
Ну в том же С++ и ruby не совсем строгая - они float и int позволяют друг к другу приводить. А вот преобразования строка<->число уже нужно явно делать
А и жутко бесит глобальность переменных по умолчанию
Snusmumriken
05.05.2018
16:54:42
Но если ты пилишь библиотеку или модуль, следить за локалами почти не надо:
local lib = {}
function lib.foo(a, b)
return a + b
end
return lib
Ну, типа функции присобаченные к lib имеют ту же область видимости что и lib.
Не надо лишний раз писать local и следить за этим.
Nikolay
05.05.2018
16:59:18
Andrey
05.05.2018
17:00:13
У меня в астериске на нем логика. В неумелых руках это один файл на пару тысяч строк ?
Nikolay
05.05.2018
17:00:40
конкатенация двумя точками - везде бы так. мне как раз не нравится плюс в питоне и JS.
Snusmumriken
05.05.2018
17:00:49
Nikolay
05.05.2018
17:01:15
таблицы ?
Vadim
05.05.2018
17:01:54
и никто не озвучит маленький футпринт рантайма :(
Andrey
05.05.2018
17:02:07
Да я знаю - я тут в руби гем для общения с AMI интерфейсом астериска переписываю, потому что там такой лютый трэш в чужих поделиях
Snusmumriken
05.05.2018
17:03:36
Говнокод, говнокод никогда не меняется.
Andrey
05.05.2018
17:04:34
https://www.rubydoc.info/gems/asterisk-ami/0.0.4/Asterisk/Connection#events-instance_method
Метод events советую заглянуть
bebebe
05.05.2018
17:05:45
Andrey
05.05.2018
17:05:52
Там еще в функции парсинга того что этот метод возвращает не меньшее говно
Оно за пару часов выжирает весь лимит памяти в 512 мегабайт и падает
Ну и вложенные циклы)))
Snusmumriken
05.05.2018
17:08:19
Красиво. Такую вложенность я обычно убираю через досрочный 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
Типа точно проверяем что всё ок, и делаем чистый код в конце, который делается "как на лучший вариант стечения событий". Но мы уже как бы всё проверили.
Google
Vadim
05.05.2018
17:10:15
я, кстати, никогда не использовал парадигму do ... return за пределами циклов
ибо не очень понимаю профита её использования по сравнению с неиспользованием :D
Andrey
05.05.2018
17:10:55
Я проще сделал - взял TCPSocket - в array добавляю строки сообщения - астериск его построчно возвращает, до разделителя между сообщениями - пустой строки. После чего содержимое импровизированного буфера кидаю в функцию обработчик и очищаю его
Snusmumriken
05.05.2018
17:11:13
Ну, message queue, да.
Andrey
05.05.2018
17:11:24
Как результат - на тестовом сервере скрипт уже сутки крутится и отъел 20 мегабайт
10 на старте и еще 10 в процессе работы за все время
Snusmumriken
05.05.2018
17:13:17
У меня сейчас на "основной работе" логирование похожим образом работает.
Условно, на каждой машине развёрнуто приложение, принимающее строчки по TCP, и пихающее их в луа-табличку.
Когда накопится буфер или по истечению таймаута - каждая машина сгружает всё на сервер логов.
Уже месяца полтора крутится с первого тестового запуска, а логов там ~100-500мб в секунду бывает : )
Не каждый раз, конечно, среднее - 5-30мб.
Andrey
05.05.2018
17:14:53
В руби очень много из коробки есть - поэтому его использую. Просто бездумное написание кода некоторыми людьми убивает))))
Snusmumriken
05.05.2018
17:16:13
Это было и будет всегда, пока к комплюхтерам не начнут пускать только тех, кто уже написал пару сотен мильёнов строчек кода и нескольких лет поддержки собственных, кхм, продуктов (и не умер за это время).
Andrey
05.05.2018
17:17:39
Snusmumriken
05.05.2018
17:19:42
?
05.05.2018
17:20:32
Andrey
05.05.2018
17:21:18
Revertron
05.05.2018
17:21:18
Andrey
05.05.2018
17:21:21
И ОТСТУПЫ!
?
05.05.2018
17:22:12
а ты код без них пишешь?
Snusmumriken
05.05.2018
17:22:28
Andrey
05.05.2018
17:23:03