Re[4]: Доклад Влада на altnet
От: VoidEx  
Дата: 04.04.11 08:15
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, VoidEx, Вы писали:


VE>>Ух ты, это что это у них, монады или ленивость неявные появились? Куда строгость делась, нелогично как-то. Тип же int, а вычисление не проиведено.


VD>Зачем тут ленивость? Исключение предотвращает любую возможность продолжения вычислений. Так что ленивые они или нет уже не важно.


Я думал исключение вылетит на WriteLine, так как не думал, что для людей будет что-то удивительное в вылете на def.
Re[5]: Доклад Влада на altnet
От: WolfHound  
Дата: 04.04.11 10:40
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Я думал исключение вылетит на WriteLine, так как не думал, что для людей будет что-то удивительное в вылете на def.

Людям удивительно что throw можно написать внутри выражения.
Ибо во всех известных им языках throw это statement и не как иначе.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Доклад Влада на altnet
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.11 19:32
Оценка:
Здравствуйте, WolfHound, Вы писали:

VE>>Я думал исключение вылетит на WriteLine, так как не думал, что для людей будет что-то удивительное в вылете на def.

WH>Людям удивительно что throw можно написать внутри выражения.
WH>Ибо во всех известных им языках throw это statement и не как иначе.

Вообще, все началось с того, что я показал, что try/catch может быть внутри выражения. Ну, и далее народ понесло заниматься исследованиями .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Доклад Влада на altnet
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.11 20:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Понравился и сам докладчик (в хорошем смысле слова),


Это прямо как в том анекдоте...

Курилка какой-то организации... Стоят несколько сотрудников, курят и один из них говорит:
— Наш начальник полное говно!
Тут появляется начальник. Сотрудник видит его и замялив добавляет:
— Ну, в хорошем смысле этого слова.

Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Доклад Влада на altnet
От: Аноним  
Дата: 04.04.11 23:08
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Вот те раз! Пол часа рассказывал о ComputationExpressions и раз двадцать повторил, что они основаны на монадах, но до многих эта мысль так и не смогла дойти.


