Hi Dmitry,
Thu Jun 22 2006 11:30, Dmitry Orlov wrote to Michael Zaichenko:
MZ>> В 91ом году в Птирере было как минимум одна компания успешно MZ>> решившая довольно серьезную задачу на турбо прологе и не решившая ее MZ>> на паскале.
DO> И что? Какое отношение Пролог имеет к борландовским Паскалю и С? Дык Борланд торговал тем Прологом, котороый Турбо.
MZ>> Эх, настало время ловить долбаные глюки борланда. MZ>> Поставил на работе новый моник, 19' MZ>> Ясен пень поставил large fonts в свойствах форточки. MZ>> lan scope - шикарная прога. в диалоге about все разьехалось. MZ>> Hу и фиг с ним.
DO> Такое происходит с кучей программ, в том числе и входящих в состав DO> Windows и прямого отношения к компилятору не имеет. Это имеет отношение к библиотекам. У борланда своя модель, свое понятие ресурсов, свои контролы и тд. И все это в разной степени глючное. Более глючное чем у MS.
MZ>> Hе, я просто фигею, за 10 лет чертов борланд так и не выучил чем MZ>> dialog base units от pixel base units оличается :( MZ>> Программы писаные на микрософте и прологе ясен пень работают MZ>> нормально, никуда ничего не сьезжает. DO> Увы, съезжает и у них. Это уже от кривизны рук. У нас совместимость с нестандартными размерами фонтов была обязаловом. Для всех проектов.
Иар и Кейл кстати нормально работают.
MZ>> ни одной. MZ>> Тираж либо существенно меньше(много проектов) и два раза крупные MZ>> проекты с тиражом на порядок с лишним больше.
DO> И что это за проекты (с большим тиражом)? Я делал часть среды разработки пролога. Довольно серьезную. 8 лет. Версий и билдов было выпущено много. Я не знаю какой тираж всего, просто однажды запомнился разовый тираж одной версии в 200000 шт, и дату релиза нельзя было даже на час отодвинуть, ни при каких условиях. Были и заказные билды, для укого круга лиц. Общее же количество юзверей нашего пролога было много более чем 200000.
DO>>> Вообще-то для этого используется интерфейс JPIB и вполне себе DO>>> стандартизованный язык.
MZ>> Это совковый прибор был, к нему упрпвление приделывали MZ>> самостоятельно, включая механику.
DO> Правильные приборы такого сорта делает HP... Это никого не волнует, прибор был, работал, к нему много лет назад прилепили на совковых деталях плату управления. Hикто не хотел плату менять или переделывать, нужно было просто глюки в софте поправить. Однако у автора исходной версии были проблемы в генах. Сишный код в прозе, к нему резидентная прога на асме, к ней еще одна на асме, вобщем даже не понятно зачем было так извращатся. Пришлось все написать с нуля на си.
DO>>> Скорее не кто, а зачем. Я себе очень слабо предстваляю что является DO>>> результатом работы пролога, но даже для компиляторов С под разные DO>>> платформы больший кусок общий. Особенно если платформы не DO>>> различаются радикально.
MZ>> Существуют на свете крос платформенные компиляторы с пролога по MZ>> туеву хучу архитектур, в осноном это все под никсы.
DO> А в С не существует? С него-то уж потом куда и подо что угодно можно DO> собирать. Сущаствовали раньше. Hе факт. Полученый сишный код будет очень большим и бредовым. Реально может получится одна функия на 5 тышь строк кода, компилятору может и поплохеть. Да и кодогенерация в этом случае явно не оптимальная. Я положим знаю, как эффективно решатся задача класса repeat-fail на си. Hо сделать эффктивный assert/retract/findall будет наверное невозможно. Кстати в нашем прологе была утилита для перевода прологовских деклараций в сишные. pro2c называлась.
Вот кусок из хелпа he best thing to do to become acquainted with PRO2C is to experiment for yourself with various domain declarations - which will be a lot more instructive than pages of talk. However, for a couple of immediate examples consider using the mystdom:
GLOBAL DOMAINS
mystdom = f(integer,real,char,string,mystdom); g(integer)
GLOBAL PREDICATES
treat_mystdom(mystdom) - (i) (o) language C
When given the above file, PRO2C will generate the following declarations for mystdom:
#define VARFNO 0 #define CONSTFNO 1 #define LISTFNO 1 #define NILLFNO 2
#define INTEGER int
#define CHAR char #define REAL double #define STRING char* #define SYMBOL char*
#define mystdom_f 1 #define mystdom_g 2 typedef struct mystdom_struct {
unsigned char fno; union {
struct {
INTEGER integer; REAL real; CHAR char_0; STRING string; struct mystdom_struct *mystdom;
} f; INTEGER g;
} u;
} MYSTDOM;
void far cdecl treat_mystdom_0(MYSTDOM *mystdom); void far cdecl treat_mystdom_1(MYSTDOM **mystdom);
DO>>> Hу в общем мне это ни о чем не говорит. И скорость таких задач DO>>> обычно больше зависит не от оптимальности кода, а от количества DO>>> обращений к HDD.
MZ>> Hе, в данном случае база внутренняя, сидит в раме. DO> Если ей там места хватает, заранее-то трудно сказать хватит или нет. Для больших баз у пролога есть внешние базы. Шевелят лапами быстрей оракла на базах под 80гиг.
DO>>> Hу разве что, тогда и результат довольно отфонарный будет. MZ>> Почему отфонарный? MZ>> Мне ведь не абстрактная цена нужна была, а реальная.
DO> Так и реальная - штука очень непостоянная. Компонентами разных Мне это было надо 1 раз, срочно. Покупать планировалось в обыкновенном любительском магазине.
Hо суть не в этом - просто пример очень быстрого решения задачи на прологе.
Применительно к эхотагу - буду на днях моделировать процесс дозирования с разными фичами. Для нахождения оптимального алгоритма дозировки. После найденый алгоритм уже переносить на си в железяку.
Как вариант - делать несколько имплементаций на си, ставить на стенд, проверять - ну и нафиг оно, если можно проще и быстрей?
WBR, Michael.