
Snusmumriken
22.04.2017
00:22:12
Хм.

Рома
22.04.2017
00:23:38
Как мне кажется, луашенька все локали запоминает в хеш локальных, а потом оттуда берет вне зависимости от уровней, local туда только добавляет, сборщик мусора убирает

Vlad
22.04.2017
00:24:00
вызов добротного куска кода на порядоченное выполнение возможет нормально только если запихать его в функцию?

Рома
22.04.2017
00:24:04
Но это мне так видится в воображении по логике, в сорцы не заглядывал

Google

Vlad
22.04.2017
00:25:43
t = {}
t.a = function()
-- выполнение поставленной задачи
end
тобишь для выполнения куска кода больших размеров иным способом как запихать все в функцию нет,
(хотя глупый вопрос, наверно же что по другому никак)
а в таблицу внедрил для удобства использования что б иметь понятие где все искать в случае необходимости
(хотя в целом странный вопрос)

Рома
22.04.2017
00:28:12
Влад, читай, пожалуйста, перед отправкой, люди понять пытаются это потом
Кстати, для нубских вопросов есть паблик в вк

Snusmumriken
22.04.2017
00:33:01
С большей вложенностью будет хуже.

Vlad
22.04.2017
00:34:02
for i = 1, 10 do
local aru = i..'bla-bla'
...
end
в этой части не совсем понятно для каких целей выполняем конкатенацию

Snusmumriken
22.04.2017
00:34:09
Так прост ))
Чтбы продемонстрировать что строка каждый раз уникальна.

Рома
22.04.2017
00:36:15
а попробуй теперь local insert на самом верхнем уровне сделать и снаружи цикла, будет ли разница
я такое когда-то тестил, нет никакой разницы, луа умная очень, зря время не тратит
технически, может и есть разница размером с амебу, но погрешность gettime значительно выше

Snusmumriken
22.04.2017
00:40:35
У gettime сокета практически нет погрешности, инфа сотка.
Да, я пробовал, разница маленькая, но есть.
Когда экспериментировал на lua 5.1, была офигенная разница.

Рома
22.04.2017
00:41:35
Если один и тот же скрипт подряд несколько раз запускать - числа разные будут, я об этом

Snusmumriken
22.04.2017
00:41:48

Google

Рома
22.04.2017
00:42:48
на руби ещё напиши, если делать нечего, прикола ради
будет тебе 1000 сек разницы, если комп не зависнет

Snusmumriken
22.04.2017
00:44:20
Я пишу на luajit, поэтому меня это особо не касается.
Всё равно кеширую, потому что вызов table.insert из библиотеки, которая подключается другой библиотекой жрёт прилично (на ванильной), инфа сотка.

Плюшка
22.04.2017
00:45:39
на crystal надо писать :D

Snusmumriken
22.04.2017
00:45:52
На haskell, без монад

Рома
22.04.2017
00:46:26
А вот оффтопик js так оптимизировали, что лишний раз вынести локально из объекта - наоборот замедлит, жаль luajit до этого не дошел

Snusmumriken
22.04.2017
00:46:46
И luajit )))
No cashe: 2
Cached: 2

Рома
22.04.2017
00:48:24
На crystal писать не надо, пока на него рельсы не перепишут. Руби === Рельсы, так что без них не нужен

Плюшка
22.04.2017
00:49:41
и еще куча рельсоподобных фреймворков

Snusmumriken
22.04.2017
00:50:03

Плюшка
22.04.2017
00:50:05

Рома
22.04.2017
00:50:19
=== - равно "ветвления"

Snusmumriken
22.04.2017
00:50:21
Боюсь что руби никому без рельсов не нужен, действительно.
Разве что идейным ювелирам-любителям, но они мало на что влияют.
За питон почти всегда платят только если он идёт вместе с django.
Жаваскрипт немыслим без node/jquerry/react и ещё кучи фреймворков.

Рома
22.04.2017
00:53:26
самое сложное в рельсах - activerecord (угадайте кто переписал его на луа), и пока во фреймворке нет чего-то наподобие - значит ему ещё далеко-далеко
js мыслим без реакта, в меня вот проект на реакте кинули - вешаться хочется

Snusmumriken
22.04.2017
00:55:16
Поздравляю :3
Я имею ввиду, что самостоятельный js тоже никому не нужен, нужны фреймворки.

Рома
22.04.2017
00:55:31
не-не, он неплохой, мне лично нравится

Snusmumriken
22.04.2017
00:55:40
Обоснование есть?
Потому что мне не нравится обилием дыр абстракций. Даже в питоне столько нет.
Чтобы что-то сделать быстрым и по-человечески - нужно очень много вкуривать.
Ну, и то что без (довольно кривых и ещё более абстрактно-дырявых) фреймворков ты никому не нужен :3

