Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 08 дек 2019, 23:23

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




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: 21 ноя 2013, 10:42 
Не в сети

Сообщения: 53
Откуда: Россия, Самара
geniepro писал(а):
При чём здесь минимализм???
Добавить одну процедурку -- это лишний чих???
Малозначительное языковое средство??? (язык тут вообще при чём?)


Ещё можно вспомнить непереносимый system.byte Из за отсутствия данного типа в языке, нужно городить непереносимую фичу, которой может и не быть в другом компиляторе.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 21 ноя 2013, 20:17 
Не в сети
Аватара пользователя

Сообщения: 985
Откуда: Днепропетровская обл.
geniepro писал(а):
Неужели оберонщиков и правда устраивает такая ситуация, при которой приходится плодить тонны невнятного говнокода? И всё из-за соображений какого-то там минимализма...
Э не, батенька. Тонны — это про дотнетовцев и явовцев. У нас пока килограммчики. ;) А, собсно, Оберон заставляет код облагораживать. Как раз благодаря своему минимализму. Скажу по себе, что на Обероне обычно пишу намного аккуратнее, чем на Си. Может потому, что язык нравится.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 09:09 
Не в сети
Аватара пользователя

Сообщения: 985
Откуда: Днепропетровская обл.
geniepro писал(а):
Добавить одну процедурку -- это лишний чих???
Насколько я понял, ты имеешь ввиду не процедурку, а ключевое слово языка, разве не так?

geniepro писал(а):
Неужели оберонщиков и правда устраивает такая ситуация, при которой приходится плодить тонны невнятного говнокода? И всё из-за соображений какого-то там минимализма...
geniepro, верно ли я понял тебя, что Оберон неплохой язычок, но одним из самых его больших недостатков является минимализм, а в контексте нашего разговора — то, что невозможно игнорировать результат процедуры с помощью рулезного ключевого слова ignore? И есть ещё много хороших слов, которых несомненно не хватает Оберону, таких как virtual, method, inline, volatile, static, public, protected, private, stdcall, fastcall, cdecl и т.д. И их отсутствие порождает у оберонщиков тонны говнокода и лично оскорбляет твой эстетический вкус? А то ведь добавить их в Оберон можно и нужно.

Но, дорогой, с ними получится уже не Оберон. Получится плохая Ада, да и то в лучшем случае. ;) И по каждому слову можно подискутировать, нужно ли оно в языке. Или достаточно системного префикса (или атрибута). А в ряде случаев — более умного поведения компилятора.

Теперь ещё по поводу игнорирования результата процедур. Здесь было предложено два способа: высокоэффективный системный (но непереносимый) с PUTREG и несистемный (и переносимый), записанный как IF Proc() = 0 THEN END;

Действительно это философский вопрос — стоит ли игнорировать результат. Работая с винапи (или с тем же libc) правильный ответ — да. И проблема здесь коренится не только в, возможно, корявом проектировании, а в том, что интерфейсы библиотек (dll и so) являются процедурными. Есть и объектно-ориентированные интерфейсы, как в Java .class'ах, но Оберон тем и хорош, что предлагает нам модульные интерфейсы, которые включают в себя и процедурные, и ОО, и добавляют кое-что ещё. Так вот, обероновские модульные интерфейсы предоставляют прекрасную возможность игнорировать результат процедур-методов красиво. Ессно, если только это понадобится. При умелом проектировании такая игнорация не столь уж необходима, но умелому проектированию надо долго учиться!

Проиллюстрирую подход примером. В XDev/WinDev есть модуль Files, проектируя который я стремился сделать работу с файлами удобной и безопасной, а также позволяющей обрабатывать возникающие ошибки с разной степенью детализации (углубления в подробности). Вот как выглядит работа с файлами с полным игнором ошибок создания-записи-закрытия файла:
Код: "OBERON"
  1. MODULE FilesTest; IMPORT Files;
  2. VAR
  3. file: Files.FileToWrite;
  4. BEGIN (*$MAIN*)
  5. file.OpenToWrite("Hello.txt"); file.WriteStr("Hello World!"); file.Close;
  6. END FilesTest. (* Ай-яй-яй, никогда не игнорируйте ошибки, а то будет бобо! *)
