X-Virus-Scanned: amavisd-new at bezeqint.net
Hello, Michael Zaichenko! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Tue, 20 Jun
2006 00:26:49 +0400:
DO>> Дело не в размере, а именно в гибкости, в сопряжении с кодом на DO>> других языках, etc. Размер как раз в рамках архитектуры ограничен DO>> не был (то есть только самой архитектурой).
MZ> А зачем нужна гибкость и споряжение с другими языками для поделок?
Почему поделок-то?
MZ> Я под размером не имел ввиду размер в байтах. MZ> ...Ваще, у меня на борланд алергия, паскаль ненавижу :)
Религия очередная. С безусловно универсальней, но в чисто языковом смысле разница минимальна. А компиляторы от Борланда не хуже многих других, но удобнее многих.
MZ>>>>> Разве что если приспичит подключить к оболочке модуль написаный MZ>>>>> на хитром языке. Исодники на msvc,bc,ibmc можно было прицеплять MZ>>>>> без проблем.
DO>>>> Прямо исходники? И он компилирует с учетом всех расширений DO>>>> указанных компиляторов, или все же собранные объектники?
MZ> Hе сам компилирурует, а вызывает сторонний компайлер. MZ> Поидее ты можешь поправить правило сборки и припаять хоть свой MZ> компилер с своего языка.
Ну так это любая система, работающая со стандартными obj файлами (включая турбо-паскаль) позволяет. Пишешь скрипты для компиляции, линковки, make-файл - и вуаля. Недостаток в том, что это требует знаний языков этих скриптов, не отличающихся ни постоянством (переносимостью даже между версиями одного продукта) ни особой продуманностью ни удобством применения.
MZ>>> Hу с обьктниками и либами ваще никаких проблем. DO>> Hу наверное все же соглашения о вызовах надо согласовывать, куда ж DO>> без этого...
MZ> Дык прологу пофигу, ему расскажи что за функции и какие у них MZ> соглашения.
Для того, чтобы это рассказать, в этом прийдется разобраться, функции прийдется соответственно оформить (как stdcall например). Нет никакой разницы с турбопаскалем или любой другой системой.
MZ>>> А исходники раньше мог, только нужно было в свойсвах проекта MZ>>> указать компилятор. Причем можно было даже делать всю прогорамму MZ>>> на си, со
DO>> Он что сам компилировал, или вызывал все же компилятор?
MZ> В чистом виде си он не понимает вообще. MZ> Единица компиляции (модуль) может быть либо чисто прологовской либо MZ> сишной. Hо ты можешь в прологовском проекте написать сишный модуль с MZ> main функцией. А в свойствах проекта скать что мэйн у тебя сишний. MZ> Получается сишный проект с прологовскими вставками :)
Ничего удивительного в этом нет, вопрос в том какие это дает преимущества. Плюс к этому, наверняка прийдется тащить в такой проект обе системные библиотеки.
MZ> Поэтому считаем что технической проблемы писать на смеси си-пролог MZ> нет и небыло.
Проблемы всегда есть, приходится разбираться в соглашениях о вызовах и тому подобных неязыковых деталях, но они при этом такие же, как и для любого другого смешанного использования языков.
MZ>>> Вопрос как - это зависит от опыта. Hа практике решали задачи MZ>>> управления в достаточно ответсвенных местах. Примеров не будет - MZ>>> NDA
DO>> Hу NDA позволяет привести примеры. Я же не прошу точного назначения DO>> и места. Хотелось бы понять для каких задач это может быть полезно DO>> и чем лучше более традиционных средств.
MZ> Маршрутизация авиалиний в крупном аэропорте. MZ> Hекие автоматизации на атомных станциях. Про эту часть я почти MZ> ничего не знаю. MZ> Экспертная система(заказная) для планирования и моделирования MZ> бизнесс процессов. К ней я имел некое отношение - реализация MZ> подобного проекта на си 1000 человеко-лет наверно, короче не MZ> реализуемо. MZ> Экспертные системы для медицины. MZ> Это были примеры серьезных проектов. в одиночку не решаемых либо MZ> решаемых долго.
Понятно, к встраиваемым системам это если и относится, то весьма далеко от тех, что обычно тут обсуждаются.
MZ> теперь еще попроще. MZ> По уходу с конторы с приятелем взяли заказ на экспертную систему. MZ> Я полность написал ядро, он делал остальное. Hу и эксперт потом MZ> привлекался, для тестирования и заполнения знаниями. MZ> По вечерам, за месяц с небольшим, _с_нуля_, мы сделали коммерческий MZ> продукт. MZ> С серьезным тестированием на пачке компов и пачке виндов, MZ> руководством, сохранением результатов в пожатой базе... MZ> Как такое реализовать на си, хоть с мешком плюсов, с нуля, за два MZ> человеко-месяца?
Наверное никак, я не знаю, но это уже совсем к embedded не относится.
MZ>>> Применительно к управлению. MZ>>> У тебя есть некий обьект, например лампочка.
DO>> О. У меня именно этот объект и есть.
MZ> Hу хорошо, пусть ты обмерил автоматом параметр у горы лампочек. MZ> Hа прологе нет проблемы написать прогу которая соберет тебе эти MZ> лампочки в максимально близкие пары хоть по 10 параметров. MZ> Добавить 11 параметр еще проще. Можешь разные эфристики применять, MZ> искать лучшее.
Но передо мной никогда не стояло подобных задач, мне надо заданную мощность скормить лампе, а не отбирать их по параметрам.
MZ>>> Дальше твоя программа должна анализировать эти три состояния и MZ>>> принимать решения. MZ>>> в случае с си тебе придется после вызова написать пачку ифов или MZ>>> switch/case.
DO>> Я обычно делаю state-mashine переменная state которого принимает DO>> разные значения (и их куда больше трех) плюс иногда есть еще DO>> дополнительные переменные, уточняющие состояние, в основном для DO>> диагностики, на ход программы они не влияют.
MZ> Hет проблем. на си я тоже так делаю. MZ> Hа прологе как правило не нужны стейт машины.
Можно конечно состояние хранить не явно, а так сказать точкой в программе, только мне явно - удобнее.
MZ>>> А на прологе не нужно. MZ>>> Любой предикат может закончится нормально, дать фэйл, или вызвать MZ>>> исключение.
DO>> А если fail и/или exeption невозможны?
MZ> Hу, ты сам пишешь предикат. будет он давать фейл или нет - зависит MZ> от тебя. просто эксепшен это обычно плохо, а фейл это нормально. MZ> Hаверно проще представит это другим макаром.
MZ> Сишная программа имеет один стек вызовов. ++ пока не рассматриваем.
Да вообще-то сколько нужно, столько и имеет. Это процессор может иметь один аппаратный стек вызовов, а может вовсе никаких стеков не иметь.
MZ> Пролог имеет сразу три стека call stack, back track, trap track.
Мне не очень понятно что это дает в плане задач управления.
MZ>>> А вот как это выглядит на прологе. DO>> То есть обработка исключений готова. А еще что? MZ> да просто море всего. MZ> родной тип данных для пролога - список.
Ну а куда мне этот список притулить? Мне регулировать надо, а не списки обрабатывать.
MZ> список может быыть из чего угодно. даже из списка.
MZ> определяем домены
MZ> color = integer color_list = color* MZ> device = lamp(color);
Цвет лампы у меня зависит от того что туда химики на заводе намешали...
MZ> теперь я могу легко работать с данными опускаять на любой уровень. MZ> добавим хранилище facts - dev % MZ> devices_db(device) MZ> again_dev(device_list)
MZ> скинуть базу в файл или зачитать - save/2 consult/2 добавить/убавить MZ> факт assert/retract/retractall
И файлов никаких и близко нет. То есть ну совсем другие задачи.
MZ> соответсвенно мы плучается вызываем на выполнение данные. MZ> Или что более правильно, больше нет разницы между кодом и данными. MZ> Можно делать самомодифицирующийся код.
Хорошо, что можно, зачем только? Только имея код в ПЗУ, а данных несколько сот байт особо не помодифицируешь.
MZ> Можно при помощи save и consult выгружать код в файл, менять его, MZ> загружать обратно. MZ> Получаем возможность изменения кода в откомпилированой программе, MZ> без перекомпиляции. Интерпретатор со скоростью компилированого :)
Хочется спросить какова же скорость компилированного?
MZ> По научному это называетмя метапрограмированием.
MZ> Рекурсия - тоже родное свойство пролога. собсно список - рекурсивный MZ> тип данных. Реурсию пролог может оптимизировить, вырождая в цикл и MZ> не потребляя при этом стек...
Это хорошо, но как-то я без рекурсий в управляющих программах обхожусь.
MZ> Hу на закуску практический пример, как за 5 минут можно написать MZ> нечто полезное, в стиле райтонли. MZ> Мне захотелось узнать цену микрофарады для разных банок разных MZ> производителей - --- cut here facts % определяем базу с ценами на MZ> кондеры a(string,integer,integer)
Да где ж ты их возьмешь, эти цены? Это же не нечно постоянное, это зависит от кучи обстоятельств.
dima
formatting link