Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Geniepro

Страницы: 1 ... 127 128 [129] 130 131
1921
Речь о том - нужно ли нам порождать чистые пользовательские типы - формально -добавлять метку pure в определение типа...  ;)
Пока мне кажется, что без этого не обойтись.

Тут вообще надо сначала решить -- а нужно ли разделять подпрограммы на функционально чистые и императивно грязные.
Такое разделение даёт определённые удобства и налагает определённые неудобства.

Так же как оператор GOTO -- можно всё сделать с его помощью, но всё же на каких-то задачах удобнее и безопаснее пользоваться операторами IF, WHILE, FOREACH и т.д.

1922
(или вы хотите свести общение на форуме, к обмену цитатами от балды ?)  :(
Цитаты от балды???

Вы упомянули подход D (хотя и не уточнили, как Вы его понимаете), спросили "причём здесь типы?" -- вот я и показал, что подход D опирается на типы.

1923
Господа .... я говор про другое - в предложенном сейчас D методе - речь идет не о ТИПАХ а о ПЕРЕМЕННЫХ - это РАЗНЫЕ сущности , разве нет?

"Место для D", Андрей Александреску:
Цитировать
Почему неизменяемые данные это так здорово? Совместное использование неизменяемых
данных потоками не требует синхронизации, а отсутствие синхронизации - самая быстрая
синхронизация. Хитрость в том, чтобы быть уверенным: «только для чтения» и впрямь озна-
чает «только для чтения», а иначе нельзя дать никаких гарантий. Чтобы поддержать этот
важный аспект параллельного программирования, D предоставляет беспрецедентную под-
держку для смешивания функционального и императивного программирования. Данные со
спецификатором immutable предоставляют сильные статические гарантии — правильно ти-
пизированная программа не может изменять immutable данные. Более того, неизменяемость
транзитивна, и при работе на неизменяемой территории все ссылки тоже будут указывать
на неизменяемые данные. (Почему? Если бы это было не так, то при совместном использо-
вании потоками данных, которые вы считали неизменяемыми, вы непреднамеренно делаете
общими и изменяемые данные, но в этом случае мы возвращаемся к сложным правилам
которых хотели избежать). Целые подграфы связанных объектов могут быть легко «окра-
шены» неизменяемостью. Система типов знает где они и позволяет свободно разделять их
между потоками, более агрессивно оптимизируя доступ к ним и в однопоточном коде.

1924
И так господа Хаскеловоды -обьяснитесь - причем тут проверка типов? - на попытку разжевывания вы потратили страницу, или в хаскеле под чистотой понимается нечто другое?
Любые действия, имеющие побочные эффекты, помечаются как имеющие тип IO, то есть ввод/вывод.
Если тип функции не помечен как IO, функция заведомо чистая. Типы функций контролируются системой типов. Если при проверке типа функции оказывается, что где-то внутри неё используется IO, то и вся функция помечается как имеющая тип IO.

1925
В классическам ООП поля объектов вроде вообще нельзя изменять напрямую, только через методы.
ООП в стиле Эрланга...

1926
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 08:38:11 pm »
Насчёт DLL вопрос непонятен. У DLL есть определённый формат описания функций, содержащихся в ней, и там нет упоминаний чисты эти функции или нет, как и вообще описания типов этих функций.
Так что программа на этом гипотетическом языке по-любому должна будет воспользоваться дополнительным интерфейсом, написанным вручную для этой DLL. И вот там уже программисту, описывающему этот интерфейс, нужно думать, как описать функции в этой DLL -- как чистые или как грязные. И если он пометит как чистую функцию, грязную на самом деле, то он сам себе злобный буратина.

Если же понадобится делать что-то типа DLL, но специально для этого языка, то там всё это должно быть прописано --и тип, и чистота. Ну а то, что эта библиотека окажется несовместимой с Win32 DLL, так ни дотнетчики, ни оберонщики этим не заморачиваются...

1927
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 08:32:50 pm »
Кстати, здесь встаёт интересный вопрос, а разрешить ли методам-функциям (чистым) изменение полей своего объекта?
Подобные действия со стороны какой-либо функции автоматически означают, что эта функция грязная.

1928
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 10:39:42 am »
Остаётся только добавить, что нет каких-то принципиальных ограничений на размеры систем, которые можно создать, используя такую систему типов.
Где-то может быть больше кода в области IO, где-то меньше. Это уже зависит от задачи и программистов-архитекторов...

1929
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 10:04:35 am »
Ну, собственно, в Хаскелле контроль за побочными эффектами возложен именно на систему типов, с минимальной поддержкой со стороны компилятора: компилятор позволяет создать грязное значение, но не позволяет вытащить из него данные в чистый мир (что в IO попало, то там и пропало).
Ну а для тех, кто уж совсем не может без того, что бы не выстрелить себе в ногу из верёвки, всё-таки предусмотрели функцию unsafePerformIO, нарушающую эту защиту.

1930
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 09:22:22 am »
Есть ли примеры создания на хаскеле очень сложных систем (БД, ОС) - без сторонних костылей (модулей написанных ДЛЯ ЭТОЙ задачи но на сторонних языках)? Пример,  Вирт показал, что с помощью Оберона МОЖНО построить ОС.
Очень сложные системы не делаются только на одном языке.
Виртовскую систему вряд ли можно назвать очень сложной системой, и то без вставок машинного кода даже Вирт в Обероне не обошёлся. Это не костыль разве?

На Хаскелле тоже делали операционки, House, например. http://en.wikipedia.org/wiki/House_(operating_system)
http://ogi.altocumulus.org/~hallgren/ICFP2005/
Исходников не видел, так что не могу сказать, что там кроме Хаскелла использовалось.

Был ещё пример, но щас так не попадается на глаза. Там микроядро ОС было написано на Хаскелле, но бут-загрузчик на ассемблере.

1931
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 08:41:45 am »
2. Пусть Вы вводите это разделение просто для того, чтобы разделить "Чистые" и "Грязные" действия- насколько предложенная Вами форма адекватна цели... и вообще насколько это реализуемо на практике в компилляторах (т.е. проверка чистоты на низком уровне для проекта произвольной сложности). всегда ли она возможна?
Однако трансляторы Хаскелла показывают, что это вполне возможно и реализуемо.

1932
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 07:31:06 am »
В этом плане у Хаскелла подход прост и прямолинеен:

Нужны функции, имеющие доступ к вводу/выводу и прочим прелестям побочных эффектов? Да нет проблем!
Но! Такая функция должна быть помечена как грязная, то есть имеющая побочные эффекты, и использовать её можно только в таких же грязных функциях. С проверкой компилятором, естественно.

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

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

1933
Общий раздел / Re:Функции против процедур
« : Февраль 28, 2011, 07:15:27 am »
Писать в лог всё-же лучше в том блоке, в котором содержится вызов процедуры. IMHO.
+1

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

Если нужно проверить работу функции -- так юнит-тесты для этого придуманы...

1934
Общий раздел / Re:Оберон в образовании.
« : Февраль 27, 2011, 10:33:28 am »
Например, о недостаточной зрелости (быть может, не профессиональной, а даже психологически-мировоззренческой иногда)?
Ох, ну давайте не будем впутывать сюда богословие-мировозрение. От этого только вред.
Конкретно в Вашем случае вред от этого в том, что Вы стали неправильно относиться к термину "монада" -- видимо, монадология Лейбница Вам мерещится...

1935
Общий раздел / Re:Оберон в образовании.
« : Февраль 27, 2011, 09:38:54 am »
2) Не акцентирует внимание на синтаксисе. Вообще самое страшное что может случиться с (будующим)программистом -- пристрастие к какому-либо типу синтаксиса. Язык по синтаксису оценивать вообще нельзя. Синтаксис вторичен. Полно народу видел, которые вроде бы и не глупые люди, но воспринимают ровно один какой-то синтаксис, а все языки не с таким синтаксисом считают неполноценными/ущербными. Чаще всего народ залипает либо на паскалеподобном синтаксисе, либо си-подобном.
Ну не знаю, не знаю...

Имхо, синтаксис всё же имеет значение. В конце концов, на языке с красивым лаконичным синтаксисом просто приятнее работать.

И опять же, напомню наблюдения Криса Окасаки (гуру ФП) -- при обучении программированию значимые отступы (без этих операторных скобок типа end if) очень помогают студентам не путаться в этих end и }...

Страницы: 1 ... 127 128 [129] 130 131