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

DIzer

  • Гость
Re:Функции против процедур
« Ответ #105 : Март 01, 2011, 04:22:04 pm »
Кстати, господа для меня лично польза от конкретно этого обсуждения есть - я ТОЧНО понял, что одно только стремление к чистоте НИКОГДА не заставит меня подсесть на Хаскель  :)
А что заставит? :)

Лично меня заставил синтаксис... ;D
Тем более.  :) 

Сергей Прохоренко

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Функции против процедур
« Ответ #106 : Март 01, 2011, 04:35:43 pm »
Мне кажется, что поставленная задача тут чрезмерно усложнена расширительным толкованием понятия "Побочный эффект". Если сузить толкование до обычного, то получение функций и процедур без побочных эффектов станет вполне посильной задачей. Можно будет обойтись (за редкими исключениями) без функций и процедур с побочными эффектами. Правда, для этого потребуются серьезные решения по языку, как это предложено в PureBuilder:
  • полный запрет глобальных и статических переменных,
  • модификация механизма исключений в функциональном стиле,
  • отказ от классического ООП в пользу ООП, реализованного в Обероне и в Обероне-07.
« Последнее редактирование: Март 01, 2011, 04:41:32 pm от Сергей Прохоренко »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Функции против процедур
« Ответ #107 : Март 01, 2011, 04:46:06 pm »
Под классическим ООП подразумевается то, что в КП и Обероне-2?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Функции против процедур
« Ответ #108 : Март 01, 2011, 04:56:51 pm »
Мне кажется, что поставленная задача тут чрезмерно усложнена расширительным толкованием понятия "Побочный эффект". Если сузить толкование до обычного, то получение функций и процедур без побочных эффектов станет вполне посильной задачей. Можно будет обойтись (за редкими исключениями) без функций и процедур с побочными эффектами. Правда, для этого потребуются серьезные решения по языку, как это предложено в PureBuilder:
  • полный запрет глобальных и статических переменных,
  • модификация механизма исключений в функциональном стиле,
  • отказ от классического ООП в пользу ООП, реализованного в Обероне и в Обероне-07.
1. Ну я думаю что все из участвующих в обсужденни знакомы с различными формальными определениями его... лично я участвовал в обсуждении что бы прояснить его сущность...(важнейшая мотивация.)
2. А чем сущность "классического" ООП отличается от Обероновых - в моем представлении это набор концепций, а в вашем?
« Последнее редактирование: Март 01, 2011, 04:58:24 pm от DIzer »

DIzer

  • Гость
Re:Функции против процедур
« Ответ #109 : Март 01, 2011, 05:02:47 pm »
И потом - полный запрет.... для некоторых задач они естественны... А что естественно то не безобразно, как известно

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Функции против процедур
« Ответ #110 : Март 01, 2011, 06:28:41 pm »
Так что давайте таки сформулируем модельную задачу затрагивающую обсуждаемую тему, как я уже предлагал, и попробуем её решить различными способами, возможно на разных языках и псевдокоде. Думаю будет полезно.

2 vlad: ты мне обещал примерчиков :-) Так что милости прошу, так сказать :-)
И когда вы только работаете?  :D

Сергей Прохоренко

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Функции против процедур
« Ответ #111 : Март 01, 2011, 07:10:04 pm »
Под классическим ООП подразумевается то, что в КП и Обероне-2?

Да. Скопировано из мейнстрима.

Сергей Прохоренко

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Функции против процедур
« Ответ #112 : Март 01, 2011, 07:21:35 pm »
И потом - полный запрет.... для некоторых задач они естественны... А что естественно то не безобразно, как известно

Насколько понимаю, речь идет о глобальных переменных.

Думаю, что в программировании вообще нет ничего естественного. А естественность глобальных переменных и подавно - полная ерунда. В программировании всё искусственное. Когда разработчики недостаточно искусны, появляются такие примитивные и убогие вещи, как глобальные переменные, мудреные правила видимости и прочий винигрет... совершенно безобразный! Глобальные переменные - это отображение хаоса модели задачи в хаос программного кода.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Функции против процедур
« Ответ #113 : Март 01, 2011, 08:11:00 pm »
Что подразумеваем под глобальными переменными?
Собственно хотелось бы увидеть, как без глобальных переменных получится, ну, скажем написать Hello World.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Сергей Прохоренко

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Функции против процедур
« Ответ #114 : Март 01, 2011, 08:29:41 pm »
А чем сущность "классического" ООП отличается от Обероновых - в моем представлении это набор концепций, а в вашем?

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