Учитывая, что монады — это живые, духообразные единицы, из которых все состоит и кроме которых ничего в мире нет (http://ru.wikipedia.org/wiki/Монадология) можно с уверенностью сказать, что всё в этом мире основано на монадах. Вот, даже Эрику (http://channel9.msdn.com/Shows/Going+Deep/Expert-to-Expert-Brian-Beckman-and-Erik-Meijer-Inside-the-NET-Reactive-Framework-Rx) они в сишарпе мерещатся. Однако ценность языка программирования как средства коммуникации между программистами, заключается (по моему мнению) в возможности выражать абстракции, причем не на уровне комментариев (названия идентификаторов тоже являются комментариями) а на уровне семантики.

Монадой является тройка (T, η, μ), состоящая из (эндо)функтора и двух естественных преобразований, удовлетворяющих аксиомам монады. В Хаскелле она представлена с помощью класса типов Monad. Действительно, рассмотрим категорию, где объектами являются типы Хаскелла, а стрелками — функции вида a -> b. Конструктор типа монады отображает произвольный тип из Hask в Monad. Функция отображения произвольного морьфизьма выражается через return и bind: map f = flip bind (return . f). η соответствует return. μ соответствует join, который опять же выражается через bind: join m = bind m id. Далее, пользуясь тем, что монада представлена на уровне системы типов, можно объявлять функции, которые будут работать с любой монадой, например такую — liftM2 : Monad m => (a -> b -> c) -> m a -> m b -> m c, берущую любую функцию от двух аргументов, и поднимающую её в монаду. Ну и так далее.

Программист, работая с этим, всегда будет видеть, с каким именно объектом он имеет дело, будет понимать, какими свойствами обладают эти функции и работая с любым монадическим интерфейсом всегда сможет воспользоваться общим набором знакомых ему комбинаторов.

VD>Поддержка же монад языком — это не более чем синтаксический сахар скрывающих ненужные детали.


Обычно под поддержкой монад понимают возможность выразить их средствами языка, как я описал выше. Синтаксический сахар, вроде do нотации, служит только для того, чтобы не лепить руками замыкания. Сомневаюсь, что если из Хаскелла уберут этот сахар, кто-нибудь станет говорить, что поддержки монад в нём больше нет. Например для функторов, стрелок, комонад и т.д. в Хаскелле никакого сахара нет, тем не менее язык позволяет описывать эти объекты. С другой стороны, в F# есть хак компилятора, называемый Computation Expressions и представляющий собой "обессахариватель", весьма близкий к do-нотации. Но вот сами монады в языке не представлены никак, для достижения сходного эффекта там придется таскать с собой expression builder и заниматься всякими извращениями.

VD>Макросы не пригодны для изменения системы типов.


Это зависит от языка и макросистемы. В случае Typed Scheme ответ скорее да, чем нет. Но здесь я скорее иронизировал, сделать крутую систему типов, да еще на дотнете, да еще так, чтобы это не тормозило, будет очень-очень сложно. Настолько сложно, что даже не понятно, зачем, ведь интеграция с дотнетом нужна только ради его фреймворка, а активное его использование сведет на нет любые преимущества от мощной системы типов или ленивости.

VD>Это прямо как в том анекдоте...


Не, ничего такого я не имел ввиду, анекдот раньше не слышал
Re[5]: Доклад Влада на altnet
От: adontz Грузия http://adontz.wordpress.com/
Дата: 04.04.11 23:28
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Учитывая, что монады — это живые, духообразные единицы,


Ты взорвал мой мозг.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Доклад Влада на altnet
От: Undying Россия  
Дата: 07.04.11 04:44
Оценка: +1
Здравствуйте, VoidEx, Вы писали:

MM>>
MM>>def a = 1 + (throw Exception() : int);
MM>>WriteLine(a);
MM>>


VE>Ух ты, это что это у них, монады или ленивость неявные появились? Куда строгость делась, нелогично как-то. Тип же int, а вычисление не проиведено.


В смысле строгость делась? Чем этот код отличается от?

int Func()
{
  throw new Exception();
}

int a = 1 + Func();


MM>>В синтаксисе наверняка ошибся, но суть надеюсь ясна. Все дружно решили, что это очень круто, но коллег за такое поубивали бы


Когда такой код записан по месту это гораздо лучше, чем когда он записан в отдельной функции.
Re[4]: Доклад Влада на altnet
От: VoidEx  
Дата: 07.04.11 06:28
Оценка: +1
Здравствуйте, Undying, Вы писали:

U>В смысле строгость делась? Чем этот код отличается от?


В том-то и дело, что ничем, потому я и подумал, что дело не в этом.
Re[6]: Доклад Влада на altnet
От: hardcase Пират http://nemerle.org
Дата: 07.04.11 06:52
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Учитывая, что монады — это живые, духообразные единицы,


A>Ты взорвал мой мозг.


Вообще-то он процитировал Лейбница.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Доклад Влада на altnet
От: Воронков Василий Россия  
Дата: 07.04.11 15:39
Оценка: :)
Здравствуйте, MxMsk, Вы писали:

MM>
MM>def a = throw Exception() : int;
MM>WriteLine(a);
MM>


А что тут такого удивительного? В C# аналогичный код тоже типизируется:


Funс<int> f = () => { throw new Exception(); };
Re[7]: Доклад Влада на altnet
От: matumba  
Дата: 07.04.11 17:40
Оценка:
Здравствуйте, hardcase, Вы писали:

A>>Ты взорвал мой мозг.


H>Вообще-то он процитировал Лейбница.


Лейбниц писал на Хаскеле?!?!!
гыгы

Это... а кино где? Так и знал, месяц ждать тривиальную видюшку.
Re[8]: Доклад Влада на altnet
От: hardcase Пират http://nemerle.org
Дата: 07.04.11 19:36
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, hardcase, Вы писали:


A>>>Ты взорвал мой мозг.


H>>Вообще-то он процитировал Лейбница.


M>Лейбниц писал на Хаскеле?!?!!

M>гыгы

Нет. Готфрид Лейбниц придумал монады (труд Монадология).
/* иЗвиНите зА неРовнЫй поЧерК */
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.