Текущий архив: 2007.09.16;
Скачать: CL | DM;
ВнизBlackBox и Оберон Найти похожие ветки
← →
StriderMan © (2007-07-24 17:11) [0]наткнулся вот на такую статейку.
http://stfw.ru/page.php?id=5112
Собственно наибольший интерес вызвал Оберон и BlackBox. Кто знаком с этими языками, просьба высказаться.
← →
wicked © (2007-07-24 20:10) [1]статью в топку - наивное, ничем не подкрепленное бла-бла, похожее на лай собаки на караван
а насчет знакомых с языком и средой - поищи контакты юзера Ермак - он как раз этим занимается
← →
TUser © (2007-07-24 20:18) [2]При всем уважении к Вирту, Си жив. И у си есть мощьный аргумент - переносимость, то есть существуют компиляторы, понимающие похожие (очень) диалекты этого языка для разных платформ.
← →
Думкин © (2007-07-24 20:26) [3]> StriderMan © (24.07.07 17:11)
Тут на Ермака выходить надо. Язык нормальный.Компонентный Паскаль — усовершенствованная версия языка Оберон-2, разработанная компанией Oberon microsystems. Компания Oberon microsystems благодарит Х.?Мёссенбёка и Н.?Вирта за дружеское разре?шение использовать их Сообщение о языке Оберон-2 в качестве основы данного документа.
Компонентный Паскаль — язык общего назначения в традиции языков Паскаль, Модула-2 и Оберон. Его самые важные черты — блочная структура, модульность, раздельная компиляция, статическая типизация переменных [static typing] и строгий контроль типов (в том числе через границы модулей), расширенное переопределение типов [type extension] вместе с методами, динамическая загрузка модулей, а также автоматический сбор мусора.
Из хелпа по Блекбокс. Про то что на Модуле серьезные вещи писали - писать?
← →
Думкин © (2007-07-24 20:31) [4]
BlackBox
Компания Oberon microsystems разрабатывала компонентную библиотеку BlackBox Component Framework начиная с 1992 г. (сначала библиотека называлась Oberon/F). Эта библиотека написана на Компонентном Паскале и упрощает разработку компонент графического пользовательского интерфейса. Она поставляется с несколькими компонентами, включая текстовый редактор, систему визуального проектирования, средство доступа к базам данных SQL, интегрированную среду разработки, а также систему поддержки выполнения программ на Компонентном Паскале. Весь пакет представляет собой развитый, но весьма нетребовательный к системным ресурсам инструмент быстрой разработки компонентных приложений, названный BlackBox Component Builder. Он нетребователен к системным ресурсам, т.к. полностью построен из модулей Компонентного Паскаля — включая ядро со сборщиком мусора, а также самого компилятора языка Компонентный Паскаль. Это — иллюстрация как мощи концепции компонентного программного обеспечения вообще, так и адекватности языка Компонентный Паскаль в частности.
Недавно диапазон приложений системы BlackBox Component Builder был значительно расширен за счет среды кросс-программирования Denia, которая является компонентной, расширающей BlackBox. Denia позволяет выполнять кросс-программирование на Компонентном Паскале для новой операционной системы реального времени Portos, которая тоже полностью реализована на Компонентном Паскале. Portos предназначен для встроенных систем и приложений с жесткими требованиям реального времени [hard real-time requirements], например, в робототехнике и промышленной автоматизации.
← →
Interior (2007-07-24 20:41) [5]Интересно.
А компонентный Паскаль чем от просто Паскаля отличается?
← →
Думкин © (2007-07-24 20:47) [6]Исключенные средства
• Типы-диапазоны
Используйте один из стандартных целых типов.
• Перечислительные типы
Используйте вместо них целые константы.
• Произвольные диапазоны для массивов
Массивы теперь всегда определены над целым диапазоном 0..max-1.
Пример
A = ARRAY 16 OF INTEGER (* разрешены индексы из диапазона 0..15 *)
• Нет общих множеств
Тип SET теперь означает набор целых чисел, который может включать элементы 0..31.
• Нет явного оператора DISPOSE
Неиспользуемая более память автоматически собирается сборщиком мусора. Вместо DISPOSE, просто присвойте переменной значение NIL.
• Нет вариантных записей
Используйте (расширенное) переопределение записей.
• Нет упакованных структур
Используйте типы SHORTCHAR или BYTE для значений, умещающихся в байт.
• Нет GOTO
• Нет стандартных функций PRED и SUCC
Используйте DEC и INC для целых значений.
• Нет встроенных средств ввода/вывода
Нет файловых типов. Ввод/вывод обеспечивается библиотечными процедурами.
← →
Думкин © (2007-07-24 20:48) [7]Измененные средства
• Стандартная процедура ENTIER вместо ROUND
• Синтаксис для констант типа REAL
3.0E+4, но не 3.0e+4
• Синтаксис для объявлений указательных типов
P = POINTER TO R
вместо
P = ^R
• Синтаксис для оператора CASE
"|" вместо ";" в качестве разделителя случаев.
Предложение ELSE.
Пример
CASE i * 3 - 1 OF
0: StdLog.String("нуль")
| 1..9: StdLog.String("от единицы до девяти")
| 10, 20: StdLog.String("десять или двадцать")
ELSE StdLog.String("что-то еще")
END
• Имя процедуры должно быть повторено
Пример
PROCEDURE DrawDot (x, y: INTEGER);
BEGIN
END DrawDot;
• Большие и малые буквы различаются
Пример "proc" не то же самое, что "Proc".
• Синтаксис литерных цепочек
Литерные цепочки-константы заключаются между " или между ". В одной цепочке не может быть одновременно одиночных и двойных кавычек. Литерные цепочки-константы единичной длины могут присваиваться литерным (character) переменным.
Пример
"That"s great" "Write "hello world" to the screen"
ch := "x"
ch := "x"
• Комментарии
Комментарии заключаются между (* и *) и могут быть вложены.
• Скобки для множеств
Константы-множества задаются между { и } вместо [ и ].
Пример {0..2, 4, j..2 * k}
• Синтаксис функций
Используйте ключевое слово PROCEDURE также и для функций вместо FUNCTION.
Процедуры, возвращающие значение, всегда должны иметь (возможно пустой) список параметров в своих объявлениях и в вызовах.
Результат функции возвращается явно оператором RETURN, вместо присваивания имени функции.
Пример
PROCEDURE Fun (): INTEGER;
BEGIN
RETURN 5
END Fun;
вместо
FUNCTION Fun: INTEGER;
BEGIN
Fun := 5
END;
n := Fun() вместо n := Fun
• Объявления
Последовательность объявлений теперь
{ ConstDecl | TypeDecl | VarDecl} {ProcDecl | ForwardDecl}
вместо
[ConstDecl] [TypeDecl] [VarDecl] {ProcDecl}.
Упреждающие (Forward) объявления необходимы, если процедура используется до ее определения.
Пример
PROCEDURE ^ Proc;
вместо
PROCEDURE Proc; FORWARD;
• Процедурные типы
Процедуры могут быть не только переданы в качестве параметров, но и присваиваться переменным процедурных типов.
Пример
TYPE P = PROCEDURE (x, y: INTEGER);
VAR v: P;
v := DrawDot; (* присваивание *)
v(3, 5); (* вызов DrawDot(3, 5) *)
• Явные END вместо составных операторов
BEGIN может появляться только перед последовательностью операторов, но не внутри ее. IF, WHILE, и LOOP всегдад заканчиваются ключевым словом END.
• Оператор WITH
Оператор WITH является локальной охраной типа, он не подразумевает наличие скрытой переменной и не открывает новый диапазон видимости для переменных.
См. детали в описании языка.
• ELSIF
Операторы IF могут иметь несколько ветвей.
Пример
IF name = "top" THEN
StdLog.Int(0)
ELSIF name = "bottom" THEN
StdLog.Int(1)
ELSIF name = " charm" THEN
StdLog.Int(2)
ELSIF name = "beauty" THEN
StdLog.Int(3)
ELSE
StdLog.String("strange")
END
• BY вместо только DOWNTO в FOR
Циклы FOR могут использовать любое константное значение в качестве приращения (положительного или отрицательного).
Пример
FOR i := 15 TO 0 BY -1 DO StdLog.Int(i, 0) END
• Булевы выражения используют "сокращенное" вычисление
Вычисление булева выражения прекращается, как только его результат определен.
Пример
Следующее выражение не вызывает ошибки при выполнении, когда p = NIL:
IF (p # NIL) & (p.name = "quark") THEN
• Константные выражения
В объявлениях констант допустимы не только буквальные константы, но и константные выражения.
Пример
CONST
zero = ORD("0");
one = zero + 1;
• Разные операции
# используется вместо <> для проверки на неравенство.
& используется вместо AND для логической конъюнкции.
~ используется вместо NOT для логического отрицания.
• Явное преобразование к меньшему типу с помощью SHORT
Включение типов для числовых типов позволяет присваивать значения меньшего типа переменной большего типа. Присваивание в обратном направлении должно использовать стандартную процедуру SHORT.
Пример
int := shortint;
shortint := SHORT(int)
← →
Думкин © (2007-07-24 20:50) [8]Новые средства
• Шестнадцатеричные числа и литеры
Пример
100H (* десятичное 256 *)
0DX (* возврат каретки *)
• Дополнительные числовые типы
Добавлены типы LONGINT, SHORTINT, BYTE, SHORTREAL.
• Симметрическая разность множеств
Множества могут вычитаться.
• Новые стандартные процедуры
Добавлены новые стандартные процедуры INC, DEC, INCL, EXCL, SIZE, ASH, HALT, ASSERT, LEN, LSH, MAX, MIN, BITS, CAP, ENTIER, LONG и SHORT.
• LOOP с EXIT
Имеется новый оператор цикла с явным операторов выхода. См. детали в сообщении о языке.
• ARRAY OF CHAR могут сравниваться
Литертные массивы могут сравниваться с помощью операций =, #, <, >, <= и >=.
• Открытые массивы, многомерные массивы
Можно определять массивы, не указывая их размера, возможно, с несколькими измерениями.
Пример
VAR a: POINTER TO ARRAY OF CHAR;
NEW(a, 16)
PROCEDURE ScalarProduct (a, b: ARRAY OF REAL; VAR c: ARRAY OF REAL);
TYPE Matrix = ARRAY OF ARRAY OF REAL;
PROCEDURE VectorProduct (a, b: ARRAY OF REAL; VAR c: Matrix);
• Разыменование указателей не обязательно
Операция разыменования ^ может быть опущена.
Пример
root.next.value := 5
вместо
root^.next^.value := 5
• Модули
Модули суть единицы компиляции, упрятывания информации, а также загрузки. Упрятывание информации -- одна из главных черт объектно-ориентированного программирования. Возможны разные уровни упрятывания информации: полное упрятывание, экспорт только для чтения/реализации, полный экспорт.
См. детали в сообщении о языке.
• Расширенное переопределение типов
Типы записей (указательные типы) могут переопределяться, обеспечивая таким образом полиморфизм. Полиморфизм -- одно из главных средств объектно-ориентированного программирования.
• Методы
Процедуры могут быть связаны с типами записей (указательными типами), таким образом обеспечивая позднее связывание [late binding]. Позднее связывание является одним из главных средств объектно-ориентированного программирования. Такие процедуры еще называются методами.
• Операция с цепочками
Литерная цепочка, содержащаяся в литерном массиве, может быть выбрана посредством селектора $.
• Атрибуты записей
По умолчанию записи не могут быть переопределены, но могут быть помечены как EXTENSIBLE, ABSTRACT или LIMITED.
• Атрибуты методов
Методы не могут быть переопределены по умолчанию, но могут быть помечены как EXTENSIBLE, ABSTRACT или EMTPY. Вновь вводимые методы должны быть помечены как NEW.
← →
ferr © (2007-07-24 20:57) [9]Ой, я прям не знаю.. Что-то это мышиную возню напоминает.
В паскале, я всегда хотел увидеть обобщённые типы, неважно как реализованные, и в дополнении к этому библиотечку по аналогии с STL. Как жить без этого, я представить не могу..
← →
tesseract © (2007-07-24 21:04) [10]Прелестей много, но вот как без упакованных записей с блоками памяти и специфическим оборудованием работать? Можно, но ведь какие потери производительности.
← →
wicked © (2007-07-24 21:07) [11]
> Прелестей много, но вот как без упакованных записей с блоками
> памяти и специфическим оборудованием работать? Можно, но
> ведь какие потери производительности.
>
сказано ж "используйте BYTE"
хотя очень любопытно мне - вот статейка та рассказывает, как modula/oberon используются в оборонной промышленности...
хотелось бы примеры увидеть, если их есть, конечно... хоть на одно вранье автора статьи меньше будет
← →
Думкин © (2007-07-24 21:15) [12]
> wicked © (24.07.07 21:07) [11]
Если широко, то к Ермаку. Ссылки сейчас найти не могу. Дам это:Успех Модулы-2 был наиболее значителен в задачах с высокими требованиями на надежность, таких как системы управления движением. <Например, практически все бортовое программное обеспечение на запускаемых в настоящее время российских спутниках связи пишется на Модуле-2 с помощью кросс-среды разработки приложений, описанной А.А.Колташевым в докладе на конференции JMLC"2003; см. Modular Programming Languages. Lecture Notes in Computer Science (LNCS 2789), Springer-Verlag, 2003, cc. 98-101>
← →
Однокамушкин (2007-07-24 22:06) [13]
> wicked © (24.07.07 21:07) [11]
http://www.uni-vologda.ac.ru/oberon/index.html
http://www.oberon2005.ru/
http://www.inr.ac.ru/~info21/
http://oberoncore.ru/
← →
DiamondShark © (2007-07-24 23:40) [14]
> Прелестей много, но вот как без упакованных записей с блоками
> памяти и специфическим оборудованием работать?
Дык, исходники Оберон Систем и БлюБоттл (это ОС такие) доступны...
А зачем при работе с оборудованием записи?
← →
DiamondShark © (2007-07-24 23:54) [15]
> Исключенные средства
Вот это у меня всегда бурю негодования вызывало.
> • Типы-диапазоны
И лишились:
- полезной информации для возможной оптимизации
- контроля значений
> • Перечислительные типы
то же, что для диапазонов.
+ идеологический прокол: перечислимые типы -- это не именованные целочисленные константы, а именно что перечислимые сущности
> • Произвольные диапазоны для массивов
У массивов не было диапазонов. У массивов был тип индекса.
В сочетании с типами-диапазонами и перечислимыми типами это была очень интересная и стройная концепция.
> • Нет общих множеств
> Тип SET теперь означает набор целых чисел, который может
> включать элементы 0..31.
Множества просто жалко.
А теперь SET -- это изврат, вызваный к жизни тем, что в языке отсутствуют битовые операции над целыми.
> • Нет GOTO
Это религия.
> • Нет стандартных функций PRED и SUCC
> Используйте DEC и INC для целых значений.
Что совой об пень, что пнём по сове.
Если уж на то пошло, то DEC и INC -- тоже фтопку. Есть же операция "+".
← →
icWasya © (2007-07-25 09:37) [16]а для любителей поспорить - сюда http://www.delphikingdom.com/asp/talktopic.asp?ID=368
← →
tesseract © (2007-07-25 11:25) [17]
> сказано ж "используйте BYTE"
А размер может быть три байта, и довольно нередко. Придёться Shl/Shr всё перемешивать и размешивать.
← →
Mystic © (2007-07-25 12:30) [18]> В паскале, я всегда хотел увидеть обобщённые типы, неважно
> как реализованные, и в дополнении к этому библиотечку по
> аналогии с STL. Как жить без этого, я представить не могу.
Тебя спасет Ada?
← →
StriderMan © (2007-07-25 12:52) [19]Поставил вчера блэкбокс, при нем отличный русский мануал/тюториал. Но сама IDE очень убогая, если ее вообще можно IDE назвать, скорее SDK. Прям таки спартанская - дальше некуда.
"Фишку" языка пока не уловил, но эксперименты продолжу
← →
tesseract © (2007-07-25 14:48) [20]
> "Фишку" языка пока не уловил, но эксперименты продолжу
Фишка - язык функциональный, легче для программирования. Хотя переучиваться бывает тяжело.
← →
tesseract © (2007-07-25 14:49) [21]
> "Фишку" языка пока не уловил, но эксперименты продолжу
Фишка - язык функциональный, легче для программирования. Хотя переучиваться бывает тяжело.
← →
Однокамушкин (2007-07-25 14:50) [22]
> tesseract © (25.07.07 14:48) [20]
> Фишка - язык функциональный, легче для программирования.
Это с каких пор Оберон функциональным стал?!!!!
← →
ferr © (2007-07-25 15:05) [23]?!!!!!!!
← →
StriderMan © (2007-07-25 15:36) [24]по-началу смущает, что единицей абстракции (не пинайте за терминологию:)) является модуль, впрочем в Delphi все тоже самое, только не явно.
← →
Ермак © (2007-08-19 00:09) [25]"Ермака помяни, он и появится" :-) Давно не бывал на этом форуме, в силу того, что так сложилось, что с Дельфи уже давно не работаю.
Совсем вкратце про КП/ББ.
Идеология здесь особенная - это не среда разработки, а интегрированная среда разработки и выполнения. Кто знает Smalltalk, LISP-среды, те поймут. Но здесь 100% компиляция в машинный код. Среда выглядит спартански, но это не среда, а мета-среда, из которой можно вылепить нужный инструмент ("сама себе макроязык"). К примеру, текст - это не просто текст, а составной документ, который может внедрять в себя произвольное дерево графических интерактивных объектов (как пример - такая штука: http://oberoncore.ru/index.php?option=com_content&task=view&id=96&Itemid=29). А сам Framework ориентирован на разработку таких графических объектов-контейнеров. Если нужны рюшки - то с этим сложно, только выход на WInApi (хотя есть готовые библиотеки у нас на оберон-коре, которые позволяют кое-что приукрасить, типа круглых окон). Зато легко с содержательной графикой, документоориентированной. К примеру, поддержка глобального undo-redo для сложных составных документов без спец. усилий - и т.п.
Язык - из серии компонентно-ориентированных, коих ещё Ява и Шарп.
С Явой в чём-то похожи (например, очень легко сделать двустороннее соответствие конструкций - у Esmertec, Inc. (esmertec.com, компания, отпочковавшаяся от ОберонМикросистемс) есть реализации, в которых в одном адресном пространстве с общим сборщиком шуруют классы Ява и модули Компонентного Паскаля.
Однако Ява не особо удачна для системного программирования, тут КП даст большую фору - и по многим причинам. Например, модуль и тип данных - это ортогональные абстракции, и смешивание их в одном понятии класса порождает большую путаницу. МНого казалось бы мелочей, но они делают возможным интересные архитектурные приёмы, которые на Яве невозможны в принципе. И, наконец, - за счёт иной системы типов (и объектных - в виде расширяемых записей) значительно падает нагрузка на динамику и сборщик мусора (попробуйте в Яве поработать с объектными сообщениями - это значит, что вам всё время надо жрать память...). Про архитектурные особенности см. здесь: http://oberoncore.ru/index.php?option=com_content&task=blogcategory&id=16&Itemid=22 .
Так же очень интересна небольшая книжка К. Пфистера "Компонентное ПО", хоть и давняя, но актуальная, со сравнением разных компонентных моделей:
http://oberoncore.ru/index.php?option=com_content&task=blogcategory&id=14&Itemid=10 .
В принципе, ББ стоит рассматривать как потенциально переносимую платформу, т.к. изначалально он таким и был (версия под старый МакОС) и скоро будет снова - готовящаяся нами версия под Линукс. Такая приятная особенность - в рамках одной аппаратной платформы прикладные модули не будут требовать даже перекомпиляции.
В общем, со всеми вопросами можно к нам на форум: forum.oberoncore.ru .
Засим исчезаю, зашёл случайно, Яндекс привёл :-)
P.S. Дабы перед уходом дать почву для жарких дебатов и мордобою :-), даю ссылочку http://rbogatyrev.livejournal.com/2007/05/28/ , где, кроме всяких других интересностей, есть информация о проекте "Отечественной перспективной ОС"...
С наилучшими пожеланиями к участникам
некогда первого для меня программистского форума,
Илья Ермаков.
← →
-Ермак (2007-08-19 00:10) [26]"Ермака помяни, он и появится" :-) Давно не бывал на этом форуме, в силу того, что так сложилось, что с Дельфи уже давно не работаю.
Совсем вкратце про КП/ББ.
Идеология здесь особенная - это не среда разработки, а интегрированная среда разработки и выполнения. Кто знает Smalltalk, LISP-среды, те поймут. Но здесь 100% компиляция в машинный код. Среда выглядит спартански, но это не среда, а мета-среда, из которой можно вылепить нужный инструмент ("сама себе макроязык"). К примеру, текст - это не просто текст, а составной документ, который может внедрять в себя произвольное дерево графических интерактивных объектов (как пример - такая штука: http://oberoncore.ru/index.php?option=com_content&task=view&id=96&Itemid=29). А сам Framework ориентирован на разработку таких графических объектов-контейнеров. Если нужны рюшки - то с этим сложно, только выход на WInApi (хотя есть готовые библиотеки у нас на оберон-коре, которые позволяют кое-что приукрасить, типа круглых окон). Зато легко с содержательной графикой, документоориентированной. К примеру, поддержка глобального undo-redo для сложных составных документов без спец. усилий - и т.п.
Язык - из серии компонентно-ориентированных, коих ещё Ява и Шарп.
С Явой в чём-то похожи (например, очень легко сделать двустороннее соответствие конструкций - у Esmertec, Inc. (esmertec.com, компания, отпочковавшаяся от ОберонМикросистемс) есть реализации, в которых в одном адресном пространстве с общим сборщиком шуруют классы Ява и модули Компонентного Паскаля.
Однако Ява не особо удачна для системного программирования, тут КП даст большую фору - и по многим причинам. Например, модуль и тип данных - это ортогональные абстракции, и смешивание их в одном понятии класса порождает большую путаницу. МНого казалось бы мелочей, но они делают возможным интересные архитектурные приёмы, которые на Яве невозможны в принципе. И, наконец, - за счёт иной системы типов (и объектных - в виде расширяемых записей) значительно падает нагрузка на динамику и сборщик мусора (попробуйте в Яве поработать с объектными сообщениями - это значит, что вам всё время надо жрать память...). Про архитектурные особенности см. здесь: http://oberoncore.ru/index.php?option=com_content&task=blogcategory&id=16&Itemid=22 .
Так же очень интересна небольшая книжка К. Пфистера "Компонентное ПО", хоть и давняя, но актуальная, со сравнением разных компонентных моделей:
http://oberoncore.ru/index.php?option=com_content&task=blogcategory&id=14&Itemid=10 .
В принципе, ББ стоит рассматривать как потенциально переносимую платформу, т.к. изначалально он таким и был (версия под старый МакОС) и скоро будет снова - готовящаяся нами версия под Линукс. Такая приятная особенность - в рамках одной аппаратной платформы прикладные модули не будут требовать даже перекомпиляции.
В общем, со всеми вопросами можно к нам на форум: forum.oberoncore.ru .
Засим исчезаю, зашёл случайно, Яндекс привёл :-)
P.S. Дабы перед уходом дать почву для жарких дебатов и мордобою :-), даю ссылочку http://rbogatyrev.livejournal.com/2007/05/28/ , где, кроме всяких других интересностей, есть информация о проекте "Отечественной перспективной ОС"...
С наилучшими пожеланиями к участникам
некогда первого для меня программистского форума,
Илья Ермаков.
← →
-Ермак (2007-08-19 00:10) [27]Пардон за дубль.... Думал, форум не признал и не добавил...
← →
axis_of_evil © (2007-08-19 00:22) [28]StriderMan © (25.07.07 12:52) [19]
можно еще и с Bluebottle OS побаловаться :>
// книжка по Inside с исходниками прилагается
← →
noname_ (2007-08-19 10:51) [29]2 ferr [9]
Oberon-2 с генериками и другими плюшками
http://sourceforge.net/projects/ooc
бинарники есть в репозиториях Ubuntu, Debian/unstable
← →
Ермак © (2007-08-19 20:50) [30]Да, а вот це к вопросу о серьёзных применениях в реал-тайме и т.п.
http://wiki.oberoncore.ru/index.php/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F
← →
Ермак © (2007-08-19 20:50) [31]Да, а вот це к вопросу о серьёзных применениях в реал-тайме и т.п.
http://wiki.oberoncore.ru/index.php/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F
← →
matt © (2007-08-19 22:26) [32]
> Ермак © (19.08.07 20:50) [31]
Подскажете литературу о сабже?
← →
Ермак © (2007-08-22 01:50) [33]Все русскоязычные вещи сконцентрированы на OberonCore.ru.
Там же кое-что англоязычное.
По самим технологиям - это англоязычные report-ы, документы, диссертации, публикации за двадцать лет их существования. И за этим лучше на EuroProg.ru - там, кстати, необычайно богатая электронная библиотека классики Computing Science.
А чтобы конкретно повертеть в руках - это в первую очередь Блэкбокс и его переведённая документация.
← →
Ермак © (2007-08-22 02:00) [34]Да, очень хорошая книга авторов Гаммы и др. "Паттерны объектно-ориентированного проектирования", вышла в 2001/2 г. в издательстве Питер (кому нужна - могу скинуть в электронном виде, напишите на мыло).
Там примеры на Smalltalk и C++. Так вот, сам BlackBox (это же интегрированная расширяемая среда, да ещё и open-source) можно считать живой иллюстрацией большинства паттернов этой книги - пример того, как эти паттерны позволяют строить целые компонентные системы. Оригинал книги на английском вышел ещё в 1994 г., практически одновременно с началой разработки Блэкбокса, они во многом на опыт этой книги и опирались.
Есть ещё классика - Клеменс Шиперски "Component-oiented programming - beyond OOP" - что-то в этом духе... Клеменс Шиперски - известный автор по вопросам КОП, один из ведущих архитекторов .NET. И он же, до перехода в Microsoft Research - один из ведущих архитекторов Блэкбокса (во многом Блэкбокс можно считать предтечей рантайма .NET, точно так же, как Delphi VCL - предтечей графической части .NET Framewrok, через Андре Хейлсберга).
Увы, книги Шиперского у меня в электронном виде нет, и в сети я её не встречал.
Ну и ряд разделов документации Блэкбокса по стилю и является книгой по КОП.
← →
db2admin © (2007-08-22 08:05) [35]Ермак © (22.08.07 02:00) [34]
if Язык с автосборкой? then
ShowMessage("Фхтанг, дубового кофе(Java) с его маразмом за глаза хватает");
← →
Ермак © (2007-08-22 11:09) [36]Автосборку можно любить... можно не любить...
Но факт таков, что для компонентных архитектур автоматическое управление памятью (в каком-то виде - сборщик, посдсчёт ссылок и т.п.) просто необходимо.
Когда в системе сотни модулей, написанных в разное время разными людьми, и эти модули свободно обмениваются сложными динамическими структурами из объектов, то никто, кроме диспетчера памяти, не может знать, когда нужно освободить память...
В частности, BlackBox Framework с его поддержкой составных документов, - т.е. произвольных деревьев из вложенных графических объектов, ничего не знающих друг про друга - просто нереально реализовать без автопамяти.
Для "быстрых" системных задач в Оберонах по сравнению с Явой проблема очень сильно смягчается наличием нединамического ООП (т.е. я могу передавать параметром по ссылке расширяемый RECORD (то бишь, объект), размещённый на стеке. Таким образом, к примеру, организовать передачу типизированных сообщений без нагрузки на диспетчер памяти вообще).
Для совсем системных задач, где требуется жёсткая детерминированность освобождения ресурсов, приходится возвращаться к явному освобождению памяти, но вводить дополнительную защиту от "висячих ссылок" - чтобы, буде они возникнут, обращение по ним никогда не попало на другие объекты, а гарантировано дало исключение. А для этого требуется манипулировать уже не простыми указателями, а более сложными описателями - хэндлами, включающими в себя кроме адреса, ещё и доп. информацию...
Страницы: 1 вся ветка
Текущий архив: 2007.09.16;
Скачать: CL | DM;
Память: 0.61 MB
Время: 0.045 c