Pure keyword
От: alvas  
Дата: 13.03.10 08:50
Оценка:
В англоязычной части интернете шустро обсуждают новое ключевое слово pure.
Кто может вкратце описать суть по русски?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 15:31
Оценка:
Здравствуйте, alvas, Вы писали:

A>В англоязычной части интернете шустро обсуждают новое ключевое слово pure.

A>Кто может вкратце описать суть по русски?

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

Сама же фича несомненно полезная. Особенно в свете грядущей многопоточности.

Мы планируем ее аналог включить в Nemerle 2.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Pure keyword
От: Воронков Василий Россия  
Дата: 13.03.10 15:51
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вкратце — реализация явно идет не по тому пути. Такие фичи нужно делать на стадии типизированного дерева. А он этот макрос как синтаксический пишет. Моего английского не хватает для проведения философских дискуссий и объяснения товарищу почему так делать не надо. Вкратце я ему своем мнение высказал, но он его проигнорировал.

VD>Сама же фича несомненно полезная. Особенно в свете грядущей многопоточности.
VD>Мы планируем ее аналог включить в Nemerle 2.

Вообще такие вещи хотелось бы видеть скорее в виде атрибутов.
Re[3]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 15:52
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Вообще такие вещи хотелось бы видеть скорее в виде атрибутов.


Это уже без разницы. Он налепил ключевых слов. Я говорю о реализации. Реализация там весьма непродуманная.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Pure keyword
От: Воронков Василий Россия  
Дата: 13.03.10 15:58
Оценка:
Здравствуйте, VladD2, Вы писали:

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

ВВ>>Вообще такие вещи хотелось бы видеть скорее в виде атрибутов.
VD>Это уже без разницы. Он налепил ключевых слов. Я говорю о реализации. Реализация там весьма непродуманная.

Pure в моем понимании — это контракт. Атрибут как раз и предполагает, что мы не вмешиваемся в синтаксис, но на определенной стадии тело метода должно быть проверено на соответствие контракту (кстати, на какой стадии?). Можно придумать и другие контракты.

А, кстати, как это вообще работает? Каким образом, например, отслеживать то, что функция *вообще* не имеет побочных эффектов (например, консольного вывода)? Или это как бы "более или менее" pure, но без гарантий?
В Бета 1 ничего подобного нет, проверить не могу.
Re[5]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 16:03
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Pure в моем понимании — это контракт. Атрибут как раз и предполагает, что мы не вмешиваемся в синтаксис, но на определенной стадии тело метода должно быть проверено на соответствие контракту. Можно придумать и другие контракты.


А модификаторы доступа, скажем, к контракту не относятся?
В общем, спор не о чем.

ВВ>(кстати, на какой стадии?)


Это надо делать на стадии идущей за стадией вывода типов. А то и на стадии предшествующей генерации кода, так как до нее происходит множество преобразований кода.

ВВ>А, кстати, как это вообще работает? Каким образом, например, отслеживать то, что функция *вообще* не имеет побочных эффектов (например, консольного вывода)? Или это как бы "более или менее" pure, но без гарантий?


Для функций которые и так pure вопросов не возникает. Остальные надо аннотировать. В приципе это и так сделано (как я понимаю) в 4-ом фрэймворке (для поддержки контрактов).

ВВ>В Бета 1 ничего подобного нет, проверить не могу.


Я думаю, что и в релизе не будет. Кому захочется может использовать этот макрос самостоятельно.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Pure keyword
От: Воронков Василий Россия  
Дата: 13.03.10 16:09
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Pure в моем понимании — это контракт. Атрибут как раз и предполагает, что мы не вмешиваемся в синтаксис, но на определенной стадии тело метода должно быть проверено на соответствие контракту. Можно придумать и другие контракты.

VD>А модификаторы доступа, скажем, к контракту не относятся?

Относятся.

VD>В общем, спор не о чем.


Спор действительно ни о чем. Тебе нравится добавление ключевого слова? Таких компайл-тайм контрактов можно довольно много придумать — Nothrow какой-нибудь, например — вводить для каждого ключевое слово несколько избыточно.
Но сама идея хорошая, иногда возникает потребность в чем-то таком.

ВВ>>(кстати, на какой стадии?)

VD>Это надо делать на стадии идущей за стадией вывода типов. А то и на стадии предшествующей генерации кода, так как до нее происходит множество преобразований кода.
ВВ>>А, кстати, как это вообще работает? Каким образом, например, отслеживать то, что функция *вообще* не имеет побочных эффектов (например, консольного вывода)? Или это как бы "более или менее" pure, но без гарантий?

Говоря другими словами, pure должен вызывать только методы, явно помеченные как pure — в противном случае он уже не pure? А как быть при вызове методов из сторонних библиотек или того же дотнета? Метод становится автоматически не pure?
Re[2]: Pure keyword
От: alvas  
Дата: 13.03.10 16:40
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>В англоязычной части интернете шустро обсуждают новое ключевое слово pure.

A>>Кто может вкратце описать суть по русски?

VD>Вкратце — реализация явно идет не по тому пути. Такие фичи нужно делать на стадии типизированного дерева. А он этот макрос как синтаксический пишет. Моего английского не хватает для проведения философских дискуссий и объяснения товарищу почему так делать не надо. Вкратце я ему своем мнение высказал, но он его проигнорировал.


VD>Сама же фича несомненно полезная. Особенно в свете грядущей многопоточности.


VD>Мы планируем ее аналог включить в Nemerle 2.


