Paguo_86PK > Готовые библиотеки есть! скажу даже больше. есть разработки, которые компилируют регехпы прямо в С-исходник. имхо более адекватное решение, чем впихивание этого в камень. но они довольно бедноваты (во всяком случае, то, что я видел) и лишний грамотный девелопер желающий ускорить разбор регулярок им не помешает
Справится. Почему нет? Сейчас тестил алгоритм. Половину фигуры залил. Стал дорабатывать - всё отказало. Всё работает на жёстких логических описаниях. Ну, знаете ли. О чём я говорю? Опять 25! Я говорил, и говорю, что некогда в процессоры ввели расширения MMX/SSE/3DNow и прочую чушь ради мультимедии. Игрушечной мультимедии! А вот добавить пару инструкций для поддержки регулярок - слабо! Ведь игроки и меломаны за это не заплатят! :-p А вот каких инструкций для регулярок не хватает? Хм... Вот специально не сидел и не думал... Минутку, ща с потолка отковырну... Да хотябы тупую проверку в двойном слове на наличие хотябы одного/двух подбайт. Как поиск подстроки в строке. Уже шаблон! На практике я сталкивался с таким. Обидно было то, что нужно в таких случаях читать строки по байту, или целыми словами, но затем сдвиговыми манипуляциями шаманить... Или аналог XLAT - REPE XLATCMPS сканирование строки и проверка каждого символа по таблице. Если в указанной ячейке ... э-ээ, легче алгоритмом объяснить: Код (Text): .L1:LODSB PUSH EAX MOV AH,AL XLATB CMP AH,AL POP EAX LOOPNE L1 ; repne примерно так... Или REP XLATSCAS. При этом какрас таки вся XLAT-таблица может быть загружена во внутренную память процессора, даже в ассоциативную. Тогда алгоритм изменится как: Код (Text): .L1:LODSB PUSH EDI PUSH ECX MOV ECX,256 MOV EDI,EBX REPNE SCASB POP ECX POP EDI LOOPNE L1 Сравните, или цикл в цикле, или аппаратный ассоциативный разбор. Или у вас воображение джарджавело под влияние Пентюховской эры хаоса и неразберихи, или вы просто любите все мои идеи топтать дружно всем коллективом
Нет, идея хорошая. НО! Для того, чтобы её внедрить, надо придумать ряд решений, а именно: - Как будет проводиться компиляция регекспа. Будет этим заниматься приложение или процессор? В какой форме будет скомпилированный regexp храниться в памяти? - Что делать с проблемой переменной длины регекспа? Процессор сам по себе не может выделить динамическую память. - Как будет выглядеть instruction set для разбора регекспа? - Как решить задачу разбора и матча рекурсивных регекспов (а-ля Perl)? - Как быть с локалью, ведь один и тот же символ можно представить в различных кодировках? Когда ты сможешь ответить на эти вопросы, то никаких преград по внедрению регекспа в CPU не будет, можешь прямо идти в Intel и бить челом, требуя зарплату.
к пожеланиям SadKo добавлю немного литеры по вопросу http://swtch.com/~rsc/regexp/ - рас кокс рассуждает о эффективности реализаций регекспов. довольно ограниченая реализация, но практически так они и используются в п9. и ниче crochemore "Jewels of Stringology" - серьезный труд (с картинками) тот же автор, но раздает бесплатно (только что заметил и пока не просматривал) M. Crochemore "Text Algorithms" а насчет оплевывания всех ваших идей, так это судьба всех идей и идеегенераторов. сам весь в плевках хожу и новых почти не замечаю. но один метод есть - чтоб меньше плевали надо уметь представить идею нужным боком, дать поиграться с прототипом, чтоб оппонент сам почувствовал ее нужность/красивость/удобность/интересность итд. а слова.. их больше женщины ценят. кроме того, 2ве ваши идеи мне понравились, хоть и с коррективами. и даже показал вам аналогично думающих, но вам, похоже, не понравилось, что вас опередили какието мгу и беллабс.
вот еще. вопрос не так прост Bill Smyth "Computing patterns in strings" более полный вариант можно спросить тут и даже на ру вот тут рекомендуется еще одна. не знаю, не сравнивал. но она у меня есть.
Paguo_86PK Для каких целей вы засунули PUSH/POP в циклы? А внутренний цикл во втором примере зачем понадобился вам? Вы не знаете как найти байт в MMX или SSE регистре? Это очень просто - загружаете во все байты другого регистра искомый байт, а дальше какой-нибудь PCMPGT или PCMPEQ получаете байтовую маску, которую можете потом объединить с байтовой маской для второго байта или превратить в битовую маску и перенести в EAX.
Вы в своём уме!? O_o А, ну да, просто не знаете меня в полной мере... А если серъёзнее и понятнее, то - Я НЕ ИНЖЕНЕР, чтобы заниматься такими делами Отвечу по пунктам: 1) Способ компиляции зависит от аппаратной реализации и тут я никак не могу предугадать никаких способов; 2) Выделять будет программа, разбирать - процессор; 3) Я уже предложил простую инструкцию XLATSCAS - ассоциативное сканирование внутреннего буфера размером в 256 байт; 4) В предложенном мной варианте это делает программа, а процессор помогает ей лишь командой XLATSCAS; 5) Локаль? А разве сейчас не XXI век? Разве машины не говорят на "эсперанто" - а-ля UTF? Intel? А кто это? O_o у, бегу и спотыкаюсь! Эта Intel никогда не уделяла достаточного внимания процессоростроению и вся их продукция - дерьмо. Почитайте историю ZiLOG. Из грязи - в князи! Я уже много писал о непродуманности их процессоров. У Motorola процессоры в то время заслуженно назывались ПРОЦЕССОРАМИ! Если бы они не правили рынком и не пихали свой отстой во все дыры, цифровая индустрия давно совершила бы качественный рывок вперёд. ИМХО! Вы опечатались наверно? Подставить не нужным боком, а извеняюсь, мягким местом. Разве не так? А если серъёзно, я очень устал от стаи гиен-консерваторов! Им дай комп, работающий в миллион раз быстрее современного, с одним ядром и без механизмов многозадачности, так они его сгноят! Скажут, мол, дерьмо, так-как сотый процент машинного времени уходит на программную эмуляцию многопоточности! Помнится Itanium сгноили из-за того, что он "тормозил" на x86-приложениях самую малость, хотя новая архитектура лет через 5 могла бы затмить всё накопленное за 30 лет дерьмо x86-программ, накопившиеся в канализации интернета! Только идиотам не понять, что всё, что связано с x86, должно уйти под жёсткую программную эмуляцию! Правда вот пока нету процессоров, которые бы смогли программно эмулировать x86 на равной скорости и с частотой не в сто раз выше. Увы! Bosch у меня эмулирует с коэффициентом 1:80-1:110. Может из-за того, что процессор эмулирует сам себя? Напоминает сцену м@с#у$б@ции индустрии. Извините... Это я к тому, что про рекурсивную эмуляцию надо забыть! Почему? Вот смотрите, почему сейчас используется рекурсивная эмуляция: 1) Захотелось поиграть в DOS-игру, но ни одна платформа 100% не обеспечит всю среду для DOS-приложения. То звук, то ещё что-то; 2) Захотелось запустить другую OS не выходя из текущей и т.д. и т.п... Я о том, что сранный набор регистров и механизмов защищённого режима всё равно не обеспечивает 100% корректной организации сранного виртуального окружения! Поэтому и приходится пользоваться сранной программной маст. э-ээ, эмуляцией короче. Эти процессоры с современными механизмами многозадачности отстали лет на -дцать! Вот о чё м я который раз. Заметьте, я не кричу на кого-то из форума, а воплю лишь на гигантов мировой индустрии срани! Для наглядности, что регистр никак не изменяется, лишь флаги. Ага, использовать MMX в таких задачах, чтобы потом авторы долбанных MMX-инструкций радовались "Ух ты, вот здраво мы как придумали! Наши инструкции остепенились: Их взяли на службу в отряды регулярных войск!"... Это я к тому, что кесарю - кесарево, слесарю - слесарево! Не нужно шаманить игрушечными инструкциями для решения серъёзных задач! А то прямо как прянечный домик в стране ЛЕГО: не эстетично
Paguo_86PK Оба показанных вами варианта кода синомимы для: Код (Text): xor eax,eax L: lodsb cmp [table+eax],0 jz L cmp al,0 jz not_found Вы говорите что вам не хватало каких-то команд, чтобы это записать(было бы очень хорошо если бы вы объяснили каких именно), а я считаю что в вашем коде было много лишних команд.
Paguo_86PK чето вы развоевались както странновато. не то съели? итаниум никто не гноил. просто его не приняли пользователи. им важнее прогресс их личных дел, а не всякие фантазии. а для этого недопустимо менять сразу всю инструментальную базу, переучиваться/ловить и бороться с новыми глюками. а "прогресс" это просто ярлык который лепят куда ни попадя. бош тормозит, потому что он интерпретирует маш код. что там и кому должно х86 это дело такое, но кто из процессороводов его щас похоронит в своем проце - похоронит и себя. вопрос тут не в идеальности самого кода, а в наработанном багаже ПО. пользователи хотят, чтоб у них все вертелось быстрее, лучше и с меньшими затратами на том же ПО. особенно, если это по куплено официально, а работники обучены под него за деньги фирмы. хы, кстати, а вы в курсе, что х86 интерпретируется в процах уже лет 10-15? (а кто слесарь? Black_mirror?) те вы предлагаете повыкидывать всякую ерунду, вроде игрушечно-видео-рекламных ммх/ссе, на которых щас и рубится основная капуста и бросить все силы на аппаратный регехп, ибо это самая юзаемая вещь (миллиарды юных гамеров маму продадут и сами с голоду сдохнут, чтоб поскорее погамать в новый мод контрстрай.. регекспа) и ее скорость критична и выкинутые на ее разработку и внедрение сотни миллиардов окупятся и дадут прибыль за полгода? у вас очень необузданная фантазия. я все это написал не к тому, что х86 это лучшее из лучшего, просто такое дело, что чтоб дойти до чегото нового, надо опираться на чтото старое. и есть некая зависимость межу опорами и достигнутым. причем не прямая, те вы вот так просто конечный результат не предскажете. и тут есть тонкий момент - надо идти самому, тратить свои силы, а не заявлять "вы меня не знаете. я не инженер и потому работать над своей идеей не буду", для помощи таким идейным неинженерам есть раздел "комерс". в ваши, как я понял (#134 "Когда 17 лет было" + #136 "Я его разрабатывал ... 12 лет назад"), 29 стыдно этого не понимать.
Так ведь абсурд! Я не берусь спорить, было ли в моём коде лишних команд и сколько. А пример громоздкий намеренно привёл, так-как ваша XOR EAX,EAX убивает значения AH и пр. А может я храню в AH адрес любимой жены? )))))))))))))))))))))) Код (Text): ; Функция была написана и отлажена в Turbo Pascal 7. ; Входные значения - строки: Str_1, Str_2, Str_3 ... xor cx,cx lds si,Str_3 ; Необходимо проверить все три строки lodsb ; и подготовить маску шаблона поиска в cmp ch,al ; регистре CL. Если строка начинается с adc cl,cl ; \0 - значит пуста и выпадает из поиска lds si,Str_2 ; и соответствующий бит в CL обнуляется, lodsb ; иначе - устанавливается в 1 cmp ch,al ; Никаких условных переходов: всё линейно adc cl,cl ; и компактнее на три инструкции! lds si,Str_1 lodsb cmp ch,al adc cl,cl ... если вы оптимизируете этот участок кода - я уйду с форума и завязу с программированием!
Угу. mov si,... Спасибо! А сегменты!!!??? O_o А так, вполне похоже на релиз 2004 года Второй вариант вообще ужасный! P.S.: Это был фрагмент кода моего Си-- 1999...
Но вы всё равно не ответили на поставленную мной задачу. А имел я ввиду, приведённый мною код уменьшить раз так в 5 с помощью волшебства MMX и прочей чуши! Тем самым, задача - НЕВЫПОЛНИМАЯ! Что и требовалось мною показать...
Paguo_86PK не пойму я чего вы хотите. предполагаю, что просто повозмущаться. но так или иначе, а задачу как она поставлена в #151, полагаю, я решил тогда вот вам встречная задача с подобным вашему требованием ужать по командпм в 5 раз. можно использовать и ммх, и ссе, и z80 Код (Text): xor eax,eax xor eax,eax ; надо записать в eax 0 xor eax,eax жмите. в 5 раз по количеству команд. вы там помнится (#151) обещали уйти с форума и из програмирования или еще какой ношеный носок сжевать. не надо этого. вы не так плохи. предлагаю вам просто или начать говорить по существу, те то, что вам интересно и к чему вам охота приложить руки самому или прекратить этот флуд. и посмотрите что с вами. вы както странно-агрессивно себя ведете. может вы нездоровы?
Телепат! Вы телепат! (комплимент) Простыл и вторую неделю по ночам не спится (да и днём не то) А так, это не флуд, а то, что cmp ch,[Str_1] негоден, так-как по правилу DOS - строка может быть в любом сегменте и тут без lds si,Str_1 не обойтись. Так-как я не хочу, чтобы в сотом случае компилятор вылетал с ошибкой или выдал ересь... А агрессивен я, как уже писал выше, ни к форуму, ни к коллективу, ни к устоявшимся мнениям... Бесит позиция вещей! Куда ни глянь - везде баг на баге... В i8080A / Z80 код 00 - NOP, в x86 же - ADD и процессор тупо марширует. Нет, и не говорите мне про ловушки и прочую припарку. Был бы 00 - NOP или HLT или RET в конце-концов, про ловушки вы бы и не знали вообще, а в Windows ушли бы тысячи строк сорцов... Говорите, что я преувеличиваю, пускай. Но факт один - 00 в x86 является одным из тухлых мест! Потом, возьмите DOM-JS-AJAX. Вот почему производители браузеров не договорятся никак для выполнения крайне важных процессов следовать WWW-закону!? Им бы только танки делать. Одни бы танки ездили только по льду, другие - по кислой капусте. Казалось бы сколько уже можно воевать. А нет, в FF видите ли нету window.status, а IE - бери хоть винт дистанционно форматируй. Одни - вщё запрещают, протягивают маршрут, вот мол, не шага в сторону. Другие - всё позволяют, предлагают своё, но закон игнорируют... Вот смотрите. Есть а-ля KSTVTUNE.AX внутри которого сетка частот. Вот Ресторатором я извлёк тот файл, а вручную вбивать все 30 каналов - влом. В Си возиться - лень. Взял блокнот, тупо набросал HTML, скрипт которого знает путь к WinAMP с ТВ-плагином и *.tvc файлами всех каналов. Скрипт читает каждый файл и составляет сетку. Затем он сохраняет всё в бинарь - файл в C:\27.res Всё, что остаётся, запустить Ресторатор и впихнуть туды тот res в ax-драйвер. Затем написан мною и bat-файл, который копирует модифицированный драйвер в все папки с драйверами. Винде остаётся лишь пожаловаться на то, что нужно вставить диск и восстановить их. Считай, работа трёх секунд! А вот если в IE исчезнет ScriptingFileSystem? Мой скрипт перестанет пахать и мне придётся тупо все сетки частот калькулятором переводить в хексы и тупо вбивать в хекс-редактор (я так делал два года назад) битый час! Написать на Паскале, на Си скажете утилитку? Ага! Вам это надо? Напишите мне! А мне и так хватает. В скрипте - это с десяток строк. А в Си - писать ещё и разбор синтаксиса файла и т.д... Вы знаете язык Grasp от Microtex? замечательная разработка 80-ых. Интерпретатор, в одном файле хранится и скрипт, и слайды. Картинки в формате *.pic PCpaint. Так вот, изучая структуру файла я понял, как извлекать файлы из него и собирать обратно. На скорую руку тяп-ляп набросал скрипт и запустил в IE. Так получился packer/unpacker, у друга проверил - работает. Так-как Grasp под DOS, искал современный вьювер - нет! А если и есть от автора самого Grasp, то на, выкуси! Не скачать по мистическим обстоятельствам из-за боли в пупке у Ктулху!!! Сел изучать доку, формат .pic, в Си всю неделю шаманил. В итоге цветное видео/анимация - прекрасно идёт и с DOS-вьювером сходна на 80%. А ч/б картинки, где писел - бит, то показываются нормально, то свёрнуты, как экран долбанного лампового телевизора. Три дня копался, из-за этих монохромных глюков сломал весь алгоритм вплоть до закрытия программы! Устал, плюнул... Ну нету в спецификации формата ни строчки о выравнивании. Что происходит, если ширина не кратна 8 - хрен знает! И так делал - сворачивается влево, и так делал - вправо... До этого хотел плагин-вьювер к TotalCommander уже написать, а эта пикселная дрянь всю недельную работу сломала! Буквально сломала! Я bak'и никогда не делаю и уже забыл, что где и когда запорол... И вот. О чём это я... Сейчас вот изучаю Canvas графику и думаю: А дай я тут попробую Grasp вьювер написать! Так беда вот: Доступ к файлам - IE объект, но нет Canvas. А в остальных браузерах - есть Canvas, но нет доступа к файлам!!! Вот как мне тут вести себя? Да я могу как в SuperMario сжимать файлы в PNG и передавать их в скрипт. Но зачем такое изващение! Да я могу Small HTTP server запустить и через него AJAX средствами загружать те файлы. Но опять-таки! Извращение! Неужели не могут что-то придумать? Опцию браузера там, чтобы юзер указал при желании файл и его содержимое загрузилось в объект скрипта? Типо открыть и передать содержимое файла в объект скрипта, и сохранить данные скрипта в файл. Скрипт даже имени файла не будет знать, своебразный RAM-диск. А то приходится так извращаться с Copy-Past... Нельзя ли эту идею куда-то предложить? Чтоб наряду с кукисами страницам имела своё RAM-Disk пространство. Ведь разработчики не стоят на месте! Через год вон обещают Canvas 3D-графику запустить, а там уже энтузиасты захотят нормально свои лабиринты на харде хранить...
Paguo_86PK почитал. а вы отменный извращенец. чувствуется, что трубка ваша полна всегда. насчет ваших боев с бровзерами, вы с флэшем поиграться не пробовали? любопытственная вещь и тоже кругом ест. (все остальное, полагаю, недостойно вас. токо лазенье в ринг0 из ие жабаскрипта, чтоб проэмулировать там супермарио в кодах 8080) что там с досом не помню. тк разобрал давеча последнюю рабочую 16тку на симмки с панельками
Я б на Вас обиделся, если бы не ярлык одного из лучших друзей. Он давно меня так назвал из-за извращенческих алгоритмов в Си... Не сравнивайте пожалуйста. Или тэг CANVAS стандартный уже в спецификации HTML 5, или Flash-пародия на эту тему. Flash - продвигается Adobe и коммерция, а canvas - просто стандарт и с этим уже не поспоришь! Canvas уступает Flash'графике в производительности и в некоторых деталях, о которых уже говорили. Однако, большой плюс этого тэга в том, что если нужно на всю страницу по диагонали написать ОБРАЗЕЦ, то ради этого специально шаманить в Flash-студии или с громадным PNG-фоном - извращение, когда Canvas-средства - уже стандарт HTML 5! Так и RAM-Disk: Одно - как часть DOM, другое - как очередное Flash'вложение. Прошу не быть консерваторами, а задуматься над все за-против относительно RAM-Disk Так что...
Paguo_86PK, конечно извините, но вы говорите отменный бред. Если вы, как сказали, не инженер, то зачем вы тогда лезете не в свою область? Вам сказали эти самые "инженеры", что это нельзя реализовать или по крайней мере бессмысленно. А ваши извращения с html меня просто убили. Зачем так извращаться? Для этих целей есть десятки, если не сотни, скриптовых языков, например, Lua. Если бы все разработчики браузеров кинулись бы открывать доступ к файловой системе компьютера, то представьте себе какая это была бы дыра в безопасности. А HTML 5 - довольно новый стандарт, не могут же все браузеры в один день его начать поддерживать, особенно если учесть, через какое время после появления Acid2 теста его смог пройти IE, то становится понятным, что на стандарты им наплевать. Если все это написанное окажется бредом, я не виноват, что-то у меня голова побаливает.