Автор Тема: Функции против процедур  (Прочитано 85631 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Функции против процедур
« Ответ #45 : Февраль 28, 2011, 04:35:18 pm »

Еще раз хочу заметить: по моему убеждению мы не можем пометить X::do как pure, потому что мы не знаем заранее - сможет ли ее наследник реализовать как pure.

А что нам мешает ТРЕБОВАТЬ  от наследника PURE реализации?

Ну вот смотрите, я определил интерфейс X с "pure do()" и написал классную pure функцию:
void f(X &x) pure
{
    x.do(); // pure
}

Теперь я вас прошу реализовать мне x::do. Как вы будете ее реализовывать, если вам для этого нужно прочитать файл? Вы придете ко мне и скажете, чтобы я убрал pure из f и из X::do? А если я работаю в другой конторе, а вы лишь используете мой классный расширяемый фрэймворк?

DIzer

  • Гость
Re:Функции против процедур
« Ответ #46 : Февраль 28, 2011, 04:44:42 pm »

Еще раз хочу заметить: по моему убеждению мы не можем пометить X::do как pure, потому что мы не знаем заранее - сможет ли ее наследник реализовать как pure.

А что нам мешает ТРЕБОВАТЬ  от наследника PURE реализации?

Ну вот смотрите, я определил интерфейс X с "pure do()" и написал классную pure функцию:
void f(X &x) pure
{
    x.do(); // pure
}

Теперь я вас прошу реализовать мне x::do. Как вы будете ее реализовывать, если вам для этого нужно прочитать файл? Вы придете ко мне и скажете, чтобы я убрал pure из f и из X::do? А если я работаю в другой конторе, а вы лишь используете мой классный расширяемый фрэймворк?
Значит ваш фреймворк не является классным - вы на этапе проектирования  его заложили чистоту в действие по своей сути грязное... И потом - Vlad- я не знаю ни одного идеального проектного решения ни языка на все случаи жизни, и у меня нет оснований считать что они существуют. А у Вас?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Функции против процедур
« Ответ #47 : Февраль 28, 2011, 04:48:29 pm »
Значит ваш фреймворк не является классным

Ну вот я об этом и говорил. В таком виде - бесполезная штука. Не могу я помечать в интерфейсе функцию pure без риска получить плохую расширяемость. Соответственно, не могу использовать абстрактные аргументы в pure-функциях. Соответственно, использование pure функций ограничивается локальными штуками типа вычисления факториала - неюзабельно :)
« Последнее редактирование: Февраль 28, 2011, 04:51:02 pm от vlad »

DIzer

  • Гость
Re:Функции против процедур
« Ответ #48 : Февраль 28, 2011, 04:53:16 pm »
Ну вот я об этом и говорил. В таком виде - бесполезная штука. Не могу я помечать в интерфейсе функцию pure без риска получить плохую расширяемость. Соответственно, не могу использовать абстрактные аргументы в pure-функциях. Соответственно, использование pure функций ограничивается локальными штуками типа вычисления факториала - неюзабельно :)
А что вы хотите ? На одно место сесть и конфетку съесть - и так все время ? - не реализуемо (ИМХО)   ;)

DIzer

  • Гость
Re:Функции против процедур
« Ответ #49 : Февраль 28, 2011, 04:57:24 pm »
Но поднимается интересный вопрос - если система чистоты в хаскеле устроена подобным образом (?) то и ограничения у него теже.... Что скажут по этому поводу Хаскеловоды?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Функции против процедур
« Ответ #50 : Февраль 28, 2011, 05:00:54 pm »
А Хаскель не ООП-язык, поэтому у него подобных проблем нет :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Функции против процедур
« Ответ #51 : Февраль 28, 2011, 05:02:13 pm »
А Хаскель не ООП-язык, поэтому у него подобных проблем нет :-)
А как же сложные задачи и фрамеворки  ;) ?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Функции против процедур
« Ответ #52 : Февраль 28, 2011, 05:03:17 pm »
Ну вот я об этом и говорил. В таком виде - бесполезная штука. Не могу я помечать в интерфейсе функцию pure без риска получить плохую расширяемость. Соответственно, не могу использовать абстрактные аргументы в pure-функциях. Соответственно, использование pure функций ограничивается локальными штуками типа вычисления факториала - неюзабельно :)
А что вы хотите ? На одно место сесть и конфетку съесть - и так все время ? - не реализуемо (ИМХО)   ;)

