Re[11]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.15 18:12
Оценка:
ARK>Не совсем так:
  Скрытый текст
ARK>
ARK>  class Test
ARK>  {
ARK>    private MyItem[] _myArray;

ARK>    protected abstract void ProcessInternal(MyItem item) throws Error;  // видим возможность вылета и можем найти по Ctrl-F

ARK>    public void Process() throws Error    // видим возможность вылета и можем найти по Ctrl-F
ARK>    {
ARK>      foreach (var item in _myArray)
ARK>      {
ARK>         try!(ProcessInternal(item));           // видим возможность вылета и можем найти по Ctrl-F
ARK>      }

ARK>      // здесь _myArray оказался в неизвестно каком состоянии
ARK>    }
ARK>


Какой-то ад. Мало того, что надо писать тонны дополнительного кода, так эта зараза еще распространяется вверх по всей цепочке вызовов (хуже GPL, ей-богу).

В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, рпидется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?

Чем это хорошо? А ничем.

В общем, do not program defensively.


dmitriid.comGitHubLinkedIn
Re[3]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.15 18:19
Оценка:
s22>Где то читал, что "вменяемый GC" на телефоне требует как минимум 0,05 секунды задержки, что Apple признали не приемлемым, так как пользователь будет ощущать дискомфорт.

эээ чо? Сфероваккумный GC на сферовакуумном телефоне.

У Apple'а есть Objective-C, в который пытались впихнуть GC, и есть Swift, который должен быть совместимым со всем кодом, написанным на этом самом Objective-C. Вот тут да, возможно и есть задержка в 0.05 секунды банально из-за того, что нельзя натянуть GC на Objective-C.

В языке типа Erlang'а GC вообще незаметен для приложения, и на него не влияет. Но Erlang не особо впихуем на телефоны Хотя...


dmitriid.comGitHubLinkedIn
Re[12]: Тенденции языков
От: AlexRK  
Дата: 18.05.15 18:24
Оценка:
Здравствуйте, Mamut, Вы писали:

M>В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, рпидется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?


Ну так пусть функция возвращает нужное значение, в чем проблема? Ах, внутри файл читается? Тогда будьте добры отреагировать на потенциальный сбой.
Не хотите? Используйте другие языки, никто не против.
Лично мне нравится подход Rust/Swift.

M>Чем это хорошо? А ничем.


Это хорошо тем, что все происходит _явно_ и видно в коде.

M>В общем, do not program defensively.


А, например, МакКоннелл другого мнения. И я тоже. Впрочем, как эрлангисты пишут, мне все равно.
Re[13]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.15 18:34
Оценка:
M>>В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, рпидется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?

ARK>Ну так пусть функция возвращает нужное значение, в чем проблема?


В том, что никто не знает, что это за «нужное значение».

ARK>Ах, внутри файл читается? Тогда будьте добры отреагировать на потенциальный сбой.


Каким образом, если исключений нет?

M>>Чем это хорошо? А ничем.

ARK>Это хорошо тем, что все происходит _явно_ и видно в коде.

Да ничего там «явного». Будет две сотни try! и один общий Err("строка"). И иди разбирайся.


dmitriid.comGitHubLinkedIn
Re[13]: Тенденции языков
От: DarkEld3r  
Дата: 18.05.15 18:50
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>А нужно ли оно? Отреагировать на панику ведь все равно никак нельзя. Поэтому просто можно считать, что ее нет.

Во первых, noexcept в плюсах предоставляет дополнительную информацию компилятору, а значит помогает оптимизациям. Во вторых, в минусы исключений записывается неявность — про панику точно так же из документации узнавать приходится. Ну и в третьих, "иногда" среагировать можно.
Re[13]: Тенденции языков
От: DarkEld3r  
Дата: 18.05.15 18:50
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Знаешь — всегда возможна.

Да ладно?
Re[16]: Тенденции языков
От: DarkEld3r  
Дата: 18.05.15 18:53
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>"Не принято" — это зачет!

Понимаю, что это звучит забавно. Но ведь и в плюсах можно аборт изнутри либы звать, но так обычно всё-таки не делают.

VD>Дык, все ненавистники исключений обычно и имеют опыт их использования исключительно на С++. Возможно, если бы авторы того же Раста по пользовались бы языками где исключения реализованы качественно, у них и не возникло бы желания возвращаться в прошлые века и городить сахар над кодами возврата.

Ну у меня как раз, в основном, плюсовых опыт, а исключения в расте тоже хочется. Так что подозреваю, что причина в другом. Опять же, авторы ссылаются и на другие языки.
Re[14]: Тенденции языков
От: AlexRK  
Дата: 18.05.15 18:54
Оценка:
Здравствуйте, Mamut, Вы писали:

M>>>В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, рпидется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?

ARK>>Ну так пусть функция возвращает нужное значение, в чем проблема?
M>В том, что никто не знает, что это за «нужное значение».

Ничего не понял.
(Если что, говнокод, в том числе и "список любых типов любой сложности, внутренности или вложенности", можно написать на чем угодно.)

ARK>>Ах, внутри файл читается? Тогда будьте добры отреагировать на потенциальный сбой.

M>Каким образом, если исключений нет?

Проверкой результата функции, представленного алгебраическим типом.

M>>>Чем это хорошо? А ничем.

ARK>>Это хорошо тем, что все происходит _явно_ и видно в коде.
M>Да ничего там «явного». Будет две сотни try! и один общий Err("строка"). И иди разбирайся.

Как я понимаю, авторы раста рассчитывают на то, что код будет писаться в основном таким образом, чтобы избегать исключений где попало. Поэтому — в теории — не должно быть try везде, где только можно.
Бич дотнета и явы, NRE, они устранили, это уже неплохо. Если бы еще были правильно сделанные предусловия, тогда закрылся бы еще один источник ошибок — проверки в начале функций.
Re[14]: Тенденции языков
От: AlexRK  
Дата: 18.05.15 18:58
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

ARK>>А нужно ли оно? Отреагировать на панику ведь все равно никак нельзя. Поэтому просто можно считать, что ее нет.

DE>Во первых, noexcept в плюсах предоставляет дополнительную информацию компилятору, а значит помогает оптимизациям.

В плюсах исключения, которые можно хватать и работать дальше, а в расте аборт.

DE>Во вторых, в минусы исключений записывается неявность — про панику точно так же из документации узнавать приходится.


Да вот я не пойму — а зачем?

DE>Ну и в третьих, "иногда" среагировать можно.


В расте? Не слышал. Но, ИМХО, это неправильно, по идее паника это паника.
Re[15]: Тенденции языков
От: DarkEld3r  
Дата: 18.05.15 19:09
Оценка:
Здравствуйте, AlexRK, Вы писали:

ARK>В плюсах исключения, которые можно хватать и работать дальше, а в расте аборт.

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

ARK>Да вот я не пойму — а зачем?

Как правило всё достаточно очевидно, но мне хочется заранее знать в каких случах что-то может пойти не так. Опять же, для стандартных функций старательно прописаны случаи возникновения паники. Даже в официальном мануале пару слов про соответствующее оформление документации есть. Значит не только мне это важным кажется.

ARK>В расте? Не слышал. Но, ИМХО, это неправильно, по идее паника это паника.

Можно обрабатывать на границе потоков. Так что при большом желании можно извернутсья и использовать как исключения, только вместо try будет thread.
Re[16]: Тенденции языков
От: AlexRK  
Дата: 18.05.15 19:13
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

ARK>>В плюсах исключения, которые можно хватать и работать дальше, а в расте аборт.

DE>Не совсем аборт, по крайней мере, не аборт в плюсовом смысле — стек разматывается и деструкторы вызываются. Очевидно, для этого нужно дополнительные действия предпринимать, а для noexcept не нужно.

Да, тогда согласен.

ARK>>Да вот я не пойму — а зачем?

DE>Как правило всё достаточно очевидно, но мне хочется заранее знать в каких случах что-то может пойти не так. Опять же, для стандартных функций старательно прописаны случаи возникновения паники. Даже в официальном мануале пару слов про соответствующее оформление документации есть. Значит не только мне это важным кажется.

Хз. По-моему, это идею паники убивает, она действительно начинает рассматриваться как исключение (что-то обратимое).

ARK>>В расте? Не слышал. Но, ИМХО, это неправильно, по идее паника это паника.

DE>Можно обрабатывать на границе потоков. Так что при большом желании можно извернутсья и использовать как исключения, только вместо try будет thread.

Интересно, зачем это сделано... Как пить дать, на основе этой фичи будут криво эмулировать исключения.
Re[15]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.15 19:40
Оценка:
M>>В том, что никто не знает, что это за «нужное значение».

ARK>Ничего не понял.

ARK>(Если что, говнокод, в том числе и "список любых типов любой сложности, внутренности или вложенности", можно написать на чем угодно.)

То, что это можно написать на чем угодно не дает индульгенции Расту.

ARK>>>Ах, внутри файл читается? Тогда будьте добры отреагировать на потенциальный сбой.

M>>Каким образом, если исключений нет?
ARK>Проверкой результата функции, представленного алгебраическим типом.

В итоге, любой функции, даже написанной через три месяца другим человеком четырьмя уровнями выше, придется столкнуться с тем, что возвращается не нужное значение, а никому не нужная обертка Result<список любых типов любой сложности, внутренности или вложенности>?



M>>>>Чем это хорошо? А ничем.

ARK>>>Это хорошо тем, что все происходит _явно_ и видно в коде.
M>>Да ничего там «явного». Будет две сотни try! и один общий Err("строка"). И иди разбирайся.

ARK>Как я понимаю, авторы раста рассчитывают на то, что код будет писаться в основном таким образом, чтобы избегать исключений где попало. Поэтому — в теории — не должно быть try везде, где только можно.


Чистые теоретики, что ли? На практике будет сотня try! со строкой в Err


dmitriid.comGitHubLinkedIn
Re[15]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.15 19:47
Оценка:
DE>>Во вторых, в минусы исключений записывается неявность — про панику точно так же из документации узнавать приходится.
ARK>Да вот я не пойму — а зачем?

Потому что в правильных языках даже паника — не причина убивать программу. В частности, если паника произойдет в другом потоке, хорошо бы из вызывающего потока узнать, почему она произошла (желательно — со стектрейсом, например).

Как это будет работать в расте?


dmitriid.comGitHubLinkedIn
Re[16]: Тенденции языков
От: AlexRK  
Дата: 18.05.15 19:54
Оценка:
Здравствуйте, Mamut, Вы писали:

DE>>>Во вторых, в минусы исключений записывается неявность — про панику точно так же из документации узнавать приходится.

ARK>>Да вот я не пойму — а зачем?

M>Потому что в правильных языках даже паника — не причина убивать программу. В частности, если паника произойдет в другом потоке, хорошо бы из вызывающего потока узнать, почему она произошла (желательно — со стектрейсом, например).


В расте программа не убивается, убивается текущая задача.

M>Как это будет работать в расте?


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

В программе панику обработать нельзя, хотя выше DarkEld3r сообщил, что есть какая-то (сомнительная) возможность перехвата на границе потоков.
Re[17]: Тенденции языков
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.15 20:08
Оценка:
M>>Потому что в правильных языках даже паника — не причина убивать программу. В частности, если паника произойдет в другом потоке, хорошо бы из вызывающего потока узнать, почему она произошла (желательно — со стектрейсом, например).

ARK>В расте программа не убивается, убивается текущая задача.


Ну, если это произойдет в главном потоке, то убьется вся программа. Что тоже плохо.

M>>Как это будет работать в расте?


ARK>Честно говоря, не знаю, есть ли там стектрейс, возможно, в дебаге есть какая-то подобная вещь. В релизе, уверен, не будет, потому что оптимизации.


ARK>В программе панику обработать нельзя, хотя выше DarkEld3r сообщил, что есть какая-то (сомнительная) возможность перехвата на границе потоков.


А вот это очень и очень плохо. Каким бы смешным ни был пример про деление на ноль выше, а мы его один раз получили (где-то не стояли проверки на входящие значения). Exception заботливо был записан самым верхнеуровневым обработчиком в логи (включая входящие данные, стектрейс и т.п.), клиенту был отдан какой-то стандартизированный ответ.


dmitriid.comGitHubLinkedIn
Re[16]: Тенденции языков
От: DarkEld3r  
Дата: 18.05.15 20:36
Оценка: 17 (1)
Здравствуйте, Mamut, Вы писали:

M>Как это будет работать в расте?

Стектрейса не будет, будет возврат ошибки любого типа. Буквально — вернётся Any из которого потом реальный тип, насколько я знаю, не так-то и удобно доставать.
Re[17]: Тенденции языков
От: DarkEld3r  
Дата: 18.05.15 20:38
Оценка: 17 (1)
Здравствуйте, AlexRK, Вы писали:

ARK>В программе панику обработать нельзя, хотя выше DarkEld3r сообщил, что есть какая-то (сомнительная) возможность перехвата на границе потоков.

Вот возвращаемый тип, если что.
Re[14]: Тенденции языков
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.05.15 04:20
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

DM>>Знаешь — всегда возможна.

DE>Да ладно?

Деление на ноль или какая-нибудь хрень в unsafe завернутая — возможны где угодно же.
Re[8]: Тенденции языков
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.05.15 04:24
Оценка: +1
Здравствуйте, Mamut, Вы писали:

DM>> В Расте же есть нормальные алгебраические типы, и обработка ошибок строится как в хаскеле и прочих ML-ях: паттерн матчингом


M>То есть


M>
case a() of
  _  -> сделай_что_то, невзирая на то, что был возвращен код ошибки?
end


Да, если возвращаемое значение тебе не важно, можно примерно так написать, даже короче. Но это вон как надо расстараться, сколько слов написать. Намеренный отказ от разбора ошибки все же не то же самое, что банальная забывчивость.
Re[12]: Тенденции языков
От: s22  
Дата: 19.05.15 05:26
Оценка: -2 :))) :)))
Здравствуйте, VladD2, Вы писали:

Ты удивишься, но сейчас в крупных франчах 1с (да да программисты 1с) дефакто запрещено использовать исключения и гото.
Лучше пусть вылетит ошибка(в том числе и в боевом режиме), чем некорректное поведение!

"Ясно, что быдлокодеры как сидели на шарпе так и будут сидеть"
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.