yigal_s: (Default)
[personal profile] yigal_s
Тут вот
http://occuserpens.livejournal.com/700387.html?thread=3501027#t3501027

возник интересный вопрос, а есть ли какие-то способы избавиться от Inversion of Control в случае GUI, то есть НЕ писать код как обработчик событий от мыши, клавиатуры и прочего, где каждое новое событие влетает в одну и ту же функцию, что напрочь гробит всякую структурность кода и его maintainability.

Т.е. вот функцию scanf уже просто так не вызовешь и НЕ НАПИШЕШЬ, ибо сначала может нажаться клавиша клавиатуры, потом мышки, ну и вообще сначала вобьют буковку в одно окошко, а потом в другое.

Хотелось бы, тем не менее, писать код GUI более вменяемо, чем это предлагают книги а-ля Петзольд, в идеале - просто в виде обычного линейного кода, или хотя бы в виде фрагментов линейного кода большей связности, чем просто в тупом обработчике событий, написанном как конечный автомат.

Вопрос - есть ли подобные разработки?

Date: 2012-12-02 04:49 am (UTC)
From: [identity profile] vantive-98.livejournal.com
Continuations?
http://blog.sigfpe.com/2011/10/quick-and-dirty-reinversion-of-control.html
http://pagesperso-systeme.lip6.fr/Christian.Queinnec/PDF/www.pdf
http://www.slideshare.net/Nathangl/inversion-of-control-containers-vs-handrolled-how-they-compare

Date: 2012-12-02 05:00 am (UTC)
From: [identity profile] solomon2.livejournal.com
Web парадигма (HTML + CSS + JavaScript) для GUI - самое подходящее.

Date: 2012-12-02 05:10 am (UTC)
From: [identity profile] solomon2.livejournal.com
К этому идет. Через несколько лет другого GUI вообще не будет.

Date: 2012-12-02 05:31 am (UTC)
From: [identity profile] solomon2.livejournal.com
Функциональностью и динамичностью, конечно. Я, кстати, сейчас на нем и работаю, очень легко и приятно на самом деле (при наличии мощных библиотек типа jQuery): event handler можно навесить на любой элемент или передать как параметр когда и куда надо. Event loop включен в семантику языка, про синхронизацию можно не думать. При этом структуру страницы и визуальные эффекты на самом языке описывать вообще не надо - для этого есть markup.

Date: 2012-12-02 02:35 pm (UTC)
From: [identity profile] occuserpens.livejournal.com
Идет в браузере и теоретически (кхе-кхе) от него независим

Date: 2012-12-02 02:06 pm (UTC)
From: [identity profile] staerum.livejournal.com
Так есть уже.
Вот вчера только в ленте было.

Date: 2012-12-02 02:42 pm (UTC)
From: [identity profile] occuserpens.livejournal.com
Возьмем гуй к зипу или фтп. Нужно быть очень наивным, чтобы надеяться сходу его написать. И действительно, со временем появились 7zip, Bitkinex, парочка конкурентов - и все. Потому что нет простых способов делать серьезные гуи.

Date: 2012-12-02 10:05 pm (UTC)
From: [identity profile] yatur.livejournal.com
В смысле? Их же вагон и маленькая тележка.

В стиле "голого" Win32 а-ля Петцольд с его WinProc(HWND hWnd, MESSAGE msg) никто не пишет уже лет 15 (с ужасом смотрит на календарь) 20. Понаписали библиотек контролов, начиная с MFC и заканчивая WPF.

А в браузерах WinProc и не было никогда. Там изначально объекты и button.onClick = "javascript:...".

scanf() в этом мире не нужна - в лучшем случае atoi(), которую надо вызывать либо при каждом изменении текста, либо по нажатию кнопочку "поехали".
Edited Date: 2012-12-02 10:06 pm (UTC)

Date: 2012-12-02 10:28 pm (UTC)
From: [identity profile] yatur.livejournal.com
Обертка играет огромную роль. Вместо одного гигантского неподъемного автомата мы получаем много подъемных маленьких.

Что же касается "пассивности" кода - то это следствие не парадигмы программирования, а устройства среды выполнения. Кнопочки и менюшки, которые пользователь может нажать в любой момент, принципиально отличаются от текстого терминала с его "а теперь введите значения координаты Х". Это, возможно, не очень удобно программисту, зато очень удобно пользователю.