Google

Рома
22.04.2017
00:55:56
гигантский npm
сделал сборщик всего на свете, он собирает файлики, файл вотчер - есть на npm, на luarocks - врядли есть подобное, любой транслятор с одного языка на другой - есть на npm, файлы гзипать для продакшна - все есть
регекспы - лучше чем родные луашные, легче, чем lua lpeg

Snusmumriken
22.04.2017
00:58:29
Библиотеки то есть. Тебе нравится то, что можно взять готовое, пусть и (иногда - далеко) не самое оптимизированное решение, и сразу его заюзать, вместо велосипедописательства.
Мне этим нравится второй питон. Третий потёк.

Рома
22.04.2017
00:58:31
ООП - благодаря луашеньке вкурил, как правильно делать прототипное ООП, теперь на js для меня в этом плане все почти хорошо
и к тому же нода сильно быстрее питона, зачем тогда писать на питоне, если есть js?
он не сложнее, врядли он хуже

Snusmumriken
22.04.2017
01:00:54
Зачем что-то писать на js, когда есть "регулярно" более быстрая, экономичная и менее жручая луа, где ещё и нулевой оверхед на дёрганье сишных функций через ffi? )))
В ноде это есть, но там десять оболочек вокруг, что рождает тысячи лишних джампов и переключений контекста. Медленна.

Рома
22.04.2017
01:01:27
Потому что на lua пришлось бы писать тысячи вещей, которые есть на npm
а так бы с радостью
а и ещё одно важное-важное!!!!

Snusmumriken
22.04.2017
01:01:58
Ну, щито поделать.
Хех, кстати у меня на работе, в lua (ванильная) встроен v8. Можно дёргать жаваскрипт-код.

Рома
22.04.2017
01:01:58
асинхронность!

Snusmumriken
22.04.2017
01:02:17
Ты знаешь как выглядит асинхронность? Что это такое, то есть.

Рома
22.04.2017
01:02:29
знаю, как она выглядит в ноде
берешь функцию - шлешь в другую функцию, делаешь дальше что хочешь синхронно, а параллельно работает что вызвал
промисы и асинк авейты хорошо, меня колбеки пока устраивают
luvit ради этого щупал - невыносимо сырой, жаль

Snusmumriken
22.04.2017
01:06:01
Это обычный эвентлуп.
Неблокирующие сокеты, например:
local udp = require'socket'.udp()
udp:settimeout(0)
udp:setsockname('*', 9000)
while true do
handler:update() -- обновление потоков, например
local data, ip, port = udp:receivefrom()
while data and ip and port do
handler:send(data, ip, port)
data, ip, port = udp:receivefrom()
end
end
Это всё. Хендлер, например, перенаправляет сообщеньки по потокам, в своём update - неблокирующе слушает потоки пока они что-то не вернут, и отправляет ответку.
TCP выглядит практически аналогично, кстати.

Рома
22.04.2017
01:07:01
while true do

Google

Рома
22.04.2017
01:07:06
дальше не пустит

Snusmumriken
22.04.2017
01:07:40
Хендлер, чувак )))
Всё в хендлере. Как он работает я описал, просто это не влезет в короткий пример

Рома
22.04.2017
01:07:55
таки яж про асинхронность

