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
У тебя есть пара лет свободного времени на развлекалово для себя лично? ))
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
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
Saphire
Snusmumriken
Быстрее "та хрень". Во много раз, особенно если ты посимвольно перебираешь.
Понимаешь ли в чём фигня. Сишной стороне плевать на "иммутабельность" строк. Оно использует свои методы, считывает энный символ без создания новой строки, и всё такое.
Dika
Saphire
Ура указателям :3
Snusmumriken
Что за тема?
Глянь чуть-чуть выше.
Буквально на одно сообщение.
Dika