Классический ООП основан на классах и интерфейсах, содержащих методы (ну и поля). Наиболее яркие примеры: Дельфи, Си++, Ява. Обероновский ООП (кроме Оберона-2 и КП) - на процедурных типах, при том, что процедуры не привязаны к структурным типам данных (записям, объектам, классам, интерфейсам и т.п.). Обероновский ООП имеет не только достоинства, но и недостатки. Но имеет смысл подумать об устранении недостатков, а не о заимствовании классического ООП.

Сергей Прохоренко

  • Newbie
  • *
  • Сообщений: 16
    • Просмотр профиля
Re:Функции против процедур
« Ответ #115 : Март 01, 2011, 08:35:19 pm »
Что подразумеваем под глобальными переменными?

Переменная, объявленная снаружи процедуры/функции, и доступная как снаружи, так и внутри нее. См. Википедию.

Собственно хотелось бы увидеть, как без глобальных переменных получится, ну, скажем написать Hello World.

А зачем там вообще какие-то переменные?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:Функции против процедур
« Ответ #116 : Март 01, 2011, 08:45:16 pm »
А зачем там вообще какие-то переменные?
Затем, что hello world что-то таки печатает куда-то, сам этот процесс таки изменяет состояние чего-то, вот это самое что-то это и есть глобальная переменная.

Вот буквально сегодня смотрел исходники функции printf для микроконтроллера который у нас используется -- там без глобальной переменной не обошлось. Причем по фиксированному адресу. :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re:Функции против процедур
« Ответ #117 : Март 02, 2011, 04:26:40 am »


Думаю, что в программировании вообще нет ничего естественного. А естественность глобальных переменных и подавно - полная ерунда. В программировании всё искусственное. Когда разработчики недостаточно искусны, появляются такие примитивные и убогие вещи, как глобальные переменные, мудреные правила видимости и прочий винигрет... совершенно безобразный! Глобальные переменные - это отображение хаоса модели задачи в хаос программного кода.
Разумеется да,  если смотреть на нее как на набор инструкций для исполнителя. Точно также  , как искуственны постулаты Евклида. Также с помощью последних  МОЖНО описывать мир, но так-же с помощью них можно делать построения которым, едва ли найдутся интересные (на практике) системы. В этом и порок такого однобокого взгляда.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:Функции против процедур
« Ответ #118 : Март 02, 2011, 06:20:50 am »
Когда разработчики недостаточно искусны, появляются такие примитивные и убогие вещи, как глобальные переменные, мудреные правила видимости и прочий винигрет... совершенно безобразный!
Ваши слова вызывают у меня оторопь. Зачем же так ненавидеть всё, что не вписывается в Ваше представление о семантическом редакторе?
Ничего личного.

DIzer

  • Гость
Re:Функции против процедур
« Ответ #119 : Март 02, 2011, 07:09:47 am »
А зачем там вообще какие-то переменные?
Затем, что hello world что-то таки печатает куда-то, сам этот процесс таки изменяет состояние чего-то, вот это самое что-то это и есть глобальная переменная.

Вот буквально сегодня смотрел исходники функции printf для микроконтроллера который у нас используется -- там без глобальной переменной не обошлось. Причем по фиксированному адресу. :-)
Отсюда , небольшой шаг, до понимания того, что чистый и грязный зависит от модели системы. Применительно к вашему предложению о создании анализатора, это дает нам осознание того, что нет универсального способа остановки (анализатора), и если нужда заставит делать такую тулзовину... то речь будет идти о свойствах КОНКРЕТНОЙ системы- вывод нех маятся дурью  ;) - вполне конкретен, и без всякого прототипирования. По этому и ВАЖНО (для специалистов широкого профиля и управленцев) умение выделять сущности  из определений и уметь работать на абстрактном уровне (в противном случае всю группу и проект можно в такое дерьмо опустить, что банка икры баклажанной будет казаться манной небесной).
« Последнее редактирование: Март 02, 2011, 07:15:13 am от DIzer »