Благодаря тому, что любые файловые операции с данным файлом после возникновения ошибки игнорируются, ничего ужасного на любой стадии работы с файлом не произойдёт. Никаких runtime error и предложений послать отчёт дяде Биллу. В самом страшном случае файл просто не создастся.

Первая степень детализации при обработке ошибок — определение только факта наличия ошибки, при этом проверять можно после каждой файловой операции:
Код: "OBERON"
  1. LOOP
  2. file.OpenToWrite("Hello.txt");
  3. IF file.error THEN (* Проблемы с созданием файла для записи. *) EXIT END;
  4. file.WriteStr("Hello World!");
  5. IF file.error THEN (* Проблемы с записью данных в файл. *) EXIT END;
  6. file.Close;
  7. IF file.error THEN (* Проблемы с закрытием файла. *) EXIT END;
  8. (* А вот здесь у нас всё в порядке, не паримся! *)
  9. EXIT
  10. END(*LOOP*)
Либо же после целой группы файловых операций:
Код: "OBERON"
  1. file.OpenToWrite("Hello.txt");
  2. file.WriteStr("Hello World!");
  3. file.Close;
  4. IF file.error THEN (* Что-то пошло не так. *)
  5. ELSE
  6. (* Всё отлично, файл создался успешно. *)
  7. END;
Здесь ошибка могла произойти где угодно, но все последующие после неё операции с файлом игнорировались, переменная error (как флажок возникновения ошибки) оставалась неизменно TRUE, а код ошибки доступен в дополнительной переменной для анализа, чтобы понять, что именно произошло. Вот это и есть вторая степень детализации, когда после файловой операции (или группы операций) недостаточно только факта наличия ошибки, а нужно ещё и уточнить её вид, анализируя код ошибки. Текст программы не привожу, идея понятна.

Не призываю избегать обработки ошибок. Не утверждаю, что модуль Files спроектирован идеально правильно и красиво. Просто показываю, что игнорация (а, вернее, опциональная обработка результата) легко достигается средствами Оберона без всяких ключевых слов типа ignore.

geniepro советую не сводить все Обероны к Оберону-07. Есть прекрасный КП. Есть здравые идеи в AO. Вирт ясно показал нам, что нужно конструировать языки под решаемые задачи. Излишнюю зацикленность на Обероне-07, отмежевание от КП (и даже от Оберона-2) в сторону "идеологически чистого, единственно правильного, одобренного дядькой Виртом и кошерного Оберона-07", в котором минимализм действительно доведён почти до невозможности использования, считаю смешным. КП это тоже Оберон, и не намного больше его.

А есть ещё такое математическое расширение, как OberonX, вообще рвёт. Там даже операции "+" и "-" можно переопределять. И небольшое.

Есть, наконец, расширение GPCP, в которое включен 64-битный тип LONGSET, а также обработка исключений и ещё несколько интересных фишек.

Поэтому программист, даже опытный и знающий много рулезных языков, не может адекватно рассуждать о том, что нужно добавить в Оберон, пока очень вдумчиво не поработает, решая на Обероне те задачи, которые он решает. Чтобы произвести обоснованное мнение о целесообразности доработки Оберона в том или ином направлении — ценен опыт работы именно на Обероне, а не на других языках (особенно функциональных или гибридно-функциональных, у которых совсем другая идеология, а часто и назначение). Это всё равно если монах-католик будет рассуждать о реформах, которые надо принять в православной церкви. Нет, господа, этот мёд нужно есть изнутри банки, а снаружи на него можно только смотреть, вовсю рассуждая о его вкусе. "Я Битлз не слушал, мне Мойше по телефону напел. Но другие-то группы я слушаю постоянно!".

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 10:58 
Не в сети

Сообщения: 204
Zorko писал(а):
geniepro писал(а):
Добавить одну процедурку -- это лишний чих???
Насколько я понял, ты имеешь ввиду не процедурку, а ключевое слово языка, разве не так?
Я имел в виду простенькую процедурку в псевдомодуле SYSTEM:
Код: "OBERON"
  1. PROCEDURE IGNORE(x: INTEGER); BEGIN END IGNORE;


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 11:02 
Не в сети

