Re: parascriptum: release v0.2
Justin Forest <[email protected]> Tue, 30 Mar 2004 02:13:07 +0400
| Newsgroups | gmane.comp.misc.faerion.devel |
|---|---|
| Message-ID | <[email protected]> |
1. Файлы и пути. Настоятельно рекомендую не использовать фокусов вроде INCDIR в рамках одного проекта. Даже в модулей одного проекта, где файловая иерархия сколько-нибудь статична, лучше использовать относительные пути, а не "какие-то волшебные". Rascal в пример. Выносить заголовки в отдельный каталог -- тоже сомнительной ценности привычка. 2. Мэйкфайлы. Тут всё хорошо, только называть их лучше GNUmakefil, в качестве гарантии, что обрабатываться они будут GNU мэйком (а с bsd make они не совместимы). 3. Макросы. Макросы -- это плохо. Допускаю, что иногда они существенно сокращают количество набираемого кода (таблица команд в Фэрионе) или избавляют от необходимости изменять большое количество файлов (*_API). Вещи вроде PSCR_CLONE, по-моему, должны быть выполнены в виде функций. 4. Типы данных. Оператор отрицания применяется к булевым выражениям. Например, !(a < b), допустимо. Тип char таким не является, поэтому "!*str" -- дурной тон, и понижает читабельность (порядок аргументов расставляй по вкусу). Лучше писать "*src != 0" (а то и вовсе '\0'). (Это если докапываться до всего, от начала и до конца.) 5. Обработчики команд. При встрече каждой команды искать соответствующую функцию в бинарнике, при этом говорить о производительности? Я (а также apache.orgи многие другие) предпочёл бы, чтобы модуль экспортировал массив структур, содержащих имя команды и адрес обработчика. Кажется нечто подобное у тебя было изначально, но потом мутировало. Экспортировать можно функцию, которая будет возвращать указатель на массив структур (размер сам придумаешь как определить (например, вместо имени в последнем элементе будет NULL)). Получать функция будет номер версии интерфейса, для совместимости с будушими версиями. Кроме того, так ты избавишься от (и без того надуманной) проблемы с прочерками и невозможностью использования and в качестве имени функции. В остальном достаточно вменяемо, концептуально. Только можно сделать набор дефолтных команд, а внешними библиотеками оформлять либо дополнительные команды, либо подменять дефолтные. И что, интерактивного шелла не будет? > так 390 040 линий тестового кода (около восьми > мегабайт) даже на моей несколько смехотворной тачке распарсились Parabellym -- система, конечно, масштабируемая, но размеры конфига ты, чесслово, переоцениваешь. > код лично мне не нравится. Ну да. Говорилось о том, что begin/end будут вполне себе командами, помнишь? > PKR -- Process sKip Register > PMR -- Process Manage Register > PSR -- Process Status Register > > PSR - это то, куда кладет свой результат команда. если модуль не > найден - кладем ноль. Угу. > PMR - эта штука управляет блоками. создается область видимости и все > такое. используется при очередном рекурсивном назначении и только. > блоки, кстати, можно создавать и на ровном месте, только следует > помнить, что PMR может быть сброшен. но это еще над управляющими > командами подумать надо. Нифига не понятно. Как создаёт, область видимости чего? Что такое "рекурсивное назначение" и "ровное место"? Имхо такой регистр должен устанавливаться если обрабатываемая команда считает себя открывающей блок. Должна быть также команда, закрывающая его. Много регистров будет, но это не смущает пока. > PKR - отвечает за пропуск ближайшей следующей команды. блок, > естественно никогда пропущен не будет и PKR будет опять сброшен в > ноль. То есть как в случае невыполнившегося условия? Тогда все эти регистры нужно будет заносить в стэк при открытии блока, и вытаскивать обратно при выходе, не так ли? Пока ничего такого не нашёл. (Стэк здесь, естественно, не машинный, а твой собственный.) > нормальные состояния для регистров: 1, 1, 0 - соответсвенно. Соответственно чему? Перечень у тебя в одном порядке, описание -- в обратном. > все управляющие я решил таки подчеркнуть. чтоб не путать с другими. > если вам понравится такая реализация (хотя бы абстрактно), то я буду > продолжать, т.к. в ходе работы появились новые идеи. да и это > достаточно весело из чисто линейного парсера сделать еще что-то ;) Ну да, я однажды хотел dns подправить в фэрионе, получили rascal и parabellym. Осторожнее. ;) Мне пока нравится, а если учесть вышеизложенные замечания -- так вообще здорово будет. > хекс, а что ты говорил про сделать подулем? А что я говорил про сделать модулем? ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click Discussions in this list are held in two languages: English and Russian. When replying, please use the language that the sender of the original message is guaranteed to understand, or use English.