Snusmumriken
Всё нормально, я просто понял как это работает и начал использовать в своих целях, это всё.
Serezha
а почему ты решил что я не разобрался
Serezha
вы юноша часто делаете скоропалительные суждения 🙂
Snusmumriken
Потому что по тебе видно невооружённым глазом.
Потому что частичная поддержка юникода есть в подавляющем большинстве популярных языков, а полной — нет почти нигде. Ты вопишь про полную, но в том же пыхе, помнится, тоже неполная, надо проверить.
Snusmumriken
Стрелки не переводи ))
Igor
Вижу тут разговор зашёл про utf8, всех приветствую, кстати. При работе с utf8 меня вот эта либа спасала, в ней есть варианты функций из таблицы string, которые с utf8 дружат https://github.com/starwing/luautf8
Igor
В ней разве что rep и format не поддерживаются, но этим функциям и не нужна модификация для поддержки юникода
Snusmumriken
Да, она классненькая, я её использую каждый раз в луях при более-менее сложной работе с utf8. И кажется именно эта либа (или её мод) встроен в lua 5.3.
Serezha
Snusmumriken
Полную поддержку она тоже не даёт, увы.
Serezha
Snusmumriken
вроде живая судя по коммитам
Вот, загляни в https://github.com/starwing/luautf8/blob/master/unidata.h
Видишь там несколько дли-и-инных табличек lower_table, upper_table и т.д?
Snusmumriken
Для "полной поддержки", таких табличек должно быть в двадцать раз больше, под разные классы, декомпозицию и всякую такую фигню.
Igor
Да и полная поддержка юникода редко кому нужна вообще
Serezha
Serezha
я допиливаю сейчас один форумный движок на пыхе - там просто внутренние таблички зачистки лишних символов юникода на сотни строк
Snusmumriken
Проблема в том, что запили себе табличек, и переделай регулярки чтобы искали символы через них с приемлемой скоростью : )
Serezha
человек самостоятельно запилил их в проект для себя
Max
Ладно, с 5.1 я немножко наврал.
это интересно. значит, Майк Полл что-то подхачил в паттерн матчинге, что лично для меня неожиданно (век живи век учись). при этом в профайлере именно для функции матчинга коэффициент прироста 2x выдерживается с поразительной точностью. интересно будет как-нибудь посмотреть, что же он там подхачил, спасибо за пример
Snusmumriken
Max
Max
особенно в луаджите
Snusmumriken
Ну вот тут вот вся строка подходит под find.
Max
можно поменять один символ в коде и он станет в 10 раз медленнее
Snusmumriken
Это я тоже показал когда проводил поиск по одному символу, и рассказал как скорость падает при усложнении выражения.
Snusmumriken
О, кстати, прошу заметить, это чистый ascii, даже не utf8. Поиск utf8 по строке был бы (по прикидке снуса) раз в четыреста медленнее, но это тоже стоит проверить.
Igor
https://github.com/LuaJIT/LuaJIT/blob/v2.1/src/lib_string.c#L136
Igor
это интересно. значит, Майк Полл что-то подхачил в паттерн матчинге, что лично для меня неожиданно (век живи век учись). при этом в профайлере именно для функции матчинга коэффициент прироста 2x выдерживается с поразительной точностью. интересно будет как-нибудь посмотреть, что же он там подхачил, спасибо за пример
Snusmumriken
и в чем проблема 🙂
Проблема в луёвой политике "минус объём и потребление памяти, для микрух и встраиваемости".
Snusmumriken
В сишке же ты тоже не видишь никаких регулярок. Ни одной, даже strcomp (байты) надо воровать из сторонней либы, помнится.
Max
Serezha
микрухи микрухами но я вижу такоэ https://www.lua.org/source/5.3/lutf8lib.c.html
Snusmumriken
Ну да.
Snusmumriken
Ты посмотри её объём и функционал. Она почти ни с чем работать не может. Может сравнивать байты и находить символы, подходящие под юникод. Всё.
Snusmumriken
Никаких тебе классов символов, что является основной и подавляющей фичей юникода.
Snusmumriken
И на отсутствие чего ты жалуешься ))
Snusmumriken
Класс символов это типа флаги: "Этот символ в ловеркейсе, его апперкейсная вариация имеет смещение минус 32 байта, а ещё этот символ является математическим символом и пунктуационным".
Serezha
ты какой то экзамен постоянно хочешь придумать 🙂 если в луа 5.3 поддержка юникода ограничивается этим файлом - печально
Serezha
посмотрел в гошке - вроде один файл с жирными табличками https://github.com/golang/go/blob/master/src/unicode/tables.go
Snusmumriken
Serezha
Serezha
если выкинуть не очень популярные кейсы - можно в памяти уложиться в считанные килобайты
Serezha
даже микрухи сейчас не треснут
Snusmumriken
Боюсь что не совсем : )
Snusmumriken
Так вот, объясняю для бобиков: компиляции регулярок понадобились как раз с появлением юникодов и прочих гигантских символьных диапазонов.
Одна регулярка \w+\s\p+ содержит десятки тысяч символов. Если пытаться построить по ним конечный автомат, он будет занимать в оперативке метров тридцать и строиться 0.02сек, это ОЧЕНЬ много. И это только один автомат для одной регулярки. Компиляция — выдирает из гигантских табличек соответствующие символы, объединяет их в диапазоны, сортирует и всячески оптимизирует, после чего одной регуляркой можно воспользоваться несколько раз без перестройки.
Pavel
Pavel
не первый раз проскакивает
Snusmumriken
Ну, я типа начал эфемизировать дебилов дебиками, а потом решил что всё ещё обидно и решил пользоваться додиками и бобиками. Не обидно, ассоциативно несёт другую смысловую нагрузку и чуть грузит мозги при интерпретации.
Serezha
Snusmumriken
Ммм, не надо тут занимать позицию ментора, это моя позиция, довольно обоснованная : )
🐅🤦♂️
Snusmumriken
Это не бобик, это пуська.
🐅🤦♂️
В поиске нормальных Бобриков нет, одни пуськи
🐅🤦♂️
Хотел пса типа Шарика запостить
Snusmumriken
Но он слишком умный
Snusmumriken
Во, додик — это мягкий вариант грубого ругательства, а бобик — просто "глупенький пёсель" или тот кто в танке. Определился.
🐅🤦♂️
ну вроде понимаешь теорию. но тестируешь на аскии
Видимо Снус хочет добиться от тебя, насколько ты понимаешь utf и сможешь ли реализовать сам некоторые алгоритмы простые - поиск символа и тд. Для понимания масштабности проблемы полной поддержки Юникода.
🐅🤦♂️
Snusmumriken
Да не, просто понимание большой глобальной проблемы поддержки строк, почему её так долго реализуют и почему жалуются во многих даже весьма крупных-развиваемых языках программирования. А ещё, почему ей совершенно не место в базовой луа.
Snusmumriken
А то громких воплей чот очень много, а понимания процесса в голове не заметно, и это не только в строках, но и глобально.
Serezha
Snusmumriken
Тесты были не о том.
Max
(я тоже ничего не знаю о utf-8) но ванильная Lua будет работать в соответствии с той setlocale, которая была вызвана в приложении, в которую эта Lua встроена. а luajit нет. отсюда и прирост в 2.5 раза
Serezha
utf-8 для того и нужен чтобы забыть о понятии локалей и кодовых таблиц
Serezha
отправить koi8-r, CP1251, DOS866 и прочие на свалку и однообразно обрабатывать тексты в которых могут быть перемешаны языки и локали
Serezha
тк это однозначно стандарт современного веба - считаю что любые тесты над строками надо проводить именно в кодировке ютф8
Snusmumriken
1. Не вебом единым
2. Таки не юникодом единым, увы и ах, но если всё подряд переводить на юникод, всё остальное сломается. Но движения есть
Maxim
end end end end end end ))))
Взято с канала Говнокод
Serezha
нормальный код 🙂 это SQL же?
Igor
похоже на то
Igor
в SQL так кейсы строятся
Igor
правда в данном случае отформатировано вырвиглазно
Yuriy
🐅🤦♂️
NM
Snusmumriken
Аски норм выводится, но смотря в какой консоли.
Snusmumriken
Для консоли это поток байт, которые потом представляются символами, вшитыми в консоль. Если тянет — ок.
NM
понимаю. все в моих руках
Mikhail
https://habr.com/ru/company/mailru/blog/459464/