Roman
нет, не для этого, чтобы когда файл по сети приходил и в таблицу писался - чтобы файлы печатались только в виде названия
Roman
А да, кстати, у постгреса в "стандартной либе" есть массивы, но как бы нет хешей-мапов, а включаются как расширение.
Вот тут странно, почему не из коробки.
vvzvlad
о, кстати. вот у меня есть скрипт на lua, который хранится в git-е. Хочется, чтобы этот скрипт при включении выдавал текущую свою текущую версию, которую брал бы из гита(то, что получается командой git describe —dirty —always —tags).
Roman
заметил hastebin открытый сейчас
—однопроходный хардкод кодировшик в джсон
хуй пойми что это, но если надо луёй json закодировать вот мой велик:
https://hastebin.com/lecopileya.rb — moon
https://hastebin.com/akilokisac.lua — скомпиленный луа
vvzvlad
Внимание, вопрос: как проще всего запихнуть в луа скрипт изменяемую при каждом коммите версию, учитывая то, что скрипт почти всегда выполняется на машине без гита(т.е. просто выполнять эту команду не получится)
Roman
У меня есть лишь велосипед, позволяющий из github разные данные о репозитории узнавать, как вариант, на машине нет гита, на гитхабе версия точно всегда есть
Roman
Можно сделать version.lua, сделать скриптик, который пишет в version.lua какие там данные нужны и делает пуш, как-то так
vvzvlad
да там есть git-hooks, скрипт не обязателен
vvzvlad
больше не нравится то, что если забыть скопировать в продакшен файлик с версией, то он покажет старую версию в следующий раз
Snusmumriken
Тема закрыта. Дальнейшие сообщения будут удаляться.
Roman
И ещё мой велосипед json'а
https://github.com/Romaboy/rjson
гораздо быстрее любой луашной реализации, сегфолты немного мешают иногда, но ниче 👌
Roman
3 месяца назад писал, не помню
когда руки дойдут доделать - зацикленные таблицы можно решать уровнем вложенности максимальным
CDATA/USERDATA - да им не место в json'e, что им там делать?
Roman
там были бенчмарки, велосипед быстрее!
Snusmumriken
Бывает что пытаются сериализовать объект с userdata.
Я модифицировал cjson чтобы так делать, правда, я туда закинул кучу колбеков, типа "если встречается такая cdata - делать вот это".
Roman
и в этом объекте можно разные данные хранить?
Snusmumriken
И даже использовать таблицы как ключи.
Правда, глючит жопно, я хуёвый сишник, и не уверен что нет течей.
Roman
таблицы как ключи в json?
Snusmumriken
От этого, как ты понимаешь, теряется совместимость с нормальным json.
Roman
так если нет совместимости, то это уже несовместимый диалект выходит
Snusmumriken
Ну типа того. bson, вон, тоже несовместим.
MrSmith
С json совместим, но на принимающей стороне нужна поддержка биндинга
Snusmumriken
Я решил вопрос, записью ссылки как строки и вынесение в тело объекта
Молодец. А я закинул это гиблое дело и уже перешёл на другой уровень совместимости. Методы tostring/fromstring у объектов, которые при сериализации - делают что-то со своей юзердатой, чтобы составлялся нормальный json, а при десериализации - мутят обратную процедуру.
MrSmith
{ "table: 0x06c51d18" : ["some","some2", "table: 0x06c51d18" }
MrSmith
Ну не фонтан конечно
Snusmumriken
Тихо ты.
Зафлудил уже всё.
Roman
а в моей реализации есть as_json у таблиц, и они уже если что сами решат что вернуть
MrSmith
Snusmumriken
А знаешь почему?
MrSmith
А знаешь почему?
Вроде как простой и читаемость хорошая, но мне кажутся эти аргументы сомнительными
Snusmumriken
Потому что стандарт, ёпта.
MrSmith
Потому что стандарт, ёпта.
Ну это понятно, он помойму еще подмножество js, а значит код переводить в js легко. Но это не точно
Roman
Да блин, не самый компактный, с гибкостью беда, зато стандарт, ёпта
Snusmumriken
Да. А ещё, переводить код во что угодно легко.
Ты будешь писать реализацию своего формата в ruby/js/python/c/c++/java/c#?
Нет? Да? А рекламировать будешь? Чтобы все вдруг перешли с json на твою вариацию.
Если нет - пиши себе, для своих узких задач.
Roman
Их много разных, форматов, не нужно ничего писать и придумывать
MrSmith
Помойму, это я тут агитировал за стандартизацию. Поэтому и написал велосипед, задачу решает и пофиг
Roman
для разных целей, портированы на все основные языки
Snusmumriken
Snusmumriken
Луа = скриптовая сишка. То есть, тут пустая стандартная либа, изобретай чо хошь.
Но уже много что написано, поэтому берёшь гугл, ищешь в нём "Хачу Такую Хуйню на Луа", и получаешь.
Roman
вот messagepack чем хуже json? да ничем, а используется не так часто потому что json это стандарт в умах
Roman
ну да, он нечитаем
Roman
ладно, json норм
Roman
мне одному на работу завтра?
Roman
я тут ебанулся совсем, спокойных
Snusmumriken
Luasocket - настолько распространён, что можно считать стандартом сетевых коммуникаций.
Достаточно низкоуровневая и обладает широкими фичами.
Даже есть ssl-апгрейд - luasec.
Cjson - аналогично стандартная сишная вариация json. Достаточно быстрая. Есть pure-lua вариации, если тебе прям переносимость кода важна, чтобы просто перенёс папку с win x86 на linex arm, и всё сразу заработало.
Lfs - аналогичный стандарт работы с файловыми системами (итераторы по директориям, хуё-моё).
Lpeg - аналогичный стандарт работы со сложными регулярками (Lrexlib для PCRE).
Lanes - аналогичная хуйня для многопоточки.
Lua-utf8 - для работы с многобайтными кодировками.
И ещё много-много всего того, что хорошо написано и широко распространено. Можешь считать это - стандартной библиотекой.
MrSmith
Так, тоесть когда я изменяю строку, на самом деле я строю новую?
Snusmumriken
Зато бешено экономится память на дубликатах строк.
MrSmith
Емае, тоесть я решал задачу а на самом деле создал еше большую проблему
Snusmumriken
Вот тебе и не знать как работают скриптовые ЯП.
В жаве/шарпе, кстати, та же фигня.
MrSmith
Хм, тоесть правильней строить таблицу из значений, а потом tostring() делать
Snusmumriken
concat.
Roman
Кстати, в руби строки изменяемы, что порой создает разрыв шаблона и не мешает быть руби самым слоупочным в мире. Значит, теоритически скриптовым ЯП никто не мешает иметь изменяемые строки. В туториале по производительности от Роберто было написано, что перл со строками намного шустрей работает из-за этой самой изменяемости.
Roman
А в руби на самом деле хорошо придумали: есть символы и строки, берешь что нужно под задачу.
void *
void *
Roman
У меня вот тоже в руби отделе удивляются, а как это тебе хватает 4 гига оперативки. Мир с ума сошел, 4 гига это мало чтоли?
fgntfg
мне 4ех нехватает для работы. А я даже не кожу, блин
fgntfg
ёбаная ява
Roman
Roman
:4 == 4?
void *
А это как это в числа?
Ну все символы известны на этапе компиляции. Так же как и сишные enum'ы, например
Roman
а если получаем из внешнего мира строку, делаем to_sym?
void *
Snusmumriken
Snusmumriken
Правда, ничто особо не должно мешать делать трансформации:
табличка > строка + регулярка > табличка.
Roman
Интересная идея очередного велосипеда: можно было бы через си апишку сделать функцию cstring например, хранить в сишке в виде динамического массива, прикрутить регулярки из перла и максимально замаскировать под строку, чтобы 'string' == type s
Roman
короч, пора форкать джит
Snusmumriken
короч, пора форкать джит
Нет, потому что можно мутить строки из ffi.
Просто библиотечка, оперирующая массивами символов.
С другой стороны, эта фигня не будет доступна НЕ в luajit, но где-то кроме luajit не нужна супер-пупер скорость.
Roman
Но надо чтобы 'string' == type var, это важно для условий
Snusmumriken
Если используешь библиотеку - смирись с тем что тебе приходится адаптироваться под неё. Это цена за плюшки.
Когда плюшки даются без оплаты - это или бесплатный сыр, или божественная фиговина, дайте две.
Roman
Snusmumriken
А я накатал парсер входящей фигни для редиски. Посылает/принимает всякую фигню. Это всё для ORM'а.
Snusmumriken
Вроде пока без ошибок. Если кому надо что-то такое - гоу. Правда, оно пока рассчитано на "почти лучший исход", мол, редиска всегда отвечает правильно. Надо это дополнительно обработать