Snusmumriken
22.04.2017
01:08:03
Я ж про асинхронность.
Хендлер тоже придётся делать асинхронным и неблокирующим, только там приём со списка потоков (((

Рома
22.04.2017
01:08:33
например, получить две страницы параллельно
я смотрел примеры, все это не то, зачем так делать, если для этого есть нода

Snusmumriken
22.04.2017
01:08:58
Отправить запрос на пару страниц одновременно. Потоки самостоятельно вышлют ответку.

Рома
22.04.2017
01:09:33
ага, по udp?
что-то не понял

Snusmumriken
22.04.2017
01:11:44
Произвольно, по tcp или udp.
Ну допустим поток выглядит так:
threadfunc(data, ip, port)
page = process(data)
require'socket'.udp():sendto(page, ip, port)
end
По TCP похоже, только вместо ip/port присылается sock, и sock:send(page).
Параллельно.

Admin
ERROR: S client not available

Рома
22.04.2017
01:12:04
в общем есть либивент и не либивент, и сравнивать их некорректно, livevent в lua - luvit - никуда не катит, отдельный себе от луа мирок заделали несовместимый
получить это receive, а sendto это отправить, я о первом, он востребованей все таки

Snusmumriken
22.04.2017
01:14:29
Ну, ты просто любишь оболочки :3
А я люблю конечные автоматы.
И сделал несколько библиотек под свои нужды.
Слушай скажи мне, чем нода так крута?
На луа, можно написать простой аналог ноды, который будет выполнять все функции, ради которых ты пришёл в ноду, за несколько часов.
Правда да, количество библиотек ограничено. Точнее, с luajit - неограничено, ибо ffi и подрубание совершенно произвольных dll/so. Но не так сахарно, пока не сделаешь оболочку вокруг динамической либы.
Функция треда - представь что она выполняется на произвольном процессоре, с нерасшаренной памятью между тредами.
Кстати, память между тредами ноды общая или раздельная? Я не в курсе.


Рома
22.04.2017
01:15:33
> Слушай скажи мне, чем нода так крута?
> На луа, можно написать простой аналог ноды
Кипятком от счастья писался бы, наступи такой день
нода ворвалась в 2009 по-моему, и стала такой супер известной именно благодаря этому либивенту или как его там, в других языках тоже пытались, но вышло не очень
память общая конечно!
раздельная это слишком просто

Google

Snusmumriken
22.04.2017
01:19:19
Не а.
Факт наличия общей памяти между потоками, говорит нам что потоки не совсем настоящие. Это или лёгкие потоки, или корутины.
Попробуй загрузить нодой 100% своего многоядерного процессора.

Рома
22.04.2017
01:19:45
конечно не настоящие

Snusmumriken
22.04.2017
01:19:49
Оу.

Рома
22.04.2017
01:19:53
в этом вся прелесть!

Snusmumriken
22.04.2017
01:19:59
Это кошмар.

Рома
22.04.2017
01:20:00
она волшебство делает

Snusmumriken
22.04.2017
01:20:43
Это чудовищный кошмар. Я покупал многоядерный сервер чтобы запустить на нём одно единственное приложение, которое должно быть ОЧЕНЬ быстрым. И жрать десятки гигабайт памяти. И если где-то упал поток - мне проще его перезагрузить, но чтобы остальные потоки остались живы, даже если они обрабатываются последние пол часа.
Какой мне смысл от такого сервера, если только одно ядро задействованно?

Рома
22.04.2017
01:22:22
это от задачи зависит:
1) нода мне нужна для сборщика файлов - потому что npm такой богат
2) импорт с чужих сайтов на наш стартапчик - как бы луа грузила 100 страниц параллельно?
3) все, больше она не пригождалась особо

Snusmumriken
22.04.2017
01:22:48
Нет, можно запустить несколько нод одновременно: главная управляющая нода, которая пайпами или сокетами общается с другими нодами, загружает их задачами и собирает решения, отправляя назад собранное. Но блин.

Рома
22.04.2017
01:22:56
никто и не говорит, что сервер на ноде - это умно

Snusmumriken
22.04.2017
01:23:16
Сервер на ноде - единственное для чего я бы ставил ноду (((

Рома
22.04.2017
01:24:43
> Нет, можно запустить несколько нод одновременно:
согласись, код вырос бы раз в 10 и отлаживать импорт - был бы ад

Snusmumriken
22.04.2017
01:24:53
Но даже не сервер, а, например, обработчик.
Мне надо хитро заархивировать и тут же послать на сервер все 100500 терабайт данных.
В один поток это будет очень медленно. Ну блин, я просто против общей памяти в многопоточности, потому что это плодит ошибки, особенно своим жутким комфортом, когда одни и те же данные изменяются "асинхронно", а потом чем-то другим так же асинхронно считываются, и от этого зависит результат работы потока. Имхо, это плацдарм для ошибок, которые могут возникнуть из-за кого-то, кто слишком быстро закончил работу, и попытался считать ещё не существующие данные.
Думаю, тут есть механизмы защиты от этого, но тем не менее.

Рома
22.04.2017
01:29:03
Там не механизмы защиты от гонки данных, там таких понятий не существует, ибо волшебство

Snusmumriken
22.04.2017
01:29:18
А, нода умеет в дочерние процессы. Уже чуть лучше. И память разделённая, и процессоров много.
В общем, на твоём месте, я бы почитал
а) много хвалебной фигни
б) много нейтральной фигни
в) много хейтерствующей фигни
Выделил бы всё ценное, и проверил бы всю магию на предмет магичности.
Вот тебе пример хейтерства на ноду, и я даже понимаю почему:
https://habrahabr.ru/post/129640/

Рома
22.04.2017
01:37:54
у меня тут война с реактом, но потом почитаю. Срать на чье-то мнение)) — верный подход, главное что нода решает задачи, которые другие языки не могут, точнее могут, но разобраться долго и трудно
хлелебная фигня, нейтральная, — фигня же
http://stackoverflow.com/questions/5795419/lua-socket-asynchronous-calls
я это имею в виду

Snusmumriken
22.04.2017
01:39:26
Хех, асм может всё что и нода (и даже больше), но в сто тысяч раз быстрее.
Правда, писать в сто раз медленнее. Небольшие но постоянно использующиеся программы на асме очень сильно экономят время жизни.