Конкретно чего я хочу от pure-функций (или аналогов): спокойно запускать их параллельно без риска получить известные проблемы. Спокойно - это значит, что компилятор все проконтролирует на этапе компиляции.
Все остальные выстрелы в ногу - мне не очень интересны, потому что я уже научился их избегать даже в С++ :) А вот безопасная многопоточность - покоя не дает.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Функции против процедур
« Ответ #53 : Февраль 28, 2011, 05:04:09 pm »
А кстати, давайте уже уйдем (на время) от абстрактных foo да boo, и перейдем к конкретным примерам. Скажем попробуем написать (на уровне спецификаций) какой-нибудь мегафреймворк. Так сказать, будем плясать от практики. Выбирайте предметную область :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Функции против процедур
« Ответ #54 : Февраль 28, 2011, 05:06:41 pm »
А Хаскель не ООП-язык, поэтому у него подобных проблем нет :-)
А как же сложные задачи и фрамеворки  ;) ?
А зачем для них ООП? :-) ООП провалился же ;-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Функции против процедур
« Ответ #55 : Февраль 28, 2011, 05:10:09 pm »
Ну вот я об этом и говорил. В таком виде - бесполезная штука. Не могу я помечать в интерфейсе функцию pure без риска получить плохую расширяемость. Соответственно, не могу использовать абстрактные аргументы в pure-функциях. Соответственно, использование pure функций ограничивается локальными штуками типа вычисления факториала - неюзабельно :)
Если серьезно по этому поводу - Положим вы проектируете корабль , поясните  зачем вам предусматривать трансформацию его в поезд метро? (на случай войны?  ;))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:Функции против процедур
« Ответ #56 : Февраль 28, 2011, 05:38:16 pm »
Ну вот я об этом и говорил. В таком виде - бесполезная штука. Не могу я помечать в интерфейсе функцию pure без риска получить плохую расширяемость. Соответственно, не могу использовать абстрактные аргументы в pure-функциях. Соответственно, использование pure функций ограничивается локальными штуками типа вычисления факториала - неюзабельно :)
Если серьезно по этому поводу - Положим вы проектируете корабль , поясните  зачем вам предусматривать трансформацию его в поезд метро? (на случай войны?  ;))

Аналогия неточна. В случае pure вы скорее декларируете использование только определенного материала. И если в момент декларации корабли строили только из дерева и это был очень даже хороший и очевидный материал, то к 21 веку появились более другие и неочевидные (в 16 веке) альтернативы. Вы конечно можете продолжать строить яхты с помощью такого фрэймворка, но вот с авианосцем - будут проблемы.

DIzer

  • Гость
Re:Функции против процедур
« Ответ #57 : Февраль 28, 2011, 05:39:34 pm »
Посетила мысль в догонку - а если мы по умолчанию сделаем все PURE , а помечать будем  IMPURЕ... что у нас получится игого ОберХаскелль ?  ;)

DIzer

  • Гость
Re:Функции против процедур
« Ответ #58 : Февраль 28, 2011, 05:42:19 pm »


Аналогия неточна. В случае pure вы скорее декларируете использование только определенного материала. И если в момент декларации корабли строили только из дерева и это был очень даже хороший и очевидный материал, то к 21 веку появились более другие и неочевидные (в 16 веке) альтернативы. Вы конечно можете продолжать строить яхты с помощью такого фрэймворка, но вот с авианосцем - будут проблемы.
Не будьте занудой  :) Вы же поняли меня... или хотит-те что бы я занудно на 2 страницы подробно пояснил что я имею ввиду? Если это - то не дождетесь!  ;)

DIzer

  • Гость
Re:Функции против процедур
« Ответ #59 : Февраль 28, 2011, 07:27:30 pm »
А кстати, давайте уже уйдем (на время) от абстрактных foo да boo, и перейдем к конкретным примерам. Скажем попробуем написать (на уровне спецификаций) какой-нибудь мегафреймворк. Так сказать, будем плясать от практики. Выбирайте предметную область :-)
Лучше язык -  на закуску осталась рантайм безопасное создание переменных (для пользовательских типов)- для этого см. предложения берсеркера... если не заморачиваться синтаксисом ь то останутся  деструкторы, и обработчик ошибок при создании экземпляра переменной (конструкторы вроде есть)- ну почти шарпей с паскалеподобным синтаксисом  ;) Ой ей ей это почти богохульство... спасает что мы не  "Corn"ые - а то уже бы пришел дядька культен - жандарм  и оприходовал бы меня в отстойник в пять двадцать пятый раз...  :)