Модульные системы – Telegram
Модульные системы
94 subscribers
36 photos
19 videos
9 files
117 links
Всё об истории и эволюции модульного программного обеспечения и надёжных программных систем
Download Telegram
Media is too big
VIEW IN TELEGRAM
Дмитрий Завалишин про Python

| ОС A2 | Модульные системы | Вики |
👍3
Media is too big
VIEW IN TELEGRAM
Дмитрий Завалишин о красивых современных решениях. Unix, Plan 9

| ОС A2 | Модульные системы | Вики |
Media is too big
VIEW IN TELEGRAM
Дмитрий Завалишин о накладных расходах на переключение адресных пространств и о мнимой защищённости

| ОС A2 | Модульные системы | Вики |
Прослушал очередной доклад Завалишина. Умный дядька. Надо весь молодняк им, прямо, пытать 🙂
Правда, он всё склоняет, в итоге, к языку 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