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.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


Это уже без разницы. Он налепил ключевых слов. Я говорю о реализации. Реализация там весьма непродуманная.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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 ничего подобного нет, проверить не могу.


Я думаю, что и в релизе не будет. Кому захочется может использовать этот макрос самостоятельно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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?


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

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


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

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

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

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

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

Да пусть делает, что получается. Опыт никогда не лишний.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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>Похоже мой английский хуже твоего.


От это вряд ли.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
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 там сделан, пожалуй, лучше чем в любых аналогах.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Pure keyword
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 17:27
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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

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

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

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

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