Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 1226 12-12-2006 02:37 | |
Ответ на »сообщение 1225« (Mirage)
___________________________
На потоках, а на чем еще? :-) Написать свой менеджер нитей в пользовательском режиме - невозможно.
А вот семафоры для синхронизации и AWAIT реализованы быстрые, пользовательского режима, работают в 12 раз быстрее системных.
№ 1225 12-12-2006 00:26 | |
Ответ на »сообщение 1218« (Илья Ермаков)
___________________________
На данный момент решена задача создания многопоточной версии BlackBox. Считанные дни остались до публикации нами расширения Active BlackBox - с поддержкой активных процедур, активных объектов и некоторых других интересных вещей. Функциональность Active Oberon реализована в полной мере, без изменения языка, и с некоторыми дополнительными преимуществами.
Ух ты, это как в BlueBottle? Круто!
А как оно реализовано под Windows? Через потоки?
№ 1224 11-12-2006 07:47 | |
Ответ на »сообщение 1223« (Сергей Губанов)
___________________________
Ответ на »сообщение 1221« (Илья Ермаков)
Kernel.Unload(Kernel.ThisMod("ИмяМодуля"));
Kernel.ThisMod - загрузит модуль если он ещё не был загружен ранее. Если мы хотим модуль выгрузить, то загружать его перед этим, видимо, не стоит.
IMPORT Kernel;
...
Kernel.Unload(Kernel.ThisLoadedMod("ИмяМодуля"));
...
refcnt проверять не надо - это уже делает ThisLoadedMod.
№ 1223 11-12-2006 07:06 | |
Ответ на »сообщение 1221« (Илья Ермаков)
Kernel.Unload(Kernel.ThisMod("ИмяМодуля"));
Kernel.ThisMod - загрузит модуль если он ещё не был загружен ранее. Если мы хотим модуль выгрузить, то загружать его перед этим, видимо, не стоит.
№ 1222 11-12-2006 07:01 | |
Ответ на »сообщение 1220« (Maximus)
Не могу найти, каким образом можно выгрузить модуль непосредственно из программы (и можно ли это сделать вообще). В режиме командной строки понятно - DevDebug.Unload или DevDebug.UnloadThis модуль. А вот в самой процедуре как? UnloadThis в форме UnloadThis(выгружаемый модуль) не работает. Подскажите, кто знает.
Как-то так:
...VAR string: ARRAY OF CHAR...
VAR mod: Kernel.Module;
BEGIN
mod := Kernel.ThisLoadedMod(SHORT(string$));
IF mod # NIL THEN
IF mod.refcnt = 0 THEN
Kernel.UnloadMod(mod);
IF mod.refcnt < 0 THEN
Log.String("... Модуль был выгружен.")
ELSE
Log.String("... Выгрузка, почему-то, не произошла...")
END
ELSIF mod.refcnt > 0 THEN
Log.String("... Модуль нельзя выгружать! Его сейчас используют другие модули.")
ELSE
Log.String("... Модуль уже был выгружен ранее.")
END
ELSE
Log.String("... А этот модуль и не был загружен, выгружать нечего...")
END
№ 1221 11-12-2006 06:53 | |
Ответ на »сообщение 1220« (Maximus)
___________________________
Не могу найти, каким образом можно выгрузить модуль непосредственно из программы (и можно ли это сделать вообще). В режиме командной строки понятно - DevDebug.Unload или DevDebug.UnloadThis модуль. А вот в самой процедуре как? UnloadThis в форме UnloadThis(выгружаемый модуль) не работает. Подскажите, кто знает.
IMPORT Kernel;
...
Kernel.Unload(Kernel.ThisMod("ИмяМодуля"));
...
№ 1220 11-12-2006 06:03 | |
Не могу найти, каким образом можно выгрузить модуль непосредственно из программы (и можно ли это сделать вообще). В режиме командной строки понятно - DevDebug.Unload или DevDebug.UnloadThis модуль. А вот в самой процедуре как? UnloadThis в форме UnloadThis(выгружаемый модуль) не работает. Подскажите, кто знает.
№ 1219 11-12-2006 05:56 | |
Ответ на »сообщение 1212« (Сергей Перовский)
___________________________
Ответ на »сообщение 1211« (Илья Ермаков)
___________________________
>>>Просто среды разработки Оберонов, даже работая поверх другой ОС, являются мини-операционными системами.
Это я понимаю...
Я не понимаю, что это даст мне, как прикладному программисту.
Хорошо, оставим пока в покое динамическую загрузку и компонентность саму по себе.
Принципы архитектуры, обкатанные в Оберон-системах, позволяют строить ПО из четко выделенных кубиков и компактных шин-интерфейсов между ними. Придерживаясь этих принципов, мы можем легко развивать систему, реконфигурировать ее переделкой отдельных деталей и подключением новых. Динамическая загрузка же позволяет это делать прямо на лету.
Могу привести и самый что ни на есть пример "что это даст прикладному программисту".
Реальная ситуация из практики: демонстрация почти готовой системы (складской учет) клиенту. Клиент говорит: все прекрасно, все нравится, только вот эту большую форму ввода разбить бы на пять маленьких, последовательно открывающихся, потому что у оператора глаза уставать будут за рабочий день по большому окошку бегать. С точки зрения клиента это совсем мелочь. С точки зрения Дельфи-программиста это означает замену одного модуля+dfm на пять новых модулей+dfm, и простым ctrl-v здесь не обойдешься, работы может быть часа на полтора-два. С точки зрения BlackBox-программиста задача сводится к разрезанию одного составного документа на 5 отдельных, которые продолжают взаимодействовать с теми же программным модулем, динамически устанавливая с ним связи (сам модуль ни сном ни духом не знает о том, какой GUI на него навешен, его дело - предоставить переменные-контакты для подключения любых составных документов-форм). Код не переписываем, даже не открываем и не перекомпилируем. Работа сводится к манипуляциям с мышкой в течении 5 минут, которые делаются прямо при клиенте в соответствии с его капризами. Все.
5 минут или полтора часа - не преимущество ли? Все это основано на динамической загрузке модулей и удачной архитектуре BlackBox Framework. И на отказе в СИСТЕМНЫХ библиотеках от глубоких иерархий наследования.
№ 1218 11-12-2006 03:54 | |
Ответ на »сообщение 1216« (Как слышно? Приём!)
___________________________
На данный момент решена задача создания многопоточной версии BlackBox. Считанные дни остались до публикации нами расширения Active BlackBox - с поддержкой активных процедур, активных объектов и некоторых других интересных вещей. Функциональность Active Oberon реализована в полной мере, без изменения языка, и с некоторыми дополнительными преимуществами.
Следующая задача - поддержка распределенных вычислений, модели распределенного взаимодействия объектов, объектной базы данных. Это будет выполняться под конкретный проект, на котором и будет испытано. Идей по этому поводу много, но работы пока не начинались, т.к. до создания многопоточной среды писать на Блэкбоксе серверные приложения было невозможно.
№ 1217 11-12-2006 03:52 | |
Ответ на »сообщение 1213« (Как слышно? Приём!)
___________________________
>>>Ну-ка, постройте иерархию (дерево) "камень-ножницы-бумага".
Камень-ножницы-бумага это скорее всего не классы, а значения.
А если и классы, то никак не являющиеся наследниками друг друга, а имеющие общий прототип.
И ничего тут сложного нет.
В наследовании идет речь об уровнях абстракции. А Вы приводите пример с сущностями очевидно одного уровня.
Кенгуру со стингером - классика жанра. Нужен был прототип движущегося объекта, а создали сразу солдата, не задумываясь о дальнейшем расширении системы. Вот и наследовали кенгуру (когда потребовалось) от солдата. И получили объект, сначала убегающий от вертолета, а потом его обстреливающий.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|