Спасибо. Ты описал что он делает не так, но не написал что это такое? Можно вкратце?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: Pure keyword
От: alvas  
Дата: 13.03.10 16:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вкратце — реализация явно идет не по тому пути. Такие фичи нужно делать на стадии типизированного дерева. А он этот макрос как синтаксический пишет. Моего английского не хватает для проведения философских дискуссий и объяснения товарищу почему так делать не надо. Вкратце я ему своем мнение высказал, но он его проигнорировал.


Попроси чтобы и он высказал свое.
Если сможет — значит понимает что делает. Можно будет дальше обсуждать, чтобы прийти к взаимопониманию
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[3]: Pure keyword
От: Jack128  
Дата: 13.03.10 16:46
Оценка:
Здравствуйте, alvas, Вы писали:

A>Спасибо. Ты описал что он делает не так, но не написал что это такое? Можно вкратце?


Ну, видимо pure говорит о том, что функция "чистая", без побочных эффектов. то есть не меняет состояния окружающего мира, а результат функции однозначно зависит от её параметров.
Re[7]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 16:52
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Относятся.


Ну, и в чем тогда разница?

ВВ>Спор действительно ни о чем. Тебе нравится добавление ключевого слова?


Да мне плевать. Тем более, что ключевые слова можно использовать и в виде атрибутов.

ВВ>Но сама идея хорошая, иногда возникает потребность в чем-то таком.


+1

ВВ>Говоря другими словами, pure должен вызывать только методы, явно помеченные как pure — в противном случае он уже не pure?


Да. Но лучше эти вопросы задавать автору макры.

ВВ>А как быть при вызове методов из сторонних библиотек или того же дотнета? Метод становится автоматически не pure?


Помечать их, если есть уверенность, что они не делают побочных эффектов.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 16:54
Оценка: 6 (1)
Здравствуйте, alvas, Вы писали:

A>Спасибо. Ты описал что он делает не так, но не написал что это такое? Можно вкратце?


А разве не ясно из описания автора?

Это макра которая позволяет пометить метод или часть кода как не создающая побочных эффектов. Смысл ее в том, что макрос проверяет не сделал ли программист чего-то что может привести к появлению побочных эффектов (например, не изменяет ли он полей некоторых классов).

Такие функции можно гарантированно вызывать параллельно в многопоточном окружении.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 16:55
Оценка:
Здравствуйте, alvas, Вы писали:

A>Попроси чтобы и он высказал свое.

A>Если сможет — значит понимает что делает. Можно будет дальше обсуждать, чтобы прийти к взаимопониманию

Да пусть делает, что получается. Опыт никогда не лишний.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Pure keyword
От: alvas  
Дата: 13.03.10 16:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А разве не ясно из описания автора?


Похоже мой английский хуже твоего.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[7]: Pure keyword
От: FR  
Дата: 13.03.10 17:03
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Говоря другими словами, pure должен вызывать только методы, явно помеченные как pure — в противном случае он уже не pure? А как быть при вызове методов из сторонних библиотек или того же дотнета? Метод становится автоматически не pure?


Библиотеки тоже должны быть помечены. Это как const в C++ имеет вирусную природу
В D pure уже довольно давно ввели, тут http://www.digitalmars.com/d/2.0/accu-functional.pdf описана и мотивация и как все выглядит и работает.
Re[5]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 17:24
Оценка:
Здравствуйте, alvas, Вы писали:

VD>>А разве не ясно из описания автора?


A>Похоже мой английский хуже твоего.


От это вряд ли.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Pure keyword
От: Воронков Василий Россия  
Дата: 13.03.10 17:25
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Относятся.

VD>Ну, и в чем тогда разница?
ВВ>>Спор действительно ни о чем. Тебе нравится добавление ключевого слова?
VD>Да мне плевать. Тем более, что ключевые слова можно использовать и в виде атрибутов.

Дело действительно не в атрибуте, а скорее в некоей инфраструктуре для создания собственных компайл-тайм контрактов, более высокоуровневой по отношению к макросам.
Завтра захочется кому-нибудь прикрутить модификатор nothrow — тоже на мой взгляд штука полезная, — и начнут лепить очередной синтаксический макрос А ведь реализация очень схожа.
Такие вещи должны быть... единообразно как-то представлены быть что ли.
Re[8]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 17:25
Оценка:
Здравствуйте, FR, Вы писали:

FR>Библиотеки тоже должны быть помечены. Это как const в C++ имеет вирусную природу

FR>В D pure уже довольно давно ввели, тут http://www.digitalmars.com/d/2.0/accu-functional.pdf описана и мотивация и как все выглядит и работает.

В D многое, на мой взгляд, через жопу сделано. Но pure там сделан, пожалуй, лучше чем в любых аналогах.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 17:27
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Дело действительно не в атрибуте, а скорее в некоей инфраструктуре для создания собственных компайл-тайм контрактов, более высокоуровневой по отношению к макросам.

ВВ>Завтра захочется кому-нибудь прикрутить модификатор nothrow — тоже на мой взгляд штука полезная, — и начнут лепить очередной синтаксический макрос А ведь реализация очень схожа.
ВВ>Такие вещи должны быть... единообразно как-то представлены быть что ли.

Согласен. По уму конечно нужно было еще одину стадию макросов добавить или событие которое вызывалось бы в момент когда все типы выведены.

Событие могу хоть сейчас добавить.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Pure keyword
От: Аноним  
Дата: 13.03.10 21:11
Оценка:
Такой вопрос. Является ли эта функция pure?

def isItPure() { System.DateTime.Now }
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.