Сообщения: 204
Zorko писал(а):
geniepro, верно ли я понял тебя, что Оберон неплохой язычок, но одним из самых его больших недостатков является минимализм, а в контексте нашего разговора — то, что невозможно игнорировать результат процедуры с помощью рулезного ключевого слова ignore?

Напомни, пожалуйста, где именно я писал про "рулезное ключевое слово ignore"?
Я писал дословно вот что:
geniepro писал(а):
В языках Ocaml/F# для такой цели есть функция-процедура, которая так и называется: ignore. Она просто игнорирует переданное ей значение.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 11:37 
Не в сети
Аватара пользователя

Сообщения: 985
Откуда: Днепропетровская обл.
На Обероне никто не мешает тебе написать процедуры IgnoreInt, IgnoreChar, IgnoreReal и т.д. Чтобы это обобщить — уже нужен тип ANYTYPE, которого в Обероне нету по идеологическим соображениям. Но в КП есть ANYREC и ANYPTR.

Содержимое модуля SYSTEM никак не регламентировано авторами Оберона (просто предлагается рекомендуемый базовый минимум) и отдано на откуп реализаторам компиляторов, но всё это не считается частью языка. Впрочем, как тут не вспомнить про отсутствие переносимости предлагаемого тобой IGNORE.

Предлагаю так:
Код: "OBERON"
  1. DEFINITION Ignore;
  2.  
  3. PROCEDURE Bool (b: BOOLEAN);
  4. PROCEDURE Char (ch: CHAR);
  5. PROCEDURE Int (i: LONGINT);
  6. PROCEDURE Real (r: LONGREAL);
  7. PROCEDURE Ptr (ptr: ANYPTR);
  8. PROCEDURE Set (s: SET);
  9. (* ... *)
  10.  
  11. END Ignore.
Из плюсов сходу бросается в глаза дополнительное удобство, связанное с тем, что мы не просто указываем, что значение игнорируется, но и упоминаем его тип, делая код прозрачнее и нагляднее. И ничего сверх меры делать нам для этого не пришлось, всё Оберон:
Код: "OBERON"
  1. Ignore.Int(Windows.WriteFile(...));
Ignore со строгой типизацией. Чудесненько. И переносимо, и красиво, только малость неоптимально с точки зрения генерации кода (если компилятор не умеет оптимизировать вызовы пустых процедур). Но зато достигается языковыми средствами (и усовершенствованием компилятора), а не "улучшением" языка.

Второй бонус: упоминание в секции импорта модуля Ignore призывает программиста насторожиться: "В этом модуле чего-то (или кого-то) игнорируют — это ж-жжж неспроста". ;)

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

Или это надо понимать как: "Оберон надо усовершенствовать именно так, как хочу этого я, потому что я не лох и знаю такие язычки, по сравнению с которыми ваш Оберон — чиста атстой канкретный". Аплодисменты. Но если это комедия, то почему так плакать хочется? ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 11:45 
Не в сети

Сообщения: 204
Zorko писал(а):
Но если это комедия, то почему так плакать хочется? ;)

Потому что ты драматизируешь )))


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 11:49 
Не в сети
Аватара пользователя

Сообщения: 985
Откуда: Днепропетровская обл.
Так а шо ж делать, раз у меня так мало единомышленников. Обидно же. ;)


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 11:51 
Не в сети

Сообщения: 204
Zorko писал(а):
Так а шо ж делать, раз у меня так мало единомышленников. Обидно же. ;)

Может стоит поменять мышление? )))


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 22 ноя 2013, 11:53 
Не в сети
Аватара пользователя

Сообщения: 985
Откуда: Днепропетровская обл.
Тут уж ничего не поделаешь, пробовал. Но получается только притворяться. Не ловлю, понимаешь, кайф ни от попсы, ни от пива, ни от футбола. Ни от C#. ;)


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

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club