Comments: |
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 05:21 pm |
---|
| | | (Link) |
|
перл срабатывет мгновенно.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 05:57 pm |
---|
| | | (Link) |
|
Какая версия, последняя?
Заметка (ссылка у меня) от января 2007-го года, там мужик про версию 5.8.7 писал (правда, другие выражения). Можете проверить с ней? А выражения мужика (повторы всякие "a" и вопросиков).
Я Перл не проверял, только До-диез и одну библиотеку на Паскале (которой пользуюсь; у меня выражения длинные, но несложные, так что проблем с быстродействием особых не было).
Яву ещё думаю посмотреть, но я в ней не секу, так что лень, конечно (на неделе где-нибудь скачаю обновление и поковыряюсь).
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 06:03 pm |
---|
| | | (Link) |
|
Сначала пробовал с v5.10.0, только что попробовал с v5.6.1 -- то же самое.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 06:16 pm |
---|
| | | (Link) |
|
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 06:30 pm |
---|
| | | (Link) |
|
Не знаю, слишком долго разбираться.
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 06:35 pm |
---|
| | | (Link) |
|
Если честно, не припомню, чтобы перловских(как, впрочем, и любых других) регекспов мне не хватало, хотя пользуюсь довольно часто.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 06:51 pm |
---|
| | | (Link) |
|
Да, наверное. Это говорят почти про все движки. Люди, с которыми я такое обсуждал устно, априорно отрицали плохие для конкретных движков строки, а при демонстрации говорили, что всё равно.
Реально проблемы быстродействия актуальны при серьёзных объёмах обрабатываемых данных (а для серьёзных задач найдут специалиста, который, если надо, сам движок напишет под задачу), а также при возможности DOS-атак или чего-нибудь такого (не особо просто подставить "неудобный" текст, когда выражение фиксированное, но почти "совсем просто", если и выражение можно вогнать, например, в URL).
Первым мало кто занимается, а во втором дыр и без регулярных выражений, как я понимаю, обычно немерянно.
Мои "возбухания" связаны с тем, что от конкретно регулярных выражений я ожидаю хорошего быстродействия, в отличие от вообще работы с поиском по шаблону (хотя я пользуюсь не совсем просто регулярными выражениями: у меня извлечение данных с помощью подвыражений, сами выражения очень длинные, но простые, и-таки тормозят, кстати, как раз из-за дерьмовости движка).
Когда-то на rsdn.ru критиковались регулярные выражения, как таковые, и как альтернатива предлагалось написать нечто на основе EBNF.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 08:40 pm |
---|
| | | (Link) |
|
Регулярные выражения как таковые интересны именно возможной высокой скоростью работы (после компиляции — со скоростью прочтения, если, конечно, структуры поместились в оперативную память, типа того:)). И они предназначены только для лексического анализа (и многого прочего, чего на них понавешивали, вследствие чего они иногда в принципе не могут работать с высокой скоростью).
А Бакуса-Нуара формы (тем более расширенные, которые Вирт сформировал) предназначены сразу и для синтаксического анализа. И у них на быстродействие такие теоретические претензии мне не известны. Так что к ним по поводу торможения, вероятно, должны быть какие-то совершенно другие претензии: сравнивающие реализации, что-нибудь такое, а не абсолютные.
Более того, одним из основных отличий расширенных форм Бакуса-Нуара являются как раз привычные операторы повторения из регулярных выражений (и некоторые даже обозначают их также).
В общем, если только простой лексический анализ, то формы Бакуса-Нуара скорее всего будут более громоздкими и без гарантий (теоретических) быстрой работы, чем регулярные выражения.
Но если говорить о реальности, которая начинает передо мной вырисовываться, то может быть лучше более мощные средства, придуманные, чтобы быть более мощными, чем ужасные супермутанты, какими стали регулярные выражения.
Типа того. Посмотрю ещё по теме в "книжке с драконом" при случае.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 11:30 am |
---|
| | | (Link) |
|
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 02:33 pm |
---|
| | | (Link) |
|
Да, всякое давно придумано и написано. "Классикой" считается и какой-нибудь Lex+Yacc
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 06:42 pm |
---|
| | | (Link) |
|
Все эти примеры типа a?a?a?aaa -- они на самом деле не из жизни. Так что может, если взять первый график, где сравнивается перл и NFA, то начальный участок графика, возможно, более важен, а на этом участке перл выигрывает.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 07:02 pm |
---|
| | | (Link) |
|
А-а-а!!! Перл сам использует НКА, а то, с чем сравнивается — оптимизированные НКА. То, что "=XX==
" работает быстро, означает, что в Перле тоже оптимизированные НКА. Оба движка — оптимизированные НКА.
"Из жизни" — отстойный аргумент, по-моему, для того, что может аукнуться. Я поэтому с сортировкой сравнивал. Аргумент "из жизни" про формальные вещи претендует на знание самой жизни, а жизнь у каждого своя.
Но график действительно не показателен, это да, ибо такие выражения только программа по плохому алгоритму создаст, наверное, а не человек разумный (также как "X(.+)+X").
Попробую скачать Перл, проверить на своих выражениях. Может, буду использовать какую-нибудь .dll-ку на основе него, если шустро работает.
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 07:08 pm |
---|
| | | (Link) |
|
>Но график действительно не показателен, это да, ибо такие выражения только программа по плохому алгоритму создаст, наверное, а не человек разумный
Вот именно это я и имел в виду. Я не вижу, где можно реально применить a?a?a?aaa, и подозреваю, что любое полезное регулярное выражение может быть оптимизировано так, что перловый движок будет работать адекватно.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 07:47 pm |
---|
| | | (Link) |
|
что любое полезное регулярное выражение может быть оптимизировано так, что перловый движок будет работать адекватно Это очень плохо, по-моему. Адекватно — чтобы движок оптимизировал регулярные выражения. Но чувство собственной значимости у людей, конечно, может повышаться от того, что они владеют Искусством написания регулярных выражений, наверное. Ну и про "полезность": обычно люди так называют такие выражения, которыми сами пользуются, не более того, частнейшее мнение. А если есть формализуемая "полезность" собственно выражений, то, опять же, можно её анализировать и либо оптимизировать, либо ругаться.
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 10th, 2009 - 12:13 am |
---|
| | | (Link) |
|
Формальные критерии бывают хорошими и плохими, хороший ли тот или иной критерий или плохой -- зависит опять-таки от субъективного мнения. Моё субъективное мнение таково, что критерий, полагающийся на время выполнения a?a?a?a?aaaa... -- очень плохой критерий, ибо из него не происходит никакой практической полезности. Насчёт того, что разные люди полезными называют разные критерии -- ну, это есть такой факт, только обозначение его ничем делу не помогает. По-моему, докопаться до точки, где мнения всех люей бы сходились, невозможно, а значит, выражение "объективное мнение" лишено смысла. Все мнения в той или иной мере субъективны, а обозначение мнения "частнейшим" я рассматриваю лишь как приём весьма дешёвой демагогии.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 04:26 am |
---|
| | | (Link) |
|
А значит надо исходить из того, что для регулярных выражений с очевидным смыслом движок не должен выдавать неочевидные торможения — это моё демагогическое частнейшее мнение.
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 10th, 2009 - 11:20 am |
---|
| | | (Link) |
|
Для меня смысл выражения типа a?a?a?aaa не является очевидным. Вот смысл a{3,6} очевиден, а a?a?a?aaa -- нет. Если б я нечто такое встретил в чужом коде, я б, наверно, надолго задумался над вопросом "а что он этим, собственно, хотел сказать?".
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 02:24 pm |
---|
| | | (Link) |
|
Это философское отношение к смыслу. А вот если ты, например, автоматически создаёшь регулярные выражения, то работать оно должно, а в коде его читать не придётся. Создавать же выражение дописыванием блоков к блокам намного проще, чем анализировать содержимое блоков и склеивать его оптимально.
Ещё: там, где я использую регулярные выражения, они считываются из файла, а не хранятся в коде, например (во многом ради этого я их и использую: чтобы при небольшом изменении формата не лезть в код).
Идея в том, что раз регулярные выражения должны (по теории) работать быстро, то можно сваливать оптимизацию на движок. А когда оказывается, что движок писали из соображений более очевидных алгоритмов, то как минимум начинаешь нервничать.
То не "до-диез", а си-шарп. Давай посмотрим код того примера.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 07:59 pm |
---|
| | | (Link) |
|
А почему не До-диез? Если язык назвали так, как обозначается до-диез, зачем мне его иначе называть по-русски? И в русском языке нет слова "шарп".
Выражение и текст, к которому оно применяется, ты видел в моих сообщениях (количество "=" в конце выражения я не смогу написать точно), а текст (короткий) на До-диезе писал в основном мой товарищ (хотя мне пришлось его исправить, ибо он забыл сделать вывод результатов). Сейчас звоню уточнить у него, что именно он писал. Да, как я и сам, пока звонил, в MSDN прочитал, это был Regex.Match.
Или если там класс создавать, на компиляцию ему намекать или что-нибудь такое, то быстро работает (это .net, а не Mono, кстати)?
В дотнете регекспы бывают прекомпилированными и обычными. Отсюда мой интерес к исходному коду, отчасти также, чтобы не тратить 10 мин на самостоятельное написание при пробе. Как ты называешь сишарп, мне всё равно, однако, неконвенцинальное написание затруднит потом поиск интересующихся темой.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 9th, 2009 - 09:36 pm |
---|
| | | (Link) |
|
неконвенцинальное написание затруднит потом поиск интересующихся темойМне не нужны интересующиеся собственно До-диезом, мне вообще на данный момент в Дельфах (не .net-ских) регулярные выражения нужны. И какая-то сторонняя библиотека у меня в принципе работает, хотя и хреново по моим меркам, так что моё бухтение вообще не очень актуально. Я бухчу как компьютеро-научник, а не до-диезник. мой интерес к исходному кодуТам был Regex.Match. Сейчас специально написал суперпрограмму:
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
string sss = "=XX==========================";
string srx = "X(.+)+X";
Console.WriteLine(" Начало: {0:o}", DateTime.Now);
Regex rx = new Regex(srx);
Match mmm = rx.Match(sss,0,sss.Length);
Console.WriteLine(mmm.Value);
Console.WriteLine(" Regex...Match: {0:o}", DateTime.Now);
mmm = Regex.Match(sss,srx);
Console.WriteLine(mmm.Value);
Console.WriteLine(" Regex.Match: {0:o}", DateTime.Now);
Regex ry = new Regex("X(.+)+X",RegexOptions.Compiled);
Console.WriteLine("RxOpt.Compiled: {0:o}", DateTime.Now);
mmm = ry.Match(sss,0,sss.Length);
Console.WriteLine(mmm.Value);
Console.WriteLine(" RxOpt...Match: {0:o}", DateTime.Now);
}
}
У меня времена: 92 секунды, 101 секунда и молниеносные 48 секунд (а компиляция условно мгновенна). В документации прямо и беззастенчиво написано, что в .Net — "Traditional NFA" (который можно и оптимизировать, вообще-то, не меняя интерфейса).
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 9th, 2009 - 10:06 pm |
---|
| | | (Link) |
|
2 минуты 40 секунд
From: | phantom |
Date: | February 10th, 2009 - 12:37 am |
---|
| | | (Link) |
|
На моём тормознутом компе примерно так. Дебаг:
Match took: 00:01:48.2879910
Another match took: 00:02:58.5403305 Compiling regexp: 00:00:00.0019530
Compiled match took: 00:01:23.6010945
Релиз:
Match took: 00:02:17.0966940
Another match took: 00:02:16.3223295 Compiling regexp: 00:00:00.0029295
Compiled match took: 00:01:21.8375355
Разброс большой из-за троттлинга, но в принципе, понятно, что регекспы тормозят. МС обычно делает всё по-своему, ухудшая и не доводя до конца, как и в случае регекспов.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 04:18 am |
---|
| | | (Link) |
|
Так это Моно?
From: | phantom |
Date: | February 10th, 2009 - 04:36 am |
---|
| | | (Link) |
|
Нет, дотнет 3.5 (наверно, всё равно, что и 2.0) под Вистой и на тормозном компе (с переменчивыми тормозами).
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 02:16 pm |
---|
| | | (Link) |
|
А в Моно реализован класс Regex? Как оно в Моно?
Мне казалось, что ты им пользовался.
From: | phantom |
Date: | February 10th, 2009 - 03:00 pm |
---|
| | | (Link) |
|
Я взял твой код, и немножко отредактировал, запустил под виндой (лаптоп). Моно на моей крутой рабстанции пока не поднято, вчера только голую систему собрал (без десктопа, в смысле). Если тебе интересно, как в Моно реализован соответствующий класс, то просто залезь на их CVS.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 03:32 pm |
---|
| | | (Link) |
|
Зачем лезть в плохой код лишний раз? У меня своего плохого кода хватает.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 02:40 pm |
---|
| | | (Link) |
|
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 04:17 am |
---|
| | | (Link) |
|
Я не совсем понял, это сумма моих чисел, аналогичный результат у себя или что ещё?
![[User Picture]](http://lj.rossia.org/userpic/204291/215) | From: | do_ |
Date: | February 10th, 2009 - 04:27 am |
---|
| | | (Link) |
|
аналогиный результат у себя
From: | phantom |
Date: | February 10th, 2009 - 12:40 am |
---|
| | | (Link) |
|
>Мне не нужны интересующиеся собственно До-диезом,
Тебе не нужны, а вот кому-то эта информация может понадобиться.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 04:19 am |
---|
| | | (Link) |
|
Тогда пусть знают заодно, что пишут на До-диезе.
From: | phantom |
Date: | February 10th, 2009 - 04:34 am |
---|
| | | (Link) |
|
Гыгыгы, вот же ты упрямый.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 12:00 pm |
---|
| | | (Link) |
|
то ли я чо нипонял, то ли чо… GNU regex, TRE — результат мгновенный, нифига не найдено (что логично). мона сожрала весь моск (у меня оного три гига), после чего завалилась с воплем «память кончилась!»
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 02:38 pm |
---|
| | | (Link) |
|
А TRE не является традиционным. Там сразу по слову POSIX возникает мысль, что старались и писали аккуратно.
И выбрали хорошее компромиссное решение ("O(M^2*N)" по времени и "O(M^2)" по памяти). И фишки!
В общем, спасибо за ссылку!
А долго Моно умирало?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 02:47 pm |
---|
| | | (Link) |
|
не, секунд за 5-7 слопало всю память и наебнулось.
From: | phantom |
Date: | February 10th, 2009 - 02:53 pm |
---|
| | | (Link) |
|
Несмотря на то, что дотнет легко декомпилируется, и даже его сорцы теперь официально доступны для дебага, Моно, судя по всему, в значительной степени переписало исходный код либ с нуля. Отчасти, думаю, из лицензионных ограничений, отчасти потому, что в дотнете много чего реализовано через старые COM-интерфейсы и WinAPI. Поэтому отличия в реализации регекспов неудивительны.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 03:29 pm |
---|
| | | (Link) |
|
Зато удивительно, что не использовали приличный движок.
From: | phantom |
Date: | February 10th, 2009 - 03:31 pm |
---|
| | | (Link) |
|
А что ты там парсишь?
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 03:43 pm |
---|
| | | (Link) |
|
Просто считываю значения из типовых текстовых файлов (несложными килобайтными выражениями). Больше просто интересуюсь регулярными выражениями, я же писал: решили с товарищем повторить, ибо особо по жизни нужно не было, пару раз изучали, но каждый раз забывали. Важны возможности и ограничения, потому что что-то часто приходится парсить, так что важно выбирать правильный инструмент вовремя.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 11:16 pm |
---|
| | | (Link) |
|
удивительно то, что они не работают. а так ничего, нормально всё.
мне слабо понятно, как на этом мусоре можно что-либо кроме «привет, мир» ваять.
From: | phantom |
Date: | February 11th, 2009 - 02:16 am |
---|
| | | (Link) |
|
А я вот использую из года в год, представь себе. ;)
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 11th, 2009 - 02:21 am |
---|
| | | (Link) |
|
то-то современный софт с одним окошком и кнопочкой "ok" требует минимум 4 гига моска, многоядерный проц на 3 гигагерца и винт минимум в пол-терабайта.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 11th, 2009 - 03:40 pm |
---|
| | | (Link) |
|
Согласен с ответом ketmar-а. Ещё добавлю: и всё равно в некоторых ситуациях виснет.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 11:34 am |
---|
| | | (Link) |
|
TRE? мне особенно нравится фишка «приблизительного совпадения», больше нигде такой не видел.
From: | phantom |
Date: | February 10th, 2009 - 03:17 pm |
---|
| | | (Link) |
|
В любом наманом индексере есть. Реализуется легко тоже. Википедия подсказывает, что это 10-строчечный "алгоритм Левенштейна".
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 03:34 pm |
---|
| | | (Link) |
|
Пока что обсуждаются проблемы нераспространённости "нормальных" движков регулярных выражений.
From: | phantom |
Date: | February 10th, 2009 - 03:56 pm |
---|
| | | (Link) |
|
В блогах не бывает оффтопика.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 03:59 pm |
---|
| | | (Link) |
|
1. Бывает. 2. Я имел в виду, что доступность алгоритма и наличие его пристойной реализации — очень разные вещи.
From: | phantom |
Date: | February 10th, 2009 - 04:05 pm |
---|
| | | (Link) |
|
Не пойму, ты хочешь, чтоб здесь обсуждался только топик?
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 04:33 pm |
---|
| | | (Link) |
|
Тот мой комментарий не относился к вопросу попадания или непопадания в тему, он выражал мою иронию по поводу искажённого слова "нормальный", так как пока "нормальных" движков регулярных выражений я не знаю.
(Последнее замечание [выше, про TRE]: POSIX-то мне тоже не нравится на самом деле. Я же к Паскалю привык, так что особое отношение к нулевому символу мне кажется бредом.)
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 11:15 pm |
---|
| | | (Link) |
|
я что, говорю, что это сложно? я говорю, что ни в каком движке регэкспов больше этого не видел. а утилитка agrep, которая идёт в наборе с TRE — полезная штука.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 10th, 2009 - 03:50 pm |
---|
| | | (Link) |
|
Что мне не нравится в POSIX — это ограничение на использование нулевого символа. Как упомянуто на главной странице TRE, там это ограничение тоже есть, как упомянута и полезная задача, которую можно было бы решать с помощью рег. выражений: выдирание текста из нетекстовых файлов.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 10th, 2009 - 11:14 pm |
---|
| | | (Link) |
|
ну, никто не мешает нетекстовые файлы препроцессить предварительно. например, менять нули на еденички.
а в принципе да — особая роль нуля задолбала.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 11th, 2009 - 03:32 pm |
---|
| | | (Link) |
|
например, менять нули на еденички Не пройдёт. Необходимо как-то обратимо, а значит ещё один символ задействовать: типа, $01 -> $0101, $00 -> $0102. В любом случае теоретически невозможно это сделать в общем случае так, чтобы файл не разбухал, а значит не получится без создания вспомогательных файлов (или памяти).
особая роль нуля задолбала Для любителей Паскаля это изначально нелепо. Хотя недавно я в одной задаче пользовался строками, заканчивающимися на ноль: память экономил и всё такое, хранил строки сплошняком (итого: пять лишних байтов на строку, а с обычными паскалевскими строками что-то было существенно бОльшее [в Дельфах 2009 — 13 байт как минимум, но съедается память на управление ей же, когда много мелких объектов]).
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 01:42 am |
---|
| | | (Link) |
|
>Для любителей Паскаля это изначально нелепо. для любителей Qt тоже. %-) также нам, любителям Qt, забавно смотреть, как дельфисты до сих пор сражаются с юникодом. и с отсутствием в VCL такой простой вещи, как layout manager.
зыж есличо — я изначально паскалист и дельфист (лет 10, что ли), на c++/Qt перелез не так давно, в связи с тем, что Lazarus — феерическое, невообразимое говно.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 12th, 2009 - 03:03 pm |
---|
| | | (Link) |
|
до сих пор сражаются с юникодом 1. В обед сто лет TntUnicode (или как он там) есть. Там в визуальных компонентах везде widestring. 2. У меня Дельфы 2009, в них тип string какой-то нереальный: он почти всё что угодно поддерживает (из-за этого не работают старые программы, которые считают индексацию байтовой, я такие тоже писал, причём специфических предупреждений при компиляции не вываливается).
А layout manager-а продвинутого не хватает, да, последние нововведения в основном всякое микрософтовское говно (элементы MSO 2007 и Vista).
Freepascal использую (для консольных приложений), но он память жрёт не по-детски, по сравнению с Дельфами, а с Лазарем ничего путного действительно на горизонте не просматривается.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 03:09 pm |
---|
| | | (Link) |
|
1. это уебанство. юникод должен быть во всём генофонде. 2. d2009 — тоже уебанство. баг на баге, даже в генофонде. тьфу.
не знаю, вот как раз проблем с памятью в fpc не видел.
кстати, ещё одна причина перехода — космически заебался транслировать хидеры с сей на паскаль. автотулзы не решают, увы.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 12th, 2009 - 05:14 pm |
---|
| | | (Link) |
|
1. Нет. Я бы предпочёл отдельный тип для юникодных строк, обрабатываемых как текст. Дело ведь в том, что юникод — безальтернативное, но тоже говно. 2. Ну, отрицать категорически не берусь, но в чём?
вот как раз проблем с памятью в fpc не видел Когда много мелких объектов, он жрёт раза в полтора-два больше памяти, чем Дельфы с тем же исходником. Параметры выравнивания и т.п. не помогают.
с сей на паскаль Ну да, это несколько мешает жить.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 05:30 pm |
---|
| | | (Link) |
|
1. как раз юникод — вполне нормально. а что, есть какая-то другая мегаидея, как работать с кучей языков и срать на локали? заметь, я не про utf тут, а про ucs.
2. как минимум — в генериках. вон, недавно в QuickSort позорнейший баг нашли. настолько позорный, что и говорить стыдно. уебанство. даже не в реализации генериков, а тупо в алгоритме. и дельфей и раньше Q&A хромало, так теперь оно вовсе отсуствует.
>Когда много мелких объектов, он жрёт раза в полтора-два больше памяти, чем Дельфы >с тем же исходником. потому что борманды асилили спереть FastMM, а FPC — нет.
>Ну да, это несколько мешает жить. на винде — несколько. на никсах — ПИЗДЕЦ, КАК МЕШАЕТ.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 12th, 2009 - 05:40 pm |
---|
| | | (Link) |
|
про utf тут, а про ucs Юникод — это и utf-7, и utf-8 и ещё куча всего.
в QuickSort позорнейший баг Вообще нефиг пользоваться ей. От тех, кто в качестве сортировки предлагает первым делом "быструю сортировку" надо сторониться также, как от сторонников "пузырьковой". Мне тут прорекламировали недавно "Median of medians" вариант, как "нормальную быструю сортировку": на списке из одинаковых элементов застрял.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 05:48 pm |
---|
| | | (Link) |
|
>Юникод — это и utf-7, и utf-8 и ещё куча всего. это вот никакого отношения к юникоду не имеет. а то так можно сказать, что base64 — это такой ascii.
>От тех, кто в качестве сортировки предлагает первым делом «быструю сортировку» >надо сторониться также, как от сторонников «пузырьковой». а дело не в этом. дело в том, что в известнейшем алгоритме позорнейший баг. а алгоритм — в генофонде. что навевает мысли о прискорбном увольнении всей Q&A команды. ёмбаркадеры, видимо, в кризисе, на Q&A бабла нет.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 12th, 2009 - 07:11 pm |
---|
| | | (Link) |
|
это вот никакого отношения к юникоду не имеетНу-ну. UCS-2 is what a Unicode implementation was up to Unicode 1.1, before surrogate code points and UTF-16 were added as concepts to Version 2.0 of the standard. This term should be now be avoided. When interpreting what people have meant by "UCS-2" in past usage, it is best thought of as not a data format, but as an indication that an implementation does not interpret any supplementary characters.
What does Unicode conformance require?
Process UTF-* by the book. http://www.unicode.org/faq/basic_q.htmlёмбаркадеры, видимо, в кризисеВряд ли. Дельфы 2009 на порядок лучше работают, чем Дельфы 2007, которые они не так давно (в конце июня 2008-го года) купили у Борланда. Ссылку не дашь на ошибку?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 11:53 pm |
---|
| | | (Link) |
|
я таки про кодировки, а не про из представления. за utf надо убивать на месте, конечно.
ну, не знаю. для меня дельфи закончилось, когда стало требовать вротнет. ну, и то, что там сделали справку m$-like — тоже. нормальные люди ушли, уебаны пришли.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 13th, 2009 - 02:32 pm |
---|
| | | (Link) |
|
Ты ругай тогда уж Юникод, а не какие-то нестандартные непостижимые вещи пиши: ничего не понять.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 14th, 2009 - 02:42 am |
---|
| | | (Link) |
|
за что юникод-то ругать? юникод мне по нраву, там символов много. а вот некоторые способы представления кодов этих символов — резко не нравятся.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 14th, 2009 - 11:08 am |
---|
| | | (Link) |
|
Ну, символы не они придумали, они их только организовали, чтобы на компьютере потреблять. Так что ругай Юникод!
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 14th, 2009 - 12:17 pm |
---|
| | | (Link) |
|
не буду я юникод ругать. я буду ругать уродов, которые придумали utf.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 14th, 2009 - 10:02 pm |
---|
| | | (Link) |
|
То есть, Unicode Consortium? "Ругать буду не всех евреев, вместе взятых, а еврейский народ"?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 14th, 2009 - 10:10 pm |
---|
| | | (Link) |
|
нет, нетшкаф. емнип, именно там родилось убдюдство под названием utf. а консорциум уже был вынужден принять то, что расползлось, как тараканьё.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 17th, 2009 - 01:38 pm |
---|
| | | (Link) |
|
Такой уж консорциум. Повторюсь: буквы не они придумали. А они даже общедоступных шрифтов не сделали, как я понимаю.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 17th, 2009 - 01:56 pm |
---|
| | | (Link) |
|
а с чего бы *им* шрифты делать? вот уж что-что, а шрифты никак сюда не относятся. до тех пор, пока не стандартизовано начертание каждого символа, ага.
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | From: | ppkk |
Date: | February 17th, 2009 - 02:53 pm |
---|
| | | (Link) |
|
Они договорились о каком-то едином способе хранения символов в виде байтов (UTF-*) и о начертаниях тоже (начертания также придумали не они, но они записали какие-то определённые варианты http://www.unicode.org/Public/UNIDATA/ — некая урезанная часть описаний). Примеры изображений они дают в таблицах символов, но не разрешают использовать этот шрифт. http://www.unicode.org/charts/About.html — "The fonts and font data used in production of the Unicode Standard may not be extracted, or used in any way in any product or publication, without permission or license granted by the typeface owner(s)." (А из таблиц даже копировать-вставлять нельзя [в смысле, стоит запрещающий флажок в pdf-е]: хотя копируется не изображение а скорее только код символа.) И ещё, например: http://www.unicode.org/versions/Unicode5.0.0/ch07.pdf — "This file is part of the electronic edition of The Unicode Standard, Version 5.0, provided for online access, content searching, and accessibility. It may not be printed."Так что в каком-то смысле "UTF-*" — основное, что они сделали.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 11:54 pm |
---|
| | | (Link) |
|
а, да. ссылку не дам. где-то на «Мастерах Дельфи» в «потрепаловке» кто-то кидал. чуть ли не Palladin. кто-то из старичков, в общем.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | February 12th, 2009 - 01:43 am |
---|
| | | (Link) |
|
кстати, регулярки в Lua (хотя они там откровенно слабые) ноль чем-то особым не считают. его можно отлично мачить метасимволом %z. %-) | |