OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Февраль, 2019 11:28

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




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Понедельник, 11 Февраль, 2019 20:05 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 307
budden писал(а):
Поэтому я не соглашусь, что defer это плохо. И, на мой взгляд, в обероне подобной конструкции не хватает.

Для Оберон-ов есть предложение на базе метаданных:
Zero-Overhead Exception Handling Using Metaprogramming

Однако, этот механизм (лишь для обработки exception) на основе "устных соглашений", вне контракта системы типов или без явных управляющих языковых конструкций. Может быть, каким-то способом через compiletime-макросы можно сделать механизм и с явными декларациями, в том числе и эмуляцию finally-секций или RAII (т.е. исполнение обработчиков и при "обычном" выходе из процедур), и может быть с иной стоимостью runtime-обработки метаданных (или вообще без интроспекции).

А в целом, вопрос в целесообразности. В самом Go defer-а не достаточно, раз уже имеются неструктурные прыжки, то тогда уж и обработку ошибок возникает желание делать не только "структурными if-ами", из-за чего собираются добавить и check с handle:
Обработка ошибок в Go 2

Откровенно говоря, механизм scope в D выглядит, хотя бы по крайней мере, однородно на фоне Go-экспериментов:
https://dlang.org/articles/exception-safe.html

Однако, в случае существенного разнообразия видов всех этих "defer-ов" уже под вопросом понятность алгоритмов.
Причём, согласно статейке выше про exception в Оберон-ах, эти "defer-ы" покрывают лишь т.н. terminate-семантику (в вариантах success, failure или же в целом finally), и нет resume- и retry-семантики.

В Rust-е, к слову, когда-то предлагали и эмуляцию лисповых "conditions and restarts" (resume-семантику), в дополнение к прочим макросам для обработки ошибок:
https://static.rust-lang.org/doc/0.8/tutorial-conditions.html#conditions


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Понедельник, 11 Февраль, 2019 20:11 

Зарегистрирован: Понедельник, 25 Июнь, 2012 17:26
Сообщения: 307
budden писал(а):
Мне кажется, что хорошего подхода к обработке ошибок пока не придумано.

По крайней мере, есть ещё "автоматные" подходы -- иерархические "состояния" или автоматы с "вытеснением" внутренних состояний/автоматов. Идеи "реактивного программирования" из 80-х в мейнстрим притянули лишь частично и в искажённом представлении (точнее, современные игры в "реактивность" совсем иные на фоне истоков).
Ниже примерчик из С-подобного экспериментального языка SHIM (для верификации систем), где exception-ы построены по некоторым мотивам из Esterel:
Scheduling-Independent Threads and Exceptions in SHIM

Exception-ы в статейке, как минимум, имеют несколько иную, отличную от привычной семантику. Этот конкретный вариант механизма несколько усложнён и спорный в ряде моментов, и это всего лишь пример. А в целом, exception-ы выше это замаскированные некоторые "сигналы" (в более привычной форме как объекты Exception и в виде операторов try/catch) из древней автоматной школы (здесь на форуме про Esterel/Lustre и производные есть отдельная темка). И гипотетически в языке возможен единый способ выражения структур данных и процессов над ними, включая параллельные (истинно параллельные и корутины), что по сути, на фоне Go, есть альтернатива не только отдельным механизмам обработки ошибок и RAII (с поддержкой всех вариантов семантики), но и Go-рутинам с оператором select и пр. Но это отдельная и непростая тема.


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

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


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

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


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

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