Serezha
точка с запятой какбе говорит что определение и блок за ней - разные сущности?
fgntfg
Строго говоря да.
Dima
что-то непонятное.
Serezha
надо смотреть в препроцессор имхо
Dima
я всегда считал C яызком без таких заковык.
Max
это обычный С
Max
https://en.cppreference.com/w/c/language/function_definition
fgntfg
Такое ощущение что 3 и 4 строки перепутали
Serezha
я вот напрягся на паблик а оказывается это просто
Serezha
#define public /* PUBLIC FUNCTION */
Dima
взял отсюда http://www.greenwoodsoftware.com/less/download.html
fgntfg
Dima
старый синтксис C
Dima
Super
Super
сделал тест с base64 на луа и на чистом си
Super
Super
т.е. однозначно есть смысл использовать
Alexey
В lua строки не изменяемые и поэтому для любого шифра нужно перераспредилять память 2 раза.
Для формирования результата и далее в lua vm
Serezha
те 10 млн замен gsub отработало за 20 сек? впечатляет. я думал медленнее на порядки будет
Serezha
я бы как раз сделал вывод - что обе функции БОЛЕЕ ЧЕМ быстрые а раз так зачем возиться с сишным кодом? сколько картинок может отдать сервер за секунду?
Super
ну у меня в планах делать тысячи сайтов с миллионами страниц. в теории если боты будут ходить везде, то может быть очень много запросов.
Super
поисковый бот яндекса например очень жесток и не реагирует на ограничения
Super
в принципе можно и так оставить, взять мой xor_convert + сишный бейс64, если что потом переделать
Super
я еще одну теорию хотел проверить - сишный аес - возможно он может оказаться быстрее чем мой xor_convert
Super
т.к. процессор может использовать встроенную оптимизацию aes инструкций
Super
процессор на сервере кстати 1 - d-1531
Super
зато у луа регулярки ищут переменные внутри
Super
т.е. строку для регулярки надо готовить, там не должно доллара быть и еще много чего
Snusmumriken
Хм, нет же. У луа можно использовать любые символы в строках, ты в регулярном выражении потом пишешь, допустим: str:gmatch("(.-)%.") для поиска всех предложений, заканчивающихся точками. Поиск символов долларов так же экранируется, но и без этого отлично.
Super
а что использовать, ngx.re.gsub?
Snusmumriken
Для чего?
Snusmumriken
Стандартные регулярки спокойно работают со спецсимволами, и их можно использовать в самом выражении, если экранировать знаком процента.
Super
ну смотри, у тебя на входе целая html страница
Super
тебе надо там какой-нибудь блок заменить на другой
Super
тебе сначала придется заэкранировать целую кучу символов опасных - это уже время
Snusmumriken
Не, ты чего.
Super
а как правильно?
Super
очень интересный результат с aes
Super
xor_convert: 11 AES: 2
Snusmumriken
Условно, заменить все содержимые тегов tagname.
page = page:gsub("<tagname.->(.-)</tagname>", "new content")
Super
и это будет работать быстрее, чем pcre либа на си?
Snusmumriken
Ага.
Snusmumriken
Потому что регулярки в луа и так на си, но не pcre а попроще, за счёт чего быстрее.
Super
Super
Super
т.е. аес оказался прилично так быстрее
Snusmumriken
Вот вариант с подобной фигнёй может быть медленнее, потому что тут вызов луёвых функций с сишной стороны.
page = page:gsub(
"<tagname.->(.-)</tagname>",
function(content)
return content .. ' yo'
end
)
Super
на удивление
Super
понял, ну я позже проведу тесты, но это не так просто
Super
но вот с аес интересный результат
Super
т.е. можно просто юзать обычный aes и затем его добивать сишным бейс64
Super
я так понимаю сама операция сложнее, но процессоры ее любят
Snusmumriken
Ну да, если использовать вшитые в проц инструкции, будет супер-пупер быстро.
Snusmumriken
С частью крипты такая же ситуация. Вручную дешифровать всякие tls — такое себе занятие.
Super
я попробую 300 тыс операций сделать, чтобы уж точно увидеть разницу
Super
xor_convert: 32 AES: 7
Super
а вру, это 3 млн )
Super
ну вроде норм, аес рулит получается
Egor
Приветы. есть ли какой-то более красивый и немногословный способ.
arr = {}
arr["test"] = {}
if(arr["test"]["val"] == nil) then
arr["test"]["val"] = 1
else
arr["test"]["val"] = arr["test"]["val"]+300
end
тут нужно прибавить какое-то значение в arr["test"]["val"], или если нету такого еще элемента, то добавить новое значение
Snusmumriken
Snusmumriken
И да, это не arr в плане "массив", а tbl в плане "таблица" : )
Вилби
😁
Snusmumriken
Ух, почти правильно. Ща.
Snusmumriken
Карочи, процессор исполняет машинный код. Машинный код это всякие инструкции типа "сдвинуть регистр такой-то на N, записать в такую-то ячейку число, прибавить к нему M а потом вычесть E, а ещё сдвинуть курсор на третью ячейку и перенести туда данные из вон той ячейки". Вот этим занимаются процессоры.
Компилятор — переводит текст твоей программы в вот такой вот машинный код. Ты пишешь "высокоуровневые" вещи, которые потом разворачиваются на миллиард простых процессорных команд, в результате, твой код исполняется напрямую _на процессоре_.
Интерпретатор — это как проигрыватель для кода. Это уже скомпилированная программа для данного процессора, которая во время работы читает файл, разбирает в нём команды и исполняет их. Точно так же как твой видеопроигрыватель показывает тебе мультик. Проигрыватель как интерпретатор, мультик как код.
Snusmumriken
Итак, компилятор это переводчик с одного языка на другой (с человеческого на машинный), чтобы процессор мог его проиграть.
Интерпретатор — это программа-проигрыватель для кода. Проигрывается на процессоре и проигрывает текст кода из файла одновременно : )
Snusmumriken
Вилби
Snusmumriken
Нене, давай чотко : )
Вилби
🤔
Snusmumriken
На самом деле, я и сам не очень представляю что эта фигня значит в этом контексте, ибо есть статическая линковка библиотек и динамическая. Первое — когда библиотеку впаивают в код в процессе компиляции, а второе — когда подключают её в процессе исполнения.
А ещё есть статическая типизация и динамическая. Статическая как "когда ты определил переменную и её тип, то всё, больше не можешь его менять", а динамическая "что последним присвоил переменной, того она и типа".
В данном случае, вероятно, компиляция статична потому что на выходе статичный бинарь линейно исполняющегося кода, он проверен компилятором, все кастомные типы данных вытащены в шаблончик для них, а интерпретаторы интерпретируют условно по одной команде, поэтому определяют все внутренние параметры, классы, размечают объекты — в процессе исполнения.
fgntfg
Компилятор почти правильно
fgntfg
там ещё всякие штуки есть
fgntfg
но кому это сейчас нужно?
Вилби
На самом деле, я и сам не очень представляю что эта фигня значит в этом контексте, ибо есть статическая линковка библиотек и динамическая. Первое — когда библиотеку впаивают в код в процессе компиляции, а второе — когда подключают её в процессе исполнения.
А ещё есть статическая типизация и динамическая. Статическая как "когда ты определил переменную и её тип, то всё, больше не можешь его менять", а динамическая "что последним присвоил переменной, того она и типа".
В данном случае, вероятно, компиляция статична потому что на выходе статичный бинарь линейно исполняющегося кода, он проверен компилятором, все кастомные типы данных вытащены в шаблончик для них, а интерпретаторы интерпретируют условно по одной команде, поэтому определяют все внутренние параметры, классы, размечают объекты — в процессе исполнения.
Ну принцип теперь понятен очень интересно. Вобщем любой язык имеет свою библиотеку, базу слов которые имеют свои значения. Выучив эти слова, и далее изучив их применение можно понять как применять их. Так?
Вилби
То есть, сначала изучать по чуть чуть команды? Значения? И применять их?
Вилби
Просто как то учебники написаны, там обычно я посмотрел значения слов не расписаны. Не пишут зачем тот слеш, или ==. А где узнать эти значения непонятно...
fgntfg
Я бы сказал, что все начинается с задачи.
Сначала есть задача.
Потом появляется алгоритм ее решения.
Этот алгоритм решается/выполняется функциями языка.