Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 1246 21-12-2006 11:12 | |
Ответ на »сообщение 1245« (Alexey Veselovsky)
___________________________
Это не только в программировании. В математическом описании сложных систем прослеживается та же тенденция. Видимо это определяется возможностями мозга - не удается одновременно оперировать и сложной проблемой и сложным инструментом.
№ 1245 21-12-2006 07:07 | |
У меня не столь много опыта в программировании, но я заметил что чем сложнее(объемней, больше) задача, тем проще и меньше должен быть инструмент(язык) для решения её при неизменной квалификации программиста пытающегося решить эту задачу.
Быть может я ошибаюсь, но пока мои наблюдения именно таковы.
№ 1244 21-12-2006 05:55 | |
Ответ на »сообщение 1242« (Иван Левашев)
___________________________
"... I don't believe in that sort of miracle. Big problems need big solutions!"
За одну эту чушь, высказанную публично по большому поводу, где, надо думать, все должно было быть давно и хорошенько обдумано, -- за одно это бессмысленное утверждение Ишбиа можно всерьез не принимать.
№ 1243 17-12-2006 17:37 | |
Ответ на »сообщение 1242« (Иван Левашев)
___________________________
Ну, тема про Обероны появилась несколько раньше визита Вирта. В разделе "Школа Оберона" есть архив первой темы (большая свалка всего и вся на четыре с гаком тысячи постов). Начата 10.12.2002, так что Оберону здесь уже больше четырёх лет :)
А что касается Ады - надо полагать, про неё давно есть специализированные и известные сайты.
№ 1242 17-12-2006 11:09 | |
Может быть, не в тему.
Я пропустил момент, когда здесь появилась тема про Оберон.
У меня только один вопрос : почему Оберон?
Почему не Ада? Стандарт Ады 2005 со дня на день станет стандартом ISO, а здесь, к моему удивлению обсуждают Оберон, и про Аду ни слухом ни духом.
Вообще есть у меня некоторые домыслы, почему так получилось. Никак после посещения Вирта такие темы? Когда он к нам в Нск приезжал, он, помню, и про Паскаль, и про Модулу, и Оберон много чего сказал. Особенно помню, как сожалел, что в Паскале использовал синтаксис
if условие then
оператор
допускающий неоднозначности вместо
if условие then
операторы
end if
И в Модуле, и в Обероне, и в других эта ошибка была исправлена.
Вскользь упоминал и другие языки-потомки Паскаля.
Но ни слова об Аде.
Я даже могу предположить, почему. Вирт считает, что язык не должен быть большим. Приведу цитату из Википедии :
http://en.wikipedia.org/wiki/Oberon-1
As this is an intent whose success cannot be easily quantified, there remains some disagreement that Oberon has achieved its intended goals in this respect. One objection to its strategy of language design simplification was expressed by Jean Ichbiah, the architect of Ada when Wirth criticized Ada for being too big; he responded "There are times when Wirth believes in small solutions for big problems. I don't believe in that sort of miracle. Big problems need big solutions!" Oberon developers have even felt that Oberon went too far in this respect -- Oberon-2 returned the 'FOR' statement to that version of the language.
Сравнение Паскаля с Адой я видел :
http://www.mysunrise.ch/users/gdm/pascada.htm
Оба языка с тех пор эволюционировали (в виде FreePascal 2.x и Delphi 2006), так что не все претензии к Паскалю верны полной степени.
С Обероном сравнивать не доводилось, но у меня сильное чувство, что после Ады 2005 едва ли какой язык стоит внимания в той же степени.
№ 1241 14-12-2006 00:49 | |
Ответ на »сообщение 1239« (Илья Ермаков)
Примеры есть, все есть, полная документация вот только дописана, все будет на днях :-)
Хорошо. Вопросы остались, но больше пока не буду задавать, чтоб "впереди паровоза не бежать". Вот когда опубликуете, там само всё и прояснится...
№ 1240 13-12-2006 13:18 | |
Ответ на »сообщение 1238« (Mirage)
___________________________
Ответ на »сообщение 1234« (Илья Ермаков)
___________________________
А насколько это все портабельно? Т.е. в смысле переноса на Linux, MaxOS и т.д.?
Среда модифицирована на нескольких уровнях.
А) портируемые примитивы синхронизации (критические секции, семафоры, локальные хранилища потока, атомарные операции в стиле POSIX) - модуль Synch с абстракными типами + модуль HostSynch, инсталлирующий конкретную реализацию. Как обычно в Блэкбоксе, можно подменить реализацию во время выполнения.
На базе Synch выполнена потокобезопасная модификация ключевых модулей BlackBox Framework (не слишком радикальная, например, работа с GUI должна выполняться либо в главном потоке программы, либо после специальной блокировки главного потока, однако все глобальные данные всех модулей защищены от повторного вхождения нескольких потоков).
Synch и потокобезопасный Framework войдут в основную ветку среды, в Service Pack 4. Таким образом, можно будет разрабатывать потокобезопасные модули, которые будут работать на обоих ядрах - и обычном BlackBox, и Active BlackBox, и других многопоточных ядрах, буде таковые появятся.
Б) Ядро Kernel переписано для поддержки многопоточности (потоки названы задачами, Tasks, потому что изначально в АББ предполагались высокуровневые абстракции в стиле Ады, задачи + рандеву). В него введено API, позволяющие порождать задачи и контролировать их выполнение. Переделаны диспетчер памяти (при этом большая часть NEW может выполняется в неблокирующем режиме, параллельно несколькими потоками), сборщик мусора (сборка мусора блокирует все потоки, как и в .NET, тут другого способа пока не придумано...), обработка трепов для многих потоков и т.п. Введена поддержка слабых указателей, как в .NET (Weak Pointers). Введена поддержка нового, экспериментального механизма, названного автоматической агрегацией деталей.
В) На базе нового ядра сделан модуль Ao, включивший высокоуровневые абстракции - активные процедуры и активные объекты в стиле Active Oberon. Из оригинального, кроме активных процедур, возможность "сборки мусора" для более ненужных активных объектов, которые получают стоп-сигнал и могут корректно завершить свои активности.
Пункты Б и В - это отдельная версия рантайма, Active BlackBox, сохранивщая 100%-обратную совместимость. Будет развиваться параллельно с основной веткой среды. Лицензия - Freeware.
№ 1239 13-12-2006 12:56 | |
Ответ на »сообщение 1237« (Сергей Губанов)
___________________________
Примеры есть, все есть, полная документация вот только дописана, все будет на днях :-)
Вот bounded buffers из документации:
MODULE ObxAoBufferLint;
IMPORT Ao;
TYPE
Item* = LONGINT;
Buffer* = POINTER TO RECORD
tag: Ao.MONITOR;
h, n: INTEGER;
data: POINTER TO ARRAY OF Item
END;
PROCEDURE NewBuffer* (size: INTEGER): Buffer;
VAR b: Buffer;
BEGIN
NEW(b); NEW(b.data, size);
RETURN b
END NewBuffer;
PROCEDURE (b: Buffer) Get* (OUT x: Item), NEW;
BEGIN Ao.UPDATE;
WHILE ~ (b.n # 0) DO Ao.AWAIT END;
x := b.data[b.h];
b.h := (b.h + 1) MOD LEN(b.data);
DEC(b.n)
END Get;
PROCEDURE (b: Buffer) Put* (x: LONGINT), NEW;
BEGIN Ao.UPDATE;
WHILE ~ (b.n # LEN(b.data)) DO Ao.AWAIT END;
b.data[(b.h+b.n) MOD LEN(b.data)] := x;
INC(b.n)
END Put;
END ObxAoBufferLint.
UPDATE - это EXCLUSIVE, после которого пересчитываются AWAIT-ы. Пришлось ввести такое разделение, т.к. библиотека не может знать, менялось ли в эксклюзивной процедуре состояние объекта или нет, а пересчитывать для всех процедур - например, для Get-ов, - бессмыссленно и накладно.
Семафоры вообще на высоком уровне не используются, они на нижнем уровне, на них AWAIT-ы и другая синхронизация реализованы. EXCLUSIVE реализован на критических секциях.
В целом задача сверхэффективности не ставилась, т.к. без введения в язык смоделировать очень быстро эти абстрации невозможно. Ставилась цель показать, как среда может расширяться за счет рантайма, без модификации языка, дать применимый на практике инструмент и опробовать некоторые новые идеи. В случае успеха это может быть вынесено на уровень псевдомодуля компилятора, опять же, без изменения основного множества языка Component Pascal.
№ 1238 13-12-2006 11:10 | |
Ответ на »сообщение 1234« (Илья Ермаков)
___________________________
А насколько это все портабельно? Т.е. в смысле переноса на Linux, MaxOS и т.д.?
№ 1237 13-12-2006 09:40 | |
Ответ на »сообщение 1236« (Илья Ермаков)
Если интересно, посчитал точно - 91 инструкция в процедуре Semaphor.WAIT, 68 инструкций - в Semaphore.POST, хотя, естественно, в идеальном случае, когда не нужно ждать, а просто забрать единицу со счетчика, на WAIT пройдет около 20 инструкций.
Блокировка монитора в .NET - это все равно, что простой вход в критическую секцию Win32, там тоже около 5-6 инструкций...
Что-то я ничего не понял. Можно Вас поросить в качестве примера написать аналог Bounded Buffer http://bluebottle.ethz.ch/languagereport/node8.html#SECTION00086000000000000000
с использованием Вашей библиотеки.
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|