OberonCore
https://forum.oberoncore.ru/

Оберон-07
https://forum.oberoncore.ru/viewtopic.php?f=115&t=615
Страница 7 из 12

Автор:  AVC [ Понедельник, 27 Октябрь, 2008 11:18 ]
Заголовок сообщения:  Re: Оберон-07

Trurl писал(а):
Наличие SHORTINT и т.п. все равно не спасает от необходимости использовать искусственные приёмы.
Какие именно?
Допустим, я получаю из ОС (скажем, Windows) некую структуру, в которой есть поле типа short int.
Если в языке нет типа SHORTINT, то у меня проблема.
Если в языке есть тип SHORTINT, то проблемы нет.

Автор:  slava [ Понедельник, 27 Октябрь, 2008 11:30 ]
Заголовок сообщения:  Re: Оберон-07

Подключаем SYSTEM и используем SHORTINT, в чем проблема то?
Ведь данные приходят с ОС, значит системность "налицо"!

Автор:  AVC [ Понедельник, 27 Октябрь, 2008 12:29 ]
Заголовок сообщения:  Re: Оберон-07

slava писал(а):
Подключаем SYSTEM и используем SHORTINT, в чем проблема то?
Ведь данные приходят с ОС, значит системность "налицо"!
Ну, проблем две. :)
Во-первых, в модуле SYSTEM нет SHORTINT (согласно описанию языка).
Во-вторых, не хотелось бы использовать SYSTEM при всяком пустяковом затруднении.

