Snusmumriken
Не слишком сложная задача сама по себе
У меня где-то болтается. Приеду домой - скину
Snusmumriken
На самом деле поверх lanes интересно было бы построить work stealing шедулер
Вот тут валяется моя платформа для серверных приложений под вендой. Типа сборище либ + автоматический многопоточный шедулер. Работает так же, как работало бы в один поток, но в кучу потоков.
Snusmumriken
Roman
Почему по умолчанию зачастую в Makefile оптимизация -O2? (luajit, openresty в частности) С -O3 быстрее ведь работает?
mva
нет
mva
во-первых, не всегда быстрее
mva
во-вторых, иногда менее стабильно
mva
в-третьих, для некоторых архитектур раньше -O3 оптимизация могла всё сломать
mva
в-четвёртых, с -O3 дебаг практически невозможен
fgntfg
Быстрый хеловорд на lua
fgntfg
Похоже на название статьи
Roman
https://github.com/mpx/lua-cjson/blob/master/Makefile
Roman
вон cjson'у можно
Roman
я на рести в highloadcup 20-м сегодня был, но сместили, гоферы ████, надо вернуть обратно, на оптимизацию надеюсь
Snusmumriken
Гофер всё ещё где-то используется? Это же жутко древняя фигня, древнее http.
Snusmumriken
А, у них разница в один год, гофер - 91, хттп - 92, хех. Но гофер продержался всего два года.
Snusmumriken
Ох ёпт, а я думал, это протокол поиска документов (gopher) : )
Snusmumriken
Ну, имхо, любители языка "го" - гошники/гоёбы/гуглофаги. Гоферами странно называть, хм.
Snusmumriken
Скорее, не старик а xkcd-фаг. Я гуглил это. А потом загуглил ещё 100500 древних протоколов, и даже частично разобрал их, чтобы осознать, зачем они делали именно так, чтобы использовать, в случае чего.
Snusmumriken
Поздно, у меня уже есть "блог" ))
Snusmumriken
Но тебе там делать нечего, узкая специализация
Roman
Есть идеи как код оптимизировать очень неочевидным образом? Все очевидные оптимизации есть, но надо больше скорости, в голову куча бредовых идей лезет. Например: есть табличка users = table.new(0, 100200) - 100200 ключей id, не просто массивных ключей, потому что id могут быть не подряд. 100200 число вычислено опытным путем. Что если эту таблицу разбить на 10 более мелких и составить условия - если id меньше 10000 в первую, меньше 20000 во вторую и т.д, думаете, быстрее станет?
Saphire
Гм
Saphire
Если интерпретаторы и всякое тут можно обсуждать... стоит ли пытаться спрашивать о переходе с luaj на jnlua?
Saphire
Первое - ВМ Луа переписанная в стиле явы, с соответствующими прелестями и всяким таки, а jnlua - по сути lua C api.
Saphire
Ну и мне надо как-то понять, как работать с jnlua и/или lua C API.
Saphire
Так я из Java проги с Lua работаю.
Saphire
При том, что прослойка между явой и луа, которую я использую, тупо выдает доступ к си апи.
Saphire
Без свистелок.
Saphire
Ну и по сути, работаю с си апи.
Saphire
Ну в LuaJ есть фигня LuaValue
Saphire
Именна та самая, против которой так негодуют доки по C API
Snusmumriken
Хм. На жаве не пишу, на сишке - все довольно просто. Можешь посмотреть исходник самой простой в мире либы, чтобы понять происходящее. https://github.com/starwing/luautf8/blob/master/lutf8lib.c
Alexander
Всем привет! Ищем толковых программистов на Lua, готовых конструктивно работать с легаси кодом. Парттайм, фуллтайм, удалёнка. Писать в личку.
mva
> конструктивно работать с легаси кодом. 😃
Saphire
А можно переписать всё? :р
Snusmumriken
А можно переписать всё? :р
Думаю что за это не заплатят, потому что уже есть рабочая система ))
Snusmumriken
У тебя есть пара лет свободного времени на развлекалово для себя лично? ))
Alexander
А можно переписать всё? :р
одним из критериев при найме будет правильность понимания кандидатом слов "конструктивно работать" :P
Saphire
Разобраться, что вообще там нужно, что совсем ужас, и разгребать?
Alexander
примерно так. на деле там именно легаси-код, а не авгиевы конюшни, так что всё сносно
Alexander
с подходящим кандидатом договоримся.
Alexander
без проблем, не пиши ;)
Alexander
чтобы был повод для интеллигентной беседы с умными и образованными людьми, конечно же
mva
@agladysh ну, справедливости ради @thedude скорее прав чем нет. При прочих равных удобнее принимать решение когда знаешь на что можешь рассчитывать. Вот представь, что я (не лично я, а сферический в вакууме) мегаофигенный и во всём подхожу. Ты готов мне платить, к примеру, 10k$/мес?
Alexander
не конкретно на этом проекте, но скорее да чем нет
Alexander
конкретно здесь, конечно, вилка ниже
Alexander
но надо понимать, что в каждом объявлении о найме
Alexander
уже заложен фильтр на кандидатов :)
Alexander
:)
Alexander
как мы видим, фильтр отлично работает
vvzvlad
Хах. Можно обсуждать эффективность, но работает — факт.
Anonymous
посоны, зацените код, чё добавить, чё убрать
Anonymous
https://pastebin.com/Ke4uEsLn
Snusmumriken
Вот это перепиши под табличку.
Snusmumriken
Типа local s = { msg.type, " sip:", to, " sip/2.0\n", ... } Потом table.concat(s) И то же самое с любым соединением большого количества строчек. Учитывай что строки в луа - иммутабельны.
Snusmumriken
В целом, несколько решений довольно чудовищны, но я не знаю чем их заменить, ибо не знаю sip-протоколов. Но для средне-интырпрайзного уровня - норм.
Saphire
Можно еще сделать более generic вариант и делать таблички с свойствами сообщения и т.д. И парсить их нормально, а не через sub.
Saphire
Но больше вот тут интересно... if string.sub(data[i], 1, 5) == 'From:' then from = string.sub(data[i], 7) end if string.sub(data[i], 1, 3) == 'To:' then to = string.sub(data[i], 5) end if string.sub(data[i], 1, 8) == 'Call-ID:' then callid = string.sub(data[i], 10) end if string.sub(data[i], 1, 5) == 'CSeq:' then cseq = string.sub(data[i], 7) end if string.sub(data[i], 1, 4) == 'Via:' then via = string.sub(data[i], 6) end Длинны меняются свойств?
Saphire
Упс, там от символа и до конца строки, простите.
Snusmumriken
Да, это как раз одно из чудовищных решений. Тут плодится бешеное количество бессмысленных и беспощадных строк. Но я не могу привести конкретный пример дженерика, ибо нужно ещё за что-то зацепиться. Но общая суть сводится к: local t = {} for line in data:lines() do local s, e = line:find'^(.-):' -- эта хрень очень быстрая if s and e < 10 then -- нашлось в начале строки local key, value = line:match'(.-):(.*)' t[key] = value end end
Saphire
они вроде там по виду Key: value1,value2,value3
Snusmumriken
Можно и так. Ну в общем, суть примерно ясна. С другой стороны, в интырпрайзе подобная чудовищность - это нормально. А то что написано в лоб по-китайски - типа так даже лучше, ибо человека который так пишет - легко заменить: всё что он катает - просто до опупения.
Saphire
header = "header-name" HCOLON header-value *(COMMA header-value)
Saphire
Ну таки да
Saphire
https://tools.ietf.org/html/rfc3261#section-7.3
Saphire
Обожаю RFCшки
Snusmumriken
Обожаю стандарты.
Saphire
^
Saphire
" Implementations MUST be able to process multiple header field rows with the same name in any combination of the single-value-per-line or comma-separated value forms."
Saphire
Что собственно очень пролетает в вышеописаном коде.
Saphire
(ну в оригинальном)
Snusmumriken
Ну, у меня похожая (но проще) фигня написана так. Это исполнитель команд редиса. Посылаем строчку, принимаем строчку/циферку/массив. https://pastebin.com/QJy7Evuy
Snusmumriken
Быстрее "та хрень". Во много раз, особенно если ты посимвольно перебираешь. Понимаешь ли в чём фигня. Сишной стороне плевать на "иммутабельность" строк. Оно использует свои методы, считывает энный символ без создания новой строки, и всё такое.
Saphire
Ура указателям :3
Snusmumriken
Что за тема?
Глянь чуть-чуть выше. Буквально на одно сообщение.
Dika
Глянь чуть-чуть выше. Буквально на одно сообщение.
а? Я про подсветку синтаксиса на скрине.