Модульные системы – Telegram
Модульные системы
94 subscribers
37 photos
19 videos
9 files
118 links
Всё об истории и эволюции модульного программного обеспечения и надёжных программных систем
Download Telegram
Прослушал очередной доклад Завалишина. Умный дядька. Надо весь молодняк им, прямо, пытать 🙂
Правда, он всё склоняет, в итоге, к языку Java, но это дело такое.
Критика других языков/технологий у него отменная.
О, похоже, телеграм понимает тайм-коды к видео. Удобно 🙂

11:17 Внеэкономические и экономические факторы выбора языка программирования. PHP, C;
22:46 Зависимость стоимости сопровождения систем от выбора языка программирования;
25:55 Очень любопытный "злой тезис" про пользу внесения в код некоторой избыточности при помощи строгой типизации, который помогает в обнаружении ошибок на стадии компиляции;
29:38 Тезис из которого следует прямой вывод, что Oberon принадлежит к языкам "высшей лиги" 🙂;
46:24 Боль стартаперов: написать и выкинуть 😄;
48:42 О персистентности.

| ОС A2 | Модульные системы | Вики |
Реализовал некоторые контейнеры для A2 на дженериках и написал для них тесты. Но ещё надо некоторое число предварительных исправлений сделать, чтобы это можно было отправить в репозиторий

| ОС A2 | Модульные системы | Вики |
👍5
Для тех, кто ещё не знаком с языком Active Oberon и операционной системой A2, пример решения простейшей задачи "Вывести все простые числа в диапазоне [2;n)":
module NPrimes;

import Math, Commands;

procedure Eratosthenes(var b: array of boolean; const n1, n2: signed32);
var i, j : signed32;
begin
for i := n1 to entier(Math.sqrt(n2) + 0.5) do
if b[i] then
j := i * i;
while j < n2 do
b[j] := false;
inc(j, i)
end
end
end
end Eratosthenes;

procedure Do*;
var context : Commands.Context;
n, i : signed32;
sift : pointer to array of boolean;
begin
context := Commands.GetContext();
if context.arg.GetInteger(n, false) then
new(sift, n);
for i := 0 to n - 1 do
sift[i] := true
end;
Eratosthenes(sift^, 2, n);
for i := 2 to n - 1 do
if sift[i] then
context.out.Int(i, 0);
context.out.Char(20X)
end
end;
context.out.Ln
end
end Do;

end NPrimes.

NPrimes.Do 50 ~
System.Free NPrimes ~
Вывод программы будет следующий:

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

| ОС A2 | Модульные системы | Вики |
👍51
Options.Execution.Test
1.6 KB
Хорошее дело перед внесением существенных изменений в код, написать для этого кода тесты. Так поступил и я. В ОС A2 есть тестовая подсистема, и надо активно её использовать.
Это тест для модуля Options.Mod, по-моему, хороший пример и для ваших тестов.
В файле теста после ключевого слова options идёт набор параметров для запуска. А запустить данный тест можно выполнив следующую команду:

FoxTest.Compile Options.Execution.Test ~


| ОС A2 | Модульные системы | Вики |
Швейцарская компания HighDim активно использует язык Active Oberon, операционную систему A2 и технологию ActiveCells в своих продуктах. Компания специализируется на производстве медицинского оборудования

| ОС A2 | Модульные системы | Вики |
👍7
Где-то между орбитами Марса и Юпитера есть астероид, названный в честь Никлауса Вирта

| ОС A2 | Модульные системы | Вики |
🔥5👍2
Появился новый проект компилятора. Ожидается поддержка кросс-компиляции с языков Oberon, Oberon-2 и Active Oberon в рамках одного компилятора. Предполагается написание самого компилятора на языке Rust, а библиотеки на языке Active Oberon. Пока разработка находится в самой начальной стадии, опубликован лишь начальный код сканера для Active Oberon. Проект, теоретически, может дать хороший толчок развитию кода библиотеки системы A2. С интересом проследим за развитием данного проекта

| ОС A2 | Модульные системы | Вики |
👍6
Часто задают вопросы по установке системы A2 на компьютер.
Но самым быстрым и рекомендованным способом ознакомиться с системой будет её запуск в виде приложения под Windows / Linux. В таком варианте можно будет практически всё запускать, писать и компилировать программы, за исключением частей взаимодействующих непосредственно с оборудованием. Для этого достаточно клонировать основной репозиторий разработки себе на компьютер и из него распаковать соответствующую сборку из zip архивов на выбор: Linux32, Linux64, LinuxARM, Win32 и Win64.
После первоначального знакомства с системой можно будет из любой из этих сборок собственноручно собрать нативный образ системы в вариантах загрузки с: ISO, ISO (мини), HDD и USB.
Команды для сборки нативных образов находятся в
data/Build.Tool

Нужно просто создать папку для выходных файлов и выполнить команды по шагам: 1, 2, 3a / 3b / 3c / 3d.
Видео установки A2 ISO в QEMU

| ОС A2 | Модульные системы | Вики |
👍6
Судя по приведённому примеру для "проблемы" Java, в ней вообще всё плохо...
Похоже, разработчики Java не понимают, что такое полиморфизм.
Перепишем код на Active Oberon:
module vehicles;
type
Vehicle = object
end Vehicle;
Car = object(Vehicle)
end Car;
Bus = object(Vehicle)
end Bus;
var
c : pointer to array of Car;
v : pointer to array of Vehicle;
begin
new(c, 1);
c[0] := new Car();
(* v := c; *) (* incompatible assignment *)
new(v, 1);
v[0] := new Bus();
end vehicles.

Присвоение v := c в AO невозможно, так как v и c разных типов. Компилятор выдаст incompatible assignment.
А присвоение v[0] := new Bus() вполне законно, так как Bus является расширением типа Vehicle.
Ваша Java сломалась, несите другую 😂

PS. Как оказалось, полиморфизм тут ни при чём, а проблема в том, что Java сложно устроена "под капотом". Виновники: ковариантность массивов в Java и то, что в строчке  Vehicle[] v = c; "затёрся" изначальный тип массива.
Где сложно всё устроено, там ненадёжно

| ОС A2 | Модульные системы | Вики |
🔥3👍1
Из диссертации Питера Мюллера 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 | Модульные системы | Вики |