Автор:  Trurl [ Понедельник, 27 Октябрь, 2008 12:47 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
Допустим, я получаю из ОС (скажем, Windows) некую структуру, в которой есть поле типа short int.
Если в языке нет типа SHORTINT, то у меня проблема.
Если в языке есть тип SHORTINT, то проблемы нет.

Совсем нет? А выравнивание?
А если этот short int - unsigned?
А если он :12?

Автор:  AVC [ Понедельник, 27 Октябрь, 2008 13:03 ]
Заголовок сообщения:  Re: Оберон-07

Trurl писал(а):
AVC писал(а):
Допустим, я получаю из ОС (скажем, Windows) некую структуру, в которой есть поле типа short int.
Если в языке нет типа SHORTINT, то у меня проблема.
Если в языке есть тип SHORTINT, то проблемы нет.

Совсем нет? А выравнивание?
А если этот short int - unsigned?
А если он :12?
Да, какие-то проблемы остаются. :roll:
(Они, вероятно, решаются с помощью сдвигов и/или MOD.)
Но при отсутствии SHORTINT у нас порой даже не будет возможности описать структуру.
Например:
Код:
struct stupid {
    short int n; /* занимает 2 байта */
    char a[16];
};

Автор:  Александр Ильин [ Понедельник, 27 Октябрь, 2008 13:25 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
slava писал(а):
Подключаем SYSTEM и используем SHORTINT, в чем проблема то?
Ведь данные приходят с ОС, значит системность "налицо"!
Ну, проблем две. :)
Во-первых, в модуле SYSTEM нет SHORTINT (согласно описанию языка).
Во-вторых, не хотелось бы использовать SYSTEM при всяком пустяковом затруднении.
А я бы согласился со slava. На "во-первых": SYSTEM не обязан включать только то, что описано в языке, он может содержать средства для поддержки любых особенности реализации языка или целевой платформы. Например, при отсутствии сборки мусора там может быть SYSTEM.DISPOSE (см. Oakwood Guidelines).
На "во-вторых": интерфейс к ОС (или к железу!) должен быть инкапсулирован в низкоуровневые модули, использующие SYSTEM, а вся остальная программа уже должна быть максимально от него свободна. Таким образом, в данном случае SYSTEM используется по прямому назначению, а не по пустяковым затруднениям.

В целом предлагаю вспомнить, что Оберон призван быть языком высокого уровня. Вирт жалел, что дал слабину и оставил SYSTEM в языке. В идеале все низкоуровневые модули должны быть написаны на чём-то более подходящем к случаю, а не на Обероне.

Автор:  Александр Ильин [ Понедельник, 27 Октябрь, 2008 13:30 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
Да, какие-то проблемы остаются. :roll:
(Они, вероятно, решаются с помощью сдвигов и/или MOD.)
Но при отсутствии SHORTINT у нас порой даже не будет возможности описать структуру.
Это всё задачи конвертации данных из низкоуровневого представления в удобное для работы на языке высокого уровня (и наоборот). Эта задача должна выполняться в модуле-прослойке, чтобы "наверху" ни у кого голова не болела по поводу выравнивания, диапазонов при вычислениях и т.п.

Автор:  AVC [ Понедельник, 27 Октябрь, 2008 13:59 ]
Заголовок сообщения:  Re: Оберон-07

Info21 писал(а):
Известно, как много проблем в программировании возникает из-за преждевременных попиток оптимизации ... etc.

Дублирование тут (и в огромном большинстве других случаев) ничтожно.
Зато гарантия постусловия -- железная.
Вопрос в том, хотим ли мы сделать Оберон практичным языком (конечно, не в ущерб его основным достоинствам)?
То мне рекомендуют использовать SYSTEM при всяком затруднении, а то припоминают, что Вирт жалел, что оставил его в языке. :roll:
IMHO, с таким подходом (равно как с достойным лучшего применения упорством в отношении самых застарелых догм структурного программирования) мы далеко не уедем.
IMHO, мы не должны уклоняться от обсуждения неудобных вопросов. Оберон, применительно ко многим (конечно, не ко всем) задачам, - весьма перспективный язык. Но у нас почему-то нет желания признать и исправить некоторые (легко исправимые!) недостатки.
Характерен пример исключений.
IMHO, не Оберон здесь плох, а наше упрямство (включая самого :roll: ).

Что касается преждевременной оптимизации, давайте посмотрим: неоптимизированные циклы Дейкстры (т.е. неокультуренная математическая нотация), неоптимизированный доступ к элементам массивов, да всё это помножить на однопроходный компилятор... Этак мы и Яве проиграем.

Автор:  Info21 [ Понедельник, 27 Октябрь, 2008 14:01 ]
Заголовок сообщения:  Re: Оберон-07

Я знаю только один пример, где, вроде бы, полезны SHORTINT и BYTE: представление данных в символической алгебре. Отдельные члены в мономах кодируются степенями переменных. Скажем, 10 переменных, степени небольшие, достаточно байта. Совокупный объем выражений в интересных задачах -- в гигабайтах.
Фактор 4 (из-за выравнивания чуть меньше) кажется чрезмерно большим. (40 <> 12).

С другой стороны, там много чего еще есть.
На каждый такой 10-байтовый блок -- минимум три указателя (12 байт), какие-то коэффициенты -- целые числа во много слов (пусть 10=40 байт).
Уже пропорция гораздо менее страшная: 40+52 <> 12+52 или 92 <> 64.

Предположим, что мы пакуем эти байты прямо в программе.
Тогда, во-первых, упаковка может быть и более плотной (показатели скорее в пределах 10, чем 127).
Во-вторых, затраты CPU тут ничтожны по ср. с арифметикой длинных коэффициентов и прочими сортировками и вводом-выводом, притом спрятаны в паре маленьких процедурок.

Так что даже в этом примере получается, что овчинка не очень выделки стоит.

Автор:  Info21 [ Понедельник, 27 Октябрь, 2008 14:14 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
Вопрос в том, хотим ли мы сделать Оберон практичным языком (конечно, не в ущерб его основным достоинствам)?
Что значит практичный. Практичность значит (по крайней мере как цель, в моем понимании) поддержка техничного программера. Который быстро и технично выдает железно-надежный код (и никогда не выдает процедуры вроде NeedOut, что привел Штирлиц).

AVC писал(а):
Характерен пример исключений.
IMHO, не Оберон здесь плох, а наше упрямство (включая самого :roll: ).
Характерен, но в другом отношении. Давайте всё-таки включим в картину соображение, что удалить из языка что-то практически невозможно. Обязательно нужно на уровне языка реализовывать?

AVC писал(а):
Что касается преждевременной оптимизации, давайте посмотрим: неоптимизированные циклы Дейкстры (т.е. неокультуренная математическая нотация), неоптимизированный доступ к элементам массивов, да всё это помножить на однопроходный компилятор... Этак мы и Яве проиграем.

Каким образом. Всё это мелкие мелочи. Сколько раз проверялось, давно надоело уже про это говорить.

Автор:  Trurl [ Понедельник, 27 Октябрь, 2008 14:26 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
Но при отсутствии SHORTINT у нас порой даже не будет возможности описать структуру.
Например:
Код:
struct stupid {
    short int n; /* занимает 2 байта */
    char a[16];
};

А при наличии SHORTINT она есть?
Код:
TYPE stupid = RECORD
    n:SHORTINT; (* занимает 2 байта *)
    a: ARRAY 16 OF CHAR; (* влипли, на самом деле 2 байта пропущено *)
END

Автор:  Wlad [ Понедельник, 27 Октябрь, 2008 15:31 ]
Заголовок сообщения:  Re: Оберон-07

Info21 писал(а):
Я знаю только один пример, где, вроде бы, полезны SHORTINT и BYTE

А я знаю МНОГО примеров. Особливо, как начинаешь с железками работать... И никто меня не убедит, что король в ярких, и красочных одеждах, если у него явно ягодицы на солнышке блестять...

Автор:  Info21 [ Понедельник, 27 Октябрь, 2008 15:48 ]
Заголовок сообщения:  Re: Оберон-07

Владимир Лось писал(а):
Info21 писал(а):
Я знаю только один пример, где, вроде бы, полезны SHORTINT и BYTE

А я знаю МНОГО примеров. Особливо, как начинаешь с железками работать...

Так то с железом. Кто ж спорит.
А ЯВУ должен, вроде, изолировать от железа.
А если нельзя изолироваться, то -- SYSTEM.

Автор:  Wlad [ Понедельник, 27 Октябрь, 2008 16:01 ]
Заголовок сообщения:  Re: Оберон-07

Info21 писал(а):
Владимир Лось писал(а):
Info21 писал(а):
Я знаю только один пример, где, вроде бы, полезны SHORTINT и BYTE

А я знаю МНОГО примеров. Особливо, как начинаешь с железками работать...

Так то с железом. Кто ж спорит.
А ЯВУ должен, вроде, изолировать от железа.
А если нельзя изолироваться, то -- SYSTEM.

Да я не спорю. Я как раз подтверждаю: раньше и мне казалось, что: выбирай Си и буде табе ЩАСТЯ! Ан-нет, до определённого уровня (типа три функции из одного лупа) - всё гут, а вот СИСТЕМЫ писать - абстрагирование - самое то! На самом деле, НАСТОЛЬКО низкоуровневый код составляет проценты в наших встроенных системах. Чисто по закону "10/90". Те десять процентов я вполне сознательно напишу на асме или том же Си за милую душу и без зазрения совести. Но вот остальные 90 я буду вынужден реализовывать на неадекватном инструменте! А мне хочется именно "отвлекаться" на 10 процентов с 90, а не наоборот! И что бы именно - в рамках языка, используемого для 90!!!

Автор:  slava [ Понедельник, 27 Октябрь, 2008 19:34 ]
Заголовок сообщения:  Re: Оберон-07

Info21 писал(а):
По крайней мере он пишет, что в компиляторе у него было "только четыре цикла LOOP" (цитирую по памяти), которые он и заменил.
Может есть какая статья о реальном использовании и о мотивации введения этих нововведений?
Как то все сухо и кратко, вот вам Technical Report и все.

Автор:  Info21 [ Понедельник, 27 Октябрь, 2008 20:24 ]
Заголовок сообщения:  Re: Оберон-07

slava писал(а):
Может есть какая статья о реальном использовании и о мотивации введения этих нововведений?
Как то все сухо и кратко, вот вам Technical Report и все.

Вот тут еще чуть-чуть:
www.inf.ethz.ch/personal/wirth/Articles ... Oberon.pdf

Ему же 74 года, за здоровьем приходится следить .....

Автор:  AVC [ Понедельник, 27 Октябрь, 2008 22:26 ]
Заголовок сообщения:  Re: Оберон-07

Info21 писал(а):
Вот тут еще чуть-чуть:
http://www.inf.ethz.ch/personal/wirth/A ... Oberon.pdf
Спасибо.
А почему Вирт решил отказаться от forward-деклараций процедур?
В борьбе с LOOP и RETURN в середине процедуры намерения понятны (один вход - один выход; самый убойный довод - код, представленный Штирлицем), а вот с отказом от упреждающего объявления непонятно.

Автор:  AVC [ Понедельник, 27 Октябрь, 2008 23:06 ]
Заголовок сообщения:  Re: Оберон-07

Trurl писал(а):
А при наличии SHORTINT она есть?
Остается вполне разрешимый вопрос о выравнивании.
А вот при отсутствии SHORTINT вообще никакой надежды нет. :(

Автор:  slava [ Понедельник, 27 Октябрь, 2008 23:18 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
А вот при отсутствии SHORTINT вообще никакой надежды нет. :(
Ищите SHORTINT в конкретной реализации (под конкретную систему) модуля SYSTEM. :wink:

Автор:  Trurl [ Вторник, 28 Октябрь, 2008 09:01 ]
Заголовок сообщения:  Re: Оберон-07

AVC писал(а):
А вот при отсутствии SHORTINT вообще никакой надежды нет. :(

Код:
TYPE  stupid = ARRAY 18 OF BYTE;

А разрешимость вопроса о выравнивании зависит от компилятора.

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