Модульные системы
80 subscribers
31 photos
17 videos
9 files
110 links
Всё об истории и эволюции модульного программного обеспечения и надёжных программных систем
Download Telegram
Из диссертации Питера Мюллера 2002-го года. Сравнение накладных расходов на выполнение минимального системного вызова в A2 (тогда она называлась Aos) и Linux.
В A2 системный вызов дешевле в 30 раз!

| ОС A2 | Модульные системы | Вики |
🔥3
Можно, не значит нужно...)
Я тут подумал... а зачем в дженерики прямо в параметрах, помимо типов, передавать и функции сравнения, в том числе?
Всё же можно сделать значительно проще. Параметризовать лишь типами ключа и значения (а функции сравнения и вычисления хеш кода передавать непосредственно в инициализатор конкретного контейнера).
И тогда имена параметризованных модулей становятся значительно короче, и необходимость снятия ограничений на длину имён в системе уже не будет столь критична. Во всяком случае, она уже не блокирует возможность использовать дженерики.
Тесты проходят. Думаю, в ближайшее время можно будет отправить изменения в репозиторий.
Вот, на примере теста Hash контейнера можно видеть, как будет выглядеть код с использованием дженериков:
MODULE Test;

IMPORT
Random, SizeGenerics := Generics(SIZE, SIZE);

PROCEDURE Less(l, r: SIZE): BOOLEAN;
BEGIN RETURN l < r END Less;
PROCEDURE HashCode(k: SIZE): SIZE;
BEGIN RETURN k END HashCode;

PROCEDURE Hash;
VAR
vector: SizeGenerics.Vector;
hash: SizeGenerics.Hash;
rand: Random.Generator;
i, n, key, val: SIZE;
bOk: BOOLEAN;
BEGIN
n := 100;
NEW(vector, Less);
NEW(hash, Less, HashCode);
NEW(rand);
ASSERT((vector # NIL) & (hash # NIL) & (rand # NIL));
FOR i := 0 TO n - 1 DO
key := rand.Dice(SIGNED32(10 * n));
IGNORE vector.Add(key);
IF ~hash.Contains(key) THEN
hash.Add(key, key)
END
END;
FOR i := 0 TO vector.Count() - 1 DO
vector.Get(i, key);
ASSERT(hash.Get(key, val));
ASSERT(key = val)
END
END Hash;

BEGIN
Hash
END Test.


| ОС A2 | Модульные системы | Вики |
Forwarded from BlackBox Oberon
С 13 ноября начинается онлайн конференция «Неделя Оберона».

Завтра в 20.00 (GMT+3) состоится первая сессия в формате круглого стола, где участники обсудят варианты применения Оберона для веб-разработки. Ожидаются участники: Артур Ефимов (движок для сайтов на Обероне-07), Антон Шелин (подсистема Crypto), Иван Денисов (как работает мультиязычный сайт oberon.org на Блэкбоксе).

Для участия в конференции, подключайтесь по ссылке:
https://meet.oberon.org/week

Мы рекомендуем использовать браузер Chrome или Chromium для подключения, либо специальное приложение для телефона:
https://play.google.com/store/apps/details?id=org.jitsi.meet
https://apps.apple.com/us/app/jitsi-meet/id1165103905
Solving_the_structured_control_flow_problem_once_and_for_all_by.mhtml
340.5 KB
Исходные предпосылки данной статьи напомнили один из приёмов представления ДРАКОН-схем силуэт в виде кода с циклом, внутри которого огромный case (switch). Оказывается, для оптимизации подобного кода придуман алгоритм Stackifier. Видимо, и из ДРАКОН-схем можно оптимальный код генерировать. А статьи на сайтах я, лично, люблю в mhtml сохранять, для лучшей сохранности :)

| ОС A2 | Модульные системы | Вики |
Хороший пример обобщённого LIFO стека на базе связного списка массивов фиксированной длины.
Обобщённый модуль:
MODULE Stacks(TYPE T);

TYPE
P = POINTER TO R;
R = RECORD a: ARRAY 16 OF T; next: P END;

Stack* = OBJECT
VAR
vals: P;
count: SIZE;

PROCEDURE &New*();
BEGIN
Reset()
END New;

PROCEDURE Reset*();
BEGIN
count := 0;
vals := NIL
END Reset;

PROCEDURE Count*(): SIZE;
BEGIN
RETURN count
END Count;

PROCEDURE Push*(val: T);
VAR p: P; i: SIZE;
BEGIN
i := count MOD LEN(vals.a);
INC(count);
IF i = 0 THEN
NEW(p);
p.next := vals;
vals := p
END;
vals.a[i] := val
END Push;

PROCEDURE Pop*(VAR val: T): BOOLEAN;
VAR ok: BOOLEAN; i: SIZE;
BEGIN
i := count;
ok := i > 0;
IF ok THEN
DEC(i); count := i;
i := i MOD LEN(vals.a);
val := vals.a[i];
IF i = 0 THEN
vals := vals.next
END
END;
RETURN ok
END Pop;

END Stack;

END Stacks.

Использование:
MODULE StacksUse;

IMPORT Commands, Strings,
StrStacks := Stacks(Strings.String),
IntStacks := Stacks(INTEGER);

PROCEDURE Do*;
VAR
context : Commands.Context;
strStack : StrStacks.Stack;
intStack : IntStacks.Stack;
str : Strings.String;
int : INTEGER;
BEGIN
context := Commands.GetContext();
context.out.Ln;
NEW(strStack);
strStack.Push(Strings.NewString("One"));
strStack.Push(Strings.NewString("Two"));
strStack.Push(Strings.NewString("Three"));
WHILE strStack.Pop(str) & (str # NIL) DO
context.out.String(str^);
context.out.Ln
END;
NEW(intStack);
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
WHILE intStack.Pop(int) DO
context.out.Int(int, 0);
context.out.Ln
END
END Do;

END StacksUse.

StacksUse.Do ~
System.Free StacksUse Stacks(Strings_String) Stacks(@Integer32) ~


| ОС A2 | Модульные системы | Вики |
👍4
Forwarded from BlackBox Oberon
Дорогие подписчики, напоминаю, что наш проект клуба oberon.org предполагает, что вы можете получить бесконечный домен для своего оберон-проекта, сделав единоразовое пожертвование на продление нашего основного домена в размере 1000 рублей. Каждый год напоминаю про такую возможность, когда делаю продление OBERON.ORG. По этому вопросу пишите в личку @iadenisov или на почту iadenisov@oberon.org
Отдел кибер-безопасности при Белом Доме ONCD (The White House Office of the National Cyber Director) решил поставить жирную точку в истории языков Си/Си++. Выпущен финальный отчёт, в котором данные языки признаны небезопасными. Их использование связано с серьёзными уязвимостями.

| ОС A2 | Модульные системы | Вики |
👍3
Forwarded from OberonCore
С Днём космонавтики!
🔥10
Возможный претендент на дополнение OpenGL стека в A2, в дополнение к существующим биндингам для Win/Lin/Mac
https://t.me/A2OperatingSystem/22173

| ОС A2 | Модульные системы | Вики |
This media is not supported in your browser
VIEW IN TELEGRAM
Шелия Губерман о машине Цетлина
Михаил Львович Цетлин (1924—1966) — советский математик. Крупный учёный и выдающийся инженер, много сделавший в таких разных областях, как математика, физика, биология и медицина. Открыл новое продуктивное научное направление — коллективное поведение автоматов.


| ОС A2 | Модульные системы | Вики |
👍2
Возникла насущная потребность в представлении языка Active Oberon на GitHub. Для этого у файлов исходного кода должно быть уникальное расширение. Расширение .Mod сейчас у слишком большого числа диалектов
Anonymous Poll
28%
Сделать расширение .ao
25%
Сделать расширение .aob
9%
Сделать расширение .oba
0%
Сделать расширение .aobj
6%
Сделать расширение .aos
3%
Сделать расширение .Module
0%
Свой вариант в комментарии
9%
Ничего не менять
19%
Посмотреть результаты
Forwarded from Sergey Durmanov
Dear all,

with the work of Prof. Gutknecht and our group at ETH a significant amount of research has been conducted with regards to how to program systems involving many processors/cores/compute units in the spirit of Oberon.

Please consider reading the following theses in order to understand how a multicore system could be programmed (in the spirit of Oberon)

"The Active Object System Design and Multiprocessor Implementation" by Pieter Muller (2001)
--http://e-collection.library.ethz.ch/eserv/eth:26082/eth-26082-02.pdf
"Combining Lock-Free Programming with Cooperative Multitasking for a Portable Multiprocessor Runtime System" by Florian Negele (2014)
https://www.research-collection.ethz.ch/handle/20.500.11850/154828

and, if you like, you may also want to have a glance on our papers on the FPGA-based / heterogeneous systems high level programming approach:

Felix Friedrich, Oleksii Morozov, Patrick Hunziker, A Compute Model for Generating High Performance Computingng SoCs on Hybrid Systems with FPGAs. Third International Workshop on FPGAs for Software Programmers (FSP 2016), August 29, 2016, Lausanne, Switzerland,
https://www.inf.ethz.ch/personal/felixf/pdfs/2016_FSP_ComputeModelHPSoCFPGA.pdf
Felix Friedrich, Ling Liu, Jürg Gutknecht: Active Cells: A Computing Model for Rapid Construction of On-Chip Multi-core Systems. ACIS-ICIS 2012: 463-469,
https://www.inf.ethz.ch/personal/felixf/pdfs/2012_ActiveCells.pdf

Sorry for the advertising. But really, a lot of the questions that I currently see on the mailing list might have been answered there.

Rgds
Felix Friedrich
Работа со стандартным форматом отладочной информации (редкость в пост Modula-2 эпохе) , x64dbg и программа на cm3 Modula-3

P.S. И традиционное (хотя и не связанное с новостью): ссылки на OS A2 , на канал и на Вики

| ОС A2 | Модульные системы | Вики |
👍2🔥1