OberonCore

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

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




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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Вторник, 30 Апрель, 2019 15:07 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1194
Откуда: Украина, Киев
budden писал(а):
Оказалось - в голанге сериализация есть, не знаю насчёт десериализации обратно из текста. Многие другие вещи как раз прямо являются воплощением моих планов и завершением моих экспериментов.
Сериализация, говорите, в голанге есть. Это больше похоже на её отсутствие...
В частности, попробовал сделать парсинг CSV аналогично, как делал на Object Pascal. Скорость парсинга, в приципе, получил соизмеримую. Но! Хвалёная сериализация встроенная в Go (GOB) это просто какой-то сплошной дикий тормоз. Наверное в A2 в XML-ки гораздо быстрее сериализуется! В Object Pascal встроенная сериализация работает просто молниеносно быстро. Ip2Location база пишется/читается за 2 мс. В Go чтение/запись GOB такие же по скорости как парсинг CSV. Это ж просто бред какой-то, а не сериализация! Зачем она такая нужна???
И в Object Pascal бинарники (сериализованные данные) в 6 раз компактнее!
Вот, подобное с 12-го года висит Parsing gob is significantly slower than parsing JSON
И подобных тем и бенчмарков целая куча. Не понял ещё, правда, кто же победитель по скорости...


Последний раз редактировалось Ярослав Романченко Вторник, 30 Апрель, 2019 15:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Вторник, 30 Апрель, 2019 15:15 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1194
Откуда: Украина, Киев
budden писал(а):
defer
В Active Oberon есть близкий аналог - FINALLY


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Вторник, 30 Апрель, 2019 16:53 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Ярослав Романченко писал(а):
делал на Object Pascal
Нет варианта с отображением файла в память ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Вторник, 30 Апрель, 2019 19:32 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1194
Откуда: Украина, Киев
Kemet писал(а):
Ярослав Романченко писал(а):
делал на Object Pascal
Нет варианта с отображением файла в память ))
Сериализация в Object Pascal, это практически отображение из памяти / в память, очень эффективная реализация. Смотрю теперь на то как сделано в Go как на "Цырк на дроти" (Цирк на проводе). Как можно было такое убожество выкатывать в массы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Критика Golang
СообщениеДобавлено: Среда, 01 Май, 2019 13:47 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 714
Откуда: Барнаул
Ярослав Романченко писал(а):
Сериализация в Object Pascal, это практически отображение из памяти / в память, очень эффективная реализация.
Да вроде, обычное чтение из потока было, или что-то в этом плане изменилось и они стали мапить файлы?


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

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


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

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


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

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