OberonCore
https://forum.oberoncore.ru/

Оберон-07: вопросы реализации
https://forum.oberoncore.ru/viewtopic.php?f=115&t=6352
Страница 2 из 5

Автор:  Oleg N. Cher [ Суббота, 16 Февраль, 2019 16:47 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Kemet, видимо, в реальной жизни без зоопарков не обойтись. И что в них плохого? Никогда всё не бывает идеально. Нравится людям пилить компиляторы. Гораздо больше, чем писать библиотеки общего назначения. Что поделаешь.

Я не лабаю очередной недокомпилятор. Я лабаю транслятор семейства Оберон-языков в Си промышленного уровня. Оберон-07 там может быть представлен для полноты картины. Поддержать AO тоже заманчиво, но это не в приоритете.

Baikal писал(а):
Замена сдвига на деление не очень актуальна, так как деление очень медленное, а сдвиг очень быстрый, и как раз наоборот, умножение и деление заменяют на сдвиги где это возможно.
Baikal, хороший компилятор оптимизирует деления и умножения на константы, кратные 2. Я бы вообще не пользовался компилятором, который этого не делает. Ofront+ тоже заменяет такие деления и умножения на сдвиги.

Автор:  Sergej Durmanov [ Суббота, 16 Февраль, 2019 18:55 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

транслятор АО в Си уже есть

Автор:  Пётр Кушнир [ Суббота, 16 Февраль, 2019 19:01 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Kemet писал(а):
Непонимание этого простого факта приводит к появленгию очередных свидетелей Ие.., а, ну да, Вирта.

Кемет не меняется, такое же трепло, как и пять лет назад.

Автор:  Comdiv [ Суббота, 16 Февраль, 2019 20:30 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Oleg N. Cher писал(а):
Да я постоянно спорю об этом с Оберонцами-07, но они очень упёртые
Не существует "Оберонцев-07". Вы спорите с призраками, созданными в Вашей голове, образы которых Вы накладываете на настоящих собеседников.
Kemet писал(а):
Непонимание этого простого факта приводит к появленгию очередных свидетелей Ие.., а, ну да, Вирта
Тут та же проблема, Вы создаёте свой собственный образ по мотивам действительности, а затем его увлечённо изобличаете.

Kemet писал(а):
Студентам нужно лабать очередной шедевр. Поэтому у каждого свой вариант Оберона07 или Активного Оберона/А2. Это не даёт развиваться экосистемам.
Существует большое количество учебных компиляторов Си и профессиональных тоже с несколько десятков, каждый со своими несовместимыми особенностями, но инфраструктура развивается и очень хорошо, потому что полно людей, который могут и хотят её развивать.

Автор:  Oleg N. Cher [ Суббота, 16 Февраль, 2019 21:39 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Comdiv писал(а):
Не существует "Оберонцев-07". Вы спорите с призраками, созданными в Вашей голове, образы которых Вы накладываете на настоящих собеседников.
А как ещё называть людей, которые считают Оберон-07 абсолютно полноценным и самодостаточным языком программирования? И скрупулёзно ведут пространные дискуссии о каждом его аспекте, находя всё больше и больше достоинств по сравнению с Модулой-2, Обероном-2 и КП. Фанатиками? :-)

Автор:  Comdiv [ Суббота, 16 Февраль, 2019 21:52 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

То, что он полноценный и самодостаточный это простое следствие алгоритмической полноты, достижение чего не является чем-то сложным, а, скорее, наоборот.
Цитата:
И скрупулёзно ведут пространные дискуссии о каждом его аспекте, находя всё больше и больше достоинств по сравнению с Модулой-2, Обероном-2 и КП
Покажите, пожалуйста, такие дискуссии, в которых всё именно так, как Вы описываете.

Автор:  Trurl [ Суббота, 16 Февраль, 2019 21:56 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Интересно, если убрать 07, что-то изменится?

Автор:  Oleg N. Cher [ Суббота, 16 Февраль, 2019 23:09 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Comdiv писал(а):
Покажите, пожалуйста, такие дискуссии, в которых всё именно так, как Вы описываете.
Поваритесь маленько на IRC-канале #oberon на freenode, там постоянно происходят такие беседы.

Автор:  Info21 [ Воскресенье, 17 Февраль, 2019 10:26 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Потребность трепать языком у т.наз. "сапиенсов" -- эволюционно-фундаментальная.

Возбуждаться, наблюдая её, -- нонсенс.

Автор:  Oleg N. Cher [ Четверг, 21 Февраль, 2019 23:58 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Покритикуйте, пожалуйста, мою реализацию циклического сдвига вправо. Может можно проще?

Код:
PROCEDURE Ror* (x, n: INTEGER): INTEGER;
BEGIN
   ASSERT((0 <= n) & (n <= 31));
   WHILE n > 0 DO
      IF ODD(x) THEN x := ASH(x, -1); IF x >= 0 THEN INC(x, MIN(INTEGER)) END
      ELSE x := ASH(x, -1); IF x < 0 THEN DEC(x, MIN(INTEGER)) END
      END;
      DEC(n)
   END;
   RETURN x
END Ror;

P.S. SYSTEM.ROT не предлагать, я про него знаю. Вопрос не об этом.

Автор:  Comdiv [ Пятница, 22 Февраль, 2019 01:20 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Должно быть воплощение без цикла.

Автор:  Kemet [ Пятница, 22 Февраль, 2019 06:43 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

как-то так
Код:
n := n MOD 0b100000;
SYSTEM.VAL( INT32, SYSTEM.VAL( SET32, LSH( x, 32 - n )) + SYSTEM.VAL( SET32, LSH( x, -n )));

Автор:  Oleg N. Cher [ Пятница, 22 Февраль, 2019 08:15 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Kemet, про SYSTEM.LSH я тоже наслышан...

Хорошо, усложним проблему. Нужен RorLong для 64-битных значений. SYSTEM.LSH и SYSTEM.ROT не предлагать — они умеют только 32-битные сдвиги (хотя в Ofront'е+ и 64-битные тоже). Только ASH нормально заточен под LONGINT.

Насчёт того, чтобы избавиться от цикла — согласен. В Ofront сдвиг SYSTEM.ROT реализован так:
Код:
#define __ROTL(x, n, t) ((t)((__U_##t)(x)<<(n)|(__U_##t)(x)>>(8*sizeof(t)-(n))))
#define __ROTR(x, n, t) ((t)((__U_##t)(x)>>(n)|(__U_##t)(x)<<(8*sizeof(t)-(n))))
#define __ROT(x, n, t)  ((n)>=0? __ROTL(x, n, t): __ROTR(x, -(n), t))
(__U_##t)(x) это приведение к беззнаковому типу нужной битности.

Но это на Си. А нужно на Компонентном Паскале.

P.S. Про то, что в Обероне-07 нет типа LONGINT, я в курсе.

Автор:  Kemet [ Пятница, 22 Февраль, 2019 09:15 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Oleg N. Cher писал(а):
Хорошо, усложним проблему. Нужен RorLong для 64-битных значений. SYSTEM.LSH и SYSTEM.ROT не предлагать — они умеют только 32-битные сдвиги (хотя в Ofront'е+ и 64-битные тоже). Только ASH нормально заточен под LONGINT.
Если так, то нужно правильно сделать эти сдвиги. Или разбить число на 32-битные сегменты и сдвигать их последовательно.

Автор:  Artyemov [ Суббота, 23 Февраль, 2019 17:33 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Kemet писал(а):
Oleg N. Cher писал(а):
Хорошо, усложним проблему. Нужен RorLong для 64-битных значений. SYSTEM.LSH и SYSTEM.ROT не предлагать — они умеют только 32-битные сдвиги (хотя в Ofront'е+ и 64-битные тоже). Только ASH нормально заточен под LONGINT.
Если так, то нужно правильно сделать эти сдвиги. Или разбить число на 32-битные сегменты и сдвигать их последовательно.

А перенос где сохранять? Слово состояния процессора же вне доступных "сущностей" ;-)

Автор:  Oleg N. Cher [ Воскресенье, 24 Февраль, 2019 15:19 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Протестировал такую реализацию RorLong (в BlackBox):

Код:
PROCEDURE RorLong* (x: LONGINT; n: INTEGER): LONGINT;
   VAR r: INTEGER; xr: LONGINT;
BEGIN
   ASSERT((0 <= n) & (n <= 63));
   xr := x; r := n;
   IF (xr < 0) & (r > 0) THEN xr := ASH(xr, -1) - MIN(LONGINT); DEC(r) END;
   RETURN ASH(xr, -r) + ASH(x, 64 - n)
END RorLong;

ASH(x, n) выдаёт ошибку исполнения "undefined real result (F8A1, 37E)" при n > 62. Для арифметического сдвига это нормально — получилось арифметическое переполнение, результат врезался в бит знака.

Похоже, использовать ASH для логического сдвига битов — плохая идея.

Будут ещё предложения?

Автор:  Trurl [ Воскресенье, 24 Февраль, 2019 16:01 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

В BlackBox же LONGINT реализован на FPU. Не уверен, что двигать там биты - хорошая идея.

Автор:  Oleg N. Cher [ Воскресенье, 24 Февраль, 2019 16:12 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Это хорошо, что переполнение ловит. Но вот да, как двигать биты (с переносом)? Не иначе как бить число на части и через SYSTEM.LSH...

Автор:  Илья Ермаков [ Воскресенье, 24 Февраль, 2019 17:07 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Oleg N. Cher писал(а):
А как ещё называть людей, которые считают Оберон-07 абсолютно полноценным и самодостаточным языком программирования? И скрупулёзно ведут пространные дискуссии о каждом его аспекте, находя всё больше и больше достоинств по сравнению с Модулой-2, Обероном-2 и КП. Фанатиками? :-)


Если использовать его как "безопасный Си" для микроконтроллеров, да ещё и модульный и с расширяемой системой типов - то он, наверное, реально полноценен.

Но это если не хотеть иметь инструменты прикладного абстрагирования повыше уровнем.

Автор:  Oleg N. Cher [ Воскресенье, 24 Февраль, 2019 20:12 ]
Заголовок сообщения:  Re: Оберон-07: вопросы реализации

Илья, ну мы наверное константные массивы не зря в Ofront+ добавляли? Нет этого функционала в Обероне. А для мк он реально нужен. Или извращаться с UUDecode("FFAABB...")? Это потеря памяти на больших массивах. Тройная. А там, где нет файловой системы, из файла ресурс не скачать.

Мы тут выходим на скользкий путь того, что всё недостающее можно реализовать в SYSTEM.

Страница 2 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/