
Рома
22.04.2017
01:40:55
Asm это ассамблер?)

Плюшка
22.04.2017
01:41:41

Snusmumriken
22.04.2017
01:42:16
Потому что ты больше пишешь на js чем на луа.
И знаешь как решать проблемы методами js, а не луа.
Или просто любитель использовать библиотеки: один вызов сторонне-библиотечной функции может быть внутри пятью гигабайтами малопонятной простыни, которую ты не писал, потому что её написали за тебя.
Да, асм это ассамблер )))

Рома
22.04.2017
01:43:47
а как же твой пример jquery/react? вот это я понимаю ущербность, хоть на 5ГБ, но 50-100кб непонятно чего, которое жрет неизвестно сколько

Google

Плюшка
22.04.2017
01:43:48

Рома
22.04.2017
01:44:42
вне браузера не важно сколько, главное что время твоей жизни экономит

Плюшка
22.04.2017
01:45:06
Не факт, что на асме получится быстрее, чем на Си с -O3

Рома
22.04.2017
01:45:21
скрин кидал - я атомом не пользовался, а на скрине Снусмумрика вроде как атом?

Snusmumriken
22.04.2017
01:45:34
Конечно ))
А на ноде можно писать если уметь писать на js.
А на луа можно писать если уметь писать на луа.
Асм прост. Его можно освоить за вечер, и остаток жизни потратить на изобретение всего того чем мы пользуемся в ноде и луа.
На асме будет работать быстрее, если мы умнее тех кто писал сишный компилятор.

Рома
22.04.2017
01:46:12
> Асм прост. Его можно освоить за вечер, и остаток жизни потратить на изобретение всего того чем мы пользуемся в ноде и луа.
Изобрести ноду и луа?

Snusmumriken
22.04.2017
01:46:17
Зато в десятки и сотни тысяч раз быстрее )))
Правда, количество фич будет урезано, и мы будем компилить js в полноценный машинный код.

Плюшка
22.04.2017
01:47:41
Performance Comparison C vs. Lua vs. LuaJIT vs. Java | Elmar Klausmeier's Weblog
https://eklausmeier.wordpress.com/2016/04/05/performance-comparison-c-vs-lua-vs-luajit-vs-java/
К слову

Рома
22.04.2017
01:48:12
c vs asm дайте лучше
не могу найти

Google

Snusmumriken
22.04.2017
01:48:27
К слову
Устаревшая информация.
jit 2.1.0 получил резкий буст. Правда, сейчас в бете.

Плюшка
22.04.2017
01:49:58
Ну да, и я все равно не вижу десятков и сотен тысяч раз

Snusmumriken
22.04.2017
01:50:42
Ну, я утрирую, конечно. Но не очень сильно. Плюс я про изобретение luaJit на асме! Шоб прям супер-пупер, ни одной лишней процессорной команды!

Рома
22.04.2017
01:52:07
давайте лучше создавать для луа то, чего не хватает, скорости хватает, никто не жалуется

Плюшка
22.04.2017
01:52:24
И все равно скорее всего получится менее оптимальный код, чем сгенерированный шлангом каким-нибудь)

Snusmumriken
22.04.2017
01:52:51
Мне в ванильной не хватает скорости. Надоело двое суток ждать пока банк не зальётся данными.
И микросервисы мои хавают не 1.5млн запросов в секунду, а всего лишь 30-40к. Слоупочная ванильная луа.

Рома
22.04.2017
01:53:17
зачем нужна ванильная?

Плюшка
22.04.2017
01:53:40
Это ж какое самомнение надо иметь, чтоб считать себя умнее разработчиков компилятора, которые вложили в оптимизацию тысячи человекочасов))

Snusmumriken
22.04.2017
01:53:46
Ну, у меня на работе, в базе данных, сидит ванильная. А разрабам базы данных лень портировать всё под жыт.

Рома
22.04.2017
01:53:54
портировать?


Snusmumriken
22.04.2017
01:54:15
Переписать куски ядра под жыт. Там много переписывать. Инфа сотка. И совместимость с частью старых скриптов поедет: например, lanes-многопоточка. Некоторые библиотеки работают только конкретной версией на жыте, а скриптов - не одна сотня мегабайт, и все нужны. Тут разработка сильно не один год длится.
Это ж какое самомнение надо иметь, чтоб считать себя умнее разработчиков компилятора, которые вложили в оптимизацию тысячи человекочасов))
Человекочасы - это миф. Производительность просто хорошего и отличного программистов различаются более чем в десять раз, а в сравнении отличного со средним - в тридцать-сорок.
Но ты смотри: те кто писал компилятор такие умные и крутые потому, что они сделали компилятор универсальным. Для задач очень разного рода. Он не заточен под что-то одно конкретное, иначе был бы перекос в скорости где-то ещё. Если заточить приложулю на асме под одну конкретную задачу (например луажыт))) - это в любом случае будет быстрее чем труд неимоверно умных людей, которые в тысячу раз умнее меня. Просто потому что универсальность = снижение скорости.
И да, предложение "переписать всё на асм" было шутливым. Это я на всякий случай.
Всё таки нет времени.


Рома
22.04.2017
02:03:37
Мне вот никто не запрещает считать себя отличным программистом (я так, правда, не думаю), и вот один интересный факт: так себе чувак сделает быстрее, чем отличный ленивый программист
Пока ботаны пишут компиляторы, боги кода пишут сообщеньки в чатике

Snusmumriken
22.04.2017
02:04:44
Ох, отличный программист не может быть ленивым. Это взаимоисключающие понятия.
Коэффициент отличности = "навыки" * "активность"
> Мне вот никто не запрещает считать себя отличным программистом
Я запрещаю ))
Лучше считай меня отличным программистом, мне будет чуть-чуть приятно ))
Боюсь таки что большая часть основных вещей (особенно традиционно-классических) сделаны отличными программистами.
Слушай, как часто ты строишь математические модели своего ПО? Ну, или хотя бы UML-диаграммы, и вообще, сначала рисуешь на бумажке, там же оптимизируешь и только потом - пишешь программку?
Нет, это не критерий отличности и способ потешить чсв, мне просто интересно.

Рома
22.04.2017
02:09:32
Пишу код, просто надо понятный код писать, и тогда все хорошо
Как критерий отличности - гитхаб с человеко-полезными хорошими вещами

Google

Snusmumriken
22.04.2017
02:10:29
Ну, у меня в голове не помещается больше чем три-четыре объекта.
Как только появляется взаимодействие сложнее чем три-четыре штуки - рисую и строю матмодели, чтобы хотя бы не забыть, и заодно проверить гипотезу, что "эта фигня не упадёт на высокой загрузке".

Vlad
22.04.2017
02:11:25
два кофе
этому программисту

Рома
22.04.2017
02:11:53
Когда читаешь книгу - видишь не буквы, а людей, пейзажи, и такое всякое, а когда читаешь код - видишь как раз эти модели, эти взаимосвязи, как живой организм

Snusmumriken
22.04.2017
02:12:53
Их много, знаешь ли : 3
За всеми не уследишь. И каждый кусок не оттестируешь.
Просто нарисовать и закодить быстрее, чем переключаясь между блоками вспоминать, написал ли ты эту штуку или это только предстоит.

Рома
22.04.2017
02:13:45
модульность.


Snusmumriken
22.04.2017
02:15:14
Да, модульность.
Переключаясь между блоками = переключаясь между модулями.
Только если ты не нарисовал и не задокументировал всё возможное - до тебя вдруг доходит: "Надо в вызываемом тут модуле дописать эту фигню, пойду допишу чтобы не забыть", "Фу, чёт медленно, надо переписать нафиг" и "Хм, я дописал вызываемую тут фигню, перед тем как переключитья сюда и всё переписывать?"
Я пишу понятно если рисую. Потому что не переключаясь между контекстами, имею возможность делать сразу законченные вещи, которые гарантированно работают сразу и правильно. Юнит-тестирование тоже хорошо, потому что ты сразу знаешь весь спектр работ модуля: он не будет дописываться в процессе, ибо документирован, и его матмодель показывает что всё не так плохо как могло бы быть.
Попробуй это дело, когда начнёшь возиться с чем-то действительно большим, а не "три строчки на ноде".
Это твой аналог switch-case?
Знаешь с какой проблемой столкнёшься?
У тебя аргументы, кейсы и операции - в хеш-таблице. Стрёмный порядок при итерации.
Свитч-кейс должен использоваться исключительно с целочисленными ключами таблиц.


Рома
22.04.2017
02:53:05
for i = 1, #arg do
for j = 1, #cas do
вот же в коде
таки сори, есть pairs

Snusmumriken
22.04.2017
02:53:54
Только после систематизации.
Посмотри, систематизация - переделывает строковые ключи в целочисленные.

Рома
22.04.2017
02:53:56
будет в следующей версии


Snusmumriken
22.04.2017
02:57:21
Этот вариант свитч-кейса технически хуже чем
a = a and b or c and d, потому что отсутствуют великолепные ленивые вычисления, и весь кейс вычисляется единомоментно. Но возможно проще для использования/восприятия непривыкшему человеку.
Имхо, кстати, забавнее такой вариант:
handler = {}
function handler['yo'](data, ip, port) ... end
function handler['chiwawa'](data, ip, port) ... end
function handler['ahahahahaha'](data, msg) ... end
for i, v in ipairs(msgs) do
local type = v.type
handler[type](v.data, v.ip, v.port)
end
Чот такое. Типа, 100500 обработчиков под разнотипне сообщения, в зависимости от внешних обстоятельств. В данном случае - в зависимости от типа. Тот же свитч-кейс. Правда, нельзя пихать логические выражения. Этой же фигнёй сокращается десять тысяч if-then-else'оф.
Вроде бы простая методика, но эффективная. И можно динамически добавлять новые if-else, заполняя ключи таблички.
О, кстати, ещё больше запитонил свою ООП-либу, и обрезал мелочи. Довольно долго ей пользовался, и прилично думал о краткости и комфорте пользования. Сейчас оно близко к совершенству.
https://pastebin.com/9eDU94Ua
Референс внутре.


Рома
22.04.2017
05:12:53
локальный smt быстрее глобального, проверил, аж на 7 мс за 1000000000 итераций

Snusmumriken
22.04.2017
05:16:36
Ох, какой ты милый :3
Тут для сокращения объёма текста, расслабься.
Лучше восхитись краткостью и ясностью вкупе с мощью и комфортом.

Рома
22.04.2017
05:19:40
я и восхищаюсь!
наследовать то тут как?

Google

Snusmumriken
22.04.2017
05:20:19
В примере написано.
Наследуем класс Bar от Foo.

Рома
22.04.2017
05:20:22
cl = {}, {}
cl — таблица
cl.__index = cl — индекс — рекурсия

Snusmumriken
22.04.2017
05:20:44
Не рекурсия, подумай лучше.

Admin
ERROR: S client not available

Рома
22.04.2017
05:21:16
smt(cl, mt)
вроде все четко
но как-то слишком компактно, больно подозрительно

Snusmumriken
22.04.2017
05:22:52
Ехехехе, просто я читак.
Тут нет рекурсии, зато за счёт cl.__index = cl, есть возможность прописывать
function Foo.__add(a, b) ... end
То есть, добавлять метаметоды сразу в класс.

Рома
22.04.2017
05:23:53
эх, я к руби привык просто
методы класса, методы инстанса, приватные методы

Snusmumriken
22.04.2017
05:24:46
Приватные не нужны.
Захотят - вскроют. Лучше - локальные функции в модуле, так же как тут - функция C.

Рома
22.04.2017
05:24:55
для чисто просто методов эта реализация клевая, мунскриптная все же мощнее

Snusmumriken
22.04.2017
05:25:10
А что там? Миксины?

Рома
22.04.2017
05:25:25
там отдельно таблица для класса, отдельно для объектов

Snusmumriken
22.04.2017
05:25:47
Хм. В чём прикол?
В чём объективная необходимость?

Рома
22.04.2017
05:26:01
ну тк, методы класса, методы инстанса

Snusmumriken
22.04.2017
05:26:21
Методы инстанса - в чём разница?
Длинная процедура инициализации объекта?
Тут есть Class:init() - возвращает инстанс.

Рома
22.04.2017
05:26:36
Post.all() - все посты
Post.take.all - поле "all" у поста, вдруг такое есть

Snusmumriken
22.04.2017
05:27:24
А, типа лишние цепочечные методы через извращенскую перегрузку __index.

Рома
22.04.2017
05:27:35
клевая перегрузка

Google

Рома
22.04.2017
05:27:59
я очень долго делал, не надо, там правда так: Post\take!.column выходит

Snusmumriken
22.04.2017
05:28:04
Неочевидно. Хотя кому как, тем кто сидит на мунскрипте мб норм.
На тему "если есть такое поле" - rawget(table, field).
rawget/rawset - две функции взаимодействия с таблицами, не дёргая метаметоды. То есть, добровольно-принудительно.

Рома
22.04.2017
05:29:13
это значение rawget, а ещё есть методы инстанса, которые через мета
да ладно, годная реализация, но не на все хватит


Snusmumriken
22.04.2017
05:30:17
Ой всё, сложно )))
В реальной жизни такое редко необходимо.
Хотелки - хотелками, и сахар сахаром, но слишком много сахара - схлопочешь диабет.
Моя задача дать свободу. Вдруг пользователь захочет перегрузить один из стандартных методов класса.
Эту фигню можно перегружать, а запрещённых полей немного:
Super, init и Type,
Редко вызываемые поля - с большой буквы.
Ну, прост сахар в краткости и в отсутствии необходимости помнить что и как, лепить по наитию и чтобы сразу получалось )))
Поэтому же, например, порядок указания имени класса и родителя не важен. А можно и без них. А можно и без метода init, просто вызывать класс как функцию и получать пустой объект. Ваще пофиг. И можно return'ить значения из инициализационной функции, и они пойдут следующими после объекта при вызове класса. Это не очень очевидно, но удобно, и по наитию такое можно случайно сделать и приятно удивиться что прокатило.
Вот такой сахар я люблю.


Рома
22.04.2017
05:33:18
а может ты блог какой ведешь? любишь все время какие-то куски кода генерировать, вдруг когда-нибудь что-то полезное выдашь

Snusmumriken
22.04.2017
05:33:32
Хех, у меня есть pastebin.
Думал писать на хабр, но пока лень.

Рома
22.04.2017
05:33:45
луа комьюнити не хватает
думаю об этом, т.к люблю сайтики писать, вот и думаю и думаю

Snusmumriken
22.04.2017
05:34:13
>вдруг когда-нибудь что-то полезное выдашь
Мне нравится твой оптимизм!
Прости, не удержался :3
думаю об этом, т.к люблю сайтики писать, вот и думаю и думаю
Вот, смотри какая смешная полезняшка:
https://pastebin.com/6K7VWaxZ
Массивная либа. И тут же есть реализация смешных стрелочных функций с кешированием (чтобы не пересоздавать каждый раз).
Тут, правда, где-то мелкая ошибка в бинарном поиске, надо исправить.

Рома
22.04.2017
05:45:55
Вот, например, у класса-модели есть метод auth - User.auth(...) который параметры задает, или контроллер PageController.before_action = function, а у инстансов совсем другое