OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 12 Январь, 2026 17:17

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу Пред.  1, 2, 3, 4
Автор Сообщение
СообщениеДобавлено: Пятница, 02 Январь, 2026 19:47 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1652
Михаил писал(а):
Ой, может что-то неправильно сделал. Оператор IS - слева экземпляр объекта, содержит динамический tag type, справа статический tag type объекта, вычисляемый на этапе компиляции, одно cmp и все ???.
наследник является в то же время и родителем. классическое: фигура -> круг — круг и круг, и фигура. это можно реализовать или таблицей, или походом вверх по всей цепочке родителей. у вас, судя по описанию, круг только круг, но не фигура.

Михаил писал(а):
WITH - исключил.
с учётом того, что у вас, похоже, IS/AS неправильные — то и WITH, конечно, бесполезен. ;-)

Михаил писал(а):
Forward, тоже не люблю, исключил в своем подмножестве.
тогда у вас или невозможно написать взаимно рекурсивные процедуры, или компилятор многопроходный. ;-)

Михаил писал(а):
Вот wayland.
не пишите матом в приличном обществе, пожалуйста. ;-) кейт пакард — тупая бездарь. в иксы он идиотский xrender затащил, например.

Михаил писал(а):
Потоки можно и нужно использовать, в подходящих задачах
есть простое и надёжное правило для определения того, нужны ли в задаче потоки: если кажется, что нужны — то однозначно не нужны.

да, можно упороться реализацией какого-нибудь raymarching'а чисто на цпу, и тайловая реализация с потоками, конечно, будет быстрее, а процессы тут помогут значительно меньше из-за бо́льших накладных расходов на передачу данных. но это очень нишевые случаи.

зато как только мы добавляем потоки, например, в оберон — у нас реализация GC сразу обрастает лочками. и вылазит любимая проблема: чтобы начать сборку мусора, надо остановить все другие потоки, желательно при этом получив дамп их регистров (если сборщик консервативный). такого апи в позиксе нет. решаемо, конечно (через хак), но…

Михаил писал(а):
>>>> в идеале, конечно, было бы ещё неплохо проштудировать Драконью Книгу, там много вкусного.
Знаю такую. Она меня пугает. Тензорный (функциональный) анализ, по сравнению с ней кажутся легким чтением.
там всё намного проще, чем кажется издалека. и потом: её же не надо зубрить. достаточно просмотреть чтобы знать, какие подходы бывают, а потом консультироваться, когда надо какой-то подход реализовать. ну, или просто для удовольствия перед сном почитать. ;-)

Михаил писал(а):
Вот это, за гранью моего понимания (((. Как Вы все успеваете ))).
никак не успеваю. но это не мешает стараться. ;-)

на самом деле как ещё обкатать новый компилятор в бою, если не писать на нём что-то более-менее серьёзное? простые 2д-игрушки, как по мне, идеально подходят: писать весело, играть весело, и задача вполне серьёзная для компилятора.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 01:21 

Зарегистрирован: Вторник, 30 Сентябрь, 2025 21:13
Сообщения: 64
Сто лет в BB, и Сто % был уверен, что IS не распространяется на родителей. Проверил. Реальность оказалась другой - распространяется (((. Спасибо ))).

Компилятор однопроходный, а взаимно рекурсивные процедуры пишу так:

proc A;
proc B; begin A; end B;
begin B; end A;

Матом, а если других нет ))). С wayland - вероятно и Микрософт внес свою лепту. Они вроде главные спонсоры (((.

С потоками и GC намучился в свое время, чуть с работы не вылетел. Пока не сделал свой простенький менеджер памяти без GC.

>>>> Драконью Книгу . . . удовольствия перед сном почитать.

Почитать, конечно придется. Но вот про удовольствие. Это шутка такая ???.

>>>> на самом деле как ещё обкатать новый компилятор в бою, если не писать на нём что-то более-менее серьёзное? простые 2д-игрушки, как по мне, идеально подходят: писать весело, играть весело, и задача вполне серьёзная для компилятора.

Ага серьезная. Да это наверное самое сложное, что есть в мире программирования. Потоки, графика, интерфейс, сюжет. Есть область, которую можно пропустить ???


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 01:50 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1652
Михаил писал(а):
Сто лет в BB, и Сто % был уверен, что IS не распространяется на родителей. Проверил. Реальность оказалась другой - распространяется (((. Спасибо ))).
бывает. я в компиляторе как-то ноды сложения и вычитания перепутал. и заметил далеко не сразу: тесты для всяких записей и процедур сделал, а для сложения — да ну, кто ж там лажануть-то сможет, зачем.

Михаил писал(а):
Матом, а если других нет ))). С wayland - вероятно и Микрософт внес свою лепту. Они вроде главные спонсоры (((.
да не: просто пакард — инициативный дурак. лучше бы уж гад за деньги был, ей-ей.

Михаил писал(а):
>>>> Драконью Книгу . . . удовольствия перед сном почитать.
Почитать, конечно придется. Но вот про удовольствие. Это шутка такая ???.
да нет, отчего. почитать какую-нибудь техническую литературу перед сном — вполне удовольствие. не каждый вечер, конечно, под настроение. не то чтобы это сильно отличалось от перечитывания какой-нибудь хорошей художественной книги, если вдуматься.

хотя больше пошутил, конечно.

Михаил писал(а):
Ага серьезная. Да это наверное самое сложное, что есть в мире программирования. Потоки, графика, интерфейс, сюжет. Есть область, которую можно пропустить ???
ну, ресурсы уровни и прочее я честно стырил, потому что это клон одной старой и обскурной досовой игры. на самом деле самое скучное было — ковыряться в дизасме, чтобы точно геймплей воссоздать. да и получилось не очень: всё началось как просмотрщик карт, а потом как-то нечаянно до полноценного клона доросло. тогда уже пришлось дизасмить, портировать с сишечки эмулятор OPL3 чтобы музоний, и всё вот это.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 05:42 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1652
вот вам ещё подарок: полноценный компилятор с использованием sea of nodes, начиная с самого простейшего, и до структур с методами. каждый раздел имеет пояснения, всё вместе сделано Клифом Кликом — собственно, автором концепции sea of nodes. компилятор в конце натурально полноценный, со всеми рюшечками типа указателей, кодогеном под несколько архитектур, с выделением регистров используя graph coloring.

пререквизиты: необходимо понимать, что такое SSA, CFG, DFA, def-use chains и прочие маты из compiler 101. такие простые вещи Клифф особо не разжёвывает. всё это, в принципе, можно найти в книге про SSA от Inria, ссылку на которую я давал выше.

Клифф Клик, помимо прочего, автор C2: оптимизирующего JIT-компилятора для java. в котором как раз в полный рост использует SoN.

можете успеть сделать компилятор оберона на SoN первее меня. я не обижусь (если исходники, конечно, будут открытые ;-). я именно по этому постигал SoN на практике.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 10:57 

Зарегистрирован: Вторник, 30 Сентябрь, 2025 21:13
Сообщения: 64
Спасибо, шикарный подарок ))). Интересный проект https://aglang.org, пишет свой язык, работал в Гугле, предлагал руководству в качестве оф.языка.

Раньше Вас, точно нет. В приоритетах - поддержка дисплеев высокого разрешения (retina), добавить android, устранение ошибок и недоделок. И новый - чтение на ночь, рекомендованной Вами литературы. И только потом, если звезды сложатся . . . )))


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 11:40 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1652
The initial build takes ≈60Gb of storage, it requires 16+Gb RAM, and depending on device configuration can take up to 6 Hours.
«прелестно, прелестно!» (ц)
бейте это лопатой пока не залезет обратно туда, откуда вылезло.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 16:33 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 207
Не могу скомпилировать такую программу (адаптацию одного из моих ГПСЧ к Вашей среде). В логе пишет "x8k.SYM" не создан!" Также при отладке я часто получал сообщение что-то вроде "идентификатор не определен" без указания этого самого идентификатора, и такую ошибку может быть сложно искать. Также, похоже, компилятор в сообщениях об ошибках нумерует строки с 0, а в редакторах они нумеруются с 1.

Код:
(**
 * 1. https://doi.org/10.1214/aoap/1177005878
 * 2. https://groups.google.com/g/comp.lang.fortran/c/5Bi8cFoYwPE
 *)
MODULE xkiss;

TYPE XkissArState = RECORD
    x : INTEGER;
    a0, a1, c : INTEGER;
END;


PROCEDURE XkissArInit(VAR obj : XkissArState; x, a0, a1 : INTEGER);
BEGIN
    obj.x := x;
    obj.a0 := a0 MOD 67108863; (* 2^26 - 1 *)
    obj.a1 := a1 MOD 67108863; (* 2^26 - 1 *)
    obj.c  := 1;
    IF obj.x = 0  THEN obj.x  := 123456 END;
    IF obj.a0 < 0 THEN obj.a0 := 0 END;
    IF obj.a1 < 0 THEN obj.a1 := 0 END
END XkissArInit;


PROCEDURE XkissArNext(VAR obj : XkissArState) : INTEGER;
CONST
    mask26 = 03FFFFFFH;
    mask31 = 07FFFFFFFH;
VAR
    t: INTEGER;
BEGIN
    (* LFSR part *)
    obj.x := ORD(SET(obj.x) / SET(LSH(obj.x, 1)));
    obj.x := ORD(SET(obj.x) / SET(ROR(obj.x, 23)) / SET(ROR(obj.x, 5)));
    (* AWC part *)
    t := obj.a0 + obj.a1 + obj.c;
    obj.a1 := obj.a0;
    obj.c  := LSH(t, -26);
    obj.a0 := ORD(SET(t) * SET(mask26));
    (* Output function *)
    RETURN ORD(SET(mask31) * (SET(obj.x) / SET(LSH(obj.a0, 6)) /
        SET(obj.a1 * 29)))
END XkissArNext;


PROCEDURE XkissArTest() : BOOLEAN;
CONST
    uref = 0453EFE6EH;
VAR
    prng : XkissArState;
    i, u : INTEGER;
BEGIN
    u := 0;
    XkissArInit(prng, 12345678, 3, 2);
    FOR i := 1 TO 1000000 DO
        u := XkissArNext(prng)
    END;
    OUT("Output:    "); OUT(u); OUT(" ");
    OUT("Reference: "); OUT(uref); OUT(" ");
    FOR i := 1 TO 10 DO
        u := XkissArNext(prng);
        OUT(u);
        OUT(" ")
    END;
    RETURN u = uref
END XkissArTest;


BEGIN
    IF XkissArTest() THEN OUT("Passed")
    ELSE                  OUT("Failed")
    END
END xkiss.


Ещё по исходникам из дистрибутива: там встречаются идентификаторы на транслите вроде DrawOval. Также в исходниках используется кодировка 1251 вместо более привычной UTF-8. Впрочем, в исходниках вообще обычно не используют символы, отличные от ASCII и естественные языки, отличные от английского (т.к. программист не обязан знать русский язык, но обязан знать английский).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 18:19 

Зарегистрирован: Вторник, 30 Сентябрь, 2025 21:13
Сообщения: 64
Не ходите в Aфрику гулять . . . Не берите, то что там лежит . . . А если по существу, то часть пробелов в тексте, не пробелы, а какие-то скрытые символы, воспринимаемые компилятором как индефикаторы. Позже посмотрю в hex редакторе что это. А пока просто почистил. И второе, именование имени модуля - отсутствовал префикс имени папки назначения. Тоже поправил. Исправленный mod файл и краткая инструкция в архиве ))).


Вложения:
_ScrollLock.png
_ScrollLock.png [ 11.67 КБ | Просмотров: 347 ]
XKISS.RAR [5.02 КБ]
Скачиваний: 4
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 19:08 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 207
Михаил писал(а):
Не ходите в Aфрику гулять . . . Не берите, то что там лежит . . . А если по существу, то часть пробелов в тексте, не пробелы, а какие-то скрытые символы, воспринимаемые компилятором как индефикаторы. Позже посмотрю в hex редакторе что это. А пока просто почистил. И второе, именование имени модуля - отсутствовал префикс имени папки назначения. Тоже поправил. Исправленный mod файл и краткая инструкция в архиве ))).


Спасибо. Похоже, я нашёл ошибку компилятора. Вот короткая программа:

Код:
MODULE bexmRotator;

VAR
    u : INTEGER;
BEGIN
    u := 8;
    u := ROR(u, 1);
    OUT(u)
END bexmRotator.


Она у меня выдаёт 16 вместо 4 (ROR = Rotate Right). В описании Оберон-07 от Вирта ROR описана как "x rotated right by n bits". О формате исходника:
1) В качестве разделителя строк используется символ с кодом 13, что достаточно экзотично (т.е. это не CRLF из Windows и не LF из Unix).
2) После вставки коммандера по CTRL-R файл с исходниками перестаёт быть корректным файлом в ASCII и даже в UTF-8. Т.е. любой исходник с коммандером получается невозможно представить в ASCII, что странно.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 21:10 

Зарегистрирован: Вторник, 30 Сентябрь, 2025 21:13
Сообщения: 64
Спасибо. Да действительно в спецификации Oberon07 так. А вот в спецификации Oberon-2, такой команды нет. А операции сдвига представлены универсальными ASH, LSH в которых сдвиг влево - неотрицательное целое, сдвиг вправо - отрицательное целое. Решил не ломать общую концепцию и сделал также: ROR(8, -1) = 4, а ROR(8, 1) = 16. Вот у Вас такой результат и получился.

ASCII, UTF-8. Честно даже не заморачивался этим вопросом. У меня так, есть кириллица - UTF-8, нет кириллицы - ASCII. Точнее сохранить можно в UTF-8, а по умолчанию win1251.

Кстати, Вы используете очень интересный алгоритм вычисления случайных чисел. Как Вы смотрите, если при необходимости буду им пользоваться. Естественно с указанием Вашего авторства.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Январь, 2026 21:50 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 207
Михаил писал(а):
А вот в спецификации Oberon-2, такой команды нет.

Там есть команды в модуле SYSTEM под названием ROT, и я не помню, в какую сторону там сдвиг. От сдвига влево можно ожидать скорее название ROL (ROtate Left) или ROTL. А то этот ROR в роли сдвига влево может привести к тихим, но коварным ошибкам при переносе программ.

Цитата:
при необходимости буду им пользоваться

Пользуйтесь, конечно, BigCrush, SmokeRand и PractRand 0.94 (по меньшей мере до 16 ТиБ) он проходит. Только сдвиги правильные проставьте и добейтесь прохождения внутреннего теста, без этого он развалится. Но я его сделал скорее как эксперимент для обхода ограничений системы типов Оберона, чем как нечто образцово-показательное :)

Ещё о генераторах: у Вас при прибавлении к 2147483647 всегда получается -2147483648? Это - устойчивое поведение компилятора или нет? Просто если у Вас будет везде Wraparound при целочисленном переполнении, то можете взять ГПСЧ поприличнее, шифр ChaCha20, с сидом от /dev/urandom или его аналогов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Январь, 2026 12:21 

Зарегистрирован: Вторник, 30 Сентябрь, 2025 21:13
Сообщения: 64
Спасибо, за разрешение. Алгоритм симпатичный. Постоянно страдаю, если случайное число. Лезу в os api и достаю время. Ужасть ))).

ROR переименовал в RSH, чтобы уж точно была полная ассоциация с ASH и LSH. И обнаружил ошибку в сдвиге - integer переменные при сдвиге с переменной, сдвигаются как longint. Хорошо, что хоть при сдвиге на константу сдвигаются корректно в соответствии с типом. Ещё один ужасть (((.

Сегодня буду исправлять. И следующую сборку выложу с исправлениями.

Про прибавление. Да, это устойчивое поведение (по крайней мере хочется так думать). Все вычисления с целыми делаются, как с длинными целыми (64 разряда). И только при сохранении обрезаются до нужного размера.

>>> ГПСЧ поприличнее, шифр ChaCha20, с сидом от /dev/urandom или его аналогов.

Честно, я и слов таких не знаю. Меня вполне устраивает Ваш вариант. Спасибо ))).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 04 Январь, 2026 12:52 

Зарегистрирован: Среда, 01 Август, 2007 00:13
Сообщения: 207
Михаил писал(а):
Лезу в os api и достаю время.

У Linux и Windows есть специальные API именно для генерации случайных чисел, причём криптографического качества. В Linux - это "файл" /dev/urandom, в Windows - функции CryptAcquireContext, CryptGenRandom, CryptReleaseContext, CryptReleaseContext. Они не очень быстрые, но для начальных значений (seed) - в самый раз.

Цитата:
Честно, я и слов таких не знаю.

Вот ChaCha20: https://datatracker.ietf.org/doc/html/rfc7539, только счётчик не забудьте заменить на 64 бита. Он сложнее и нередко медленнее всяких bithack-генераторов (в т.ч. моего), но намного надёжнее. Впрочем, если Вы не занимаетесь каким-то серьёзным моделированием, то и алгоритмы попроще, в т.ч. мой вариант KISS, скорее всего подойдут.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 08 Январь, 2026 21:52 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4747
Откуда: Россия, Орёл
Тема с генераторами случайных чисел отделена: viewtopic.php?f=27&t=7034


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 08 Январь, 2026 23:15 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1652
а, кстати. раз уж рекомендации, то ещё рекомендую Coffee Compiler Club. это такие неформальные поболтушки с Клиффом Кликом как ведущим обо всём, что так или иначе затрагивает темы компиляции. иногда просто рассуждают, иногда Клифф поясняет всякое интересное. совершенно неформальные, Клифф не чурается всяких «факов» если они в тему.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 75 ]  На страницу Пред.  1, 2, 3, 4

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2026, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB