Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 13.02.08 16:38
Оценка: +2
Здравствуйте, FallenGameR, Вы писали:

FGR>Про то что nemerle заморожен узнал только что.

FGR>Но вопрос был о другом — вообще о перспективе функциональных языков на .net

Открою маленькую тайну: в чисто функциональных языках первоклассная сущность функций сохраняется вплоть до рантайма: указатели на данные и на код вычисляющий эти данные эквивалентны и вообще неразличимы Это реализуется, например, G-машиной (STG в случае компилятора GHC языка Haskell). Поэтому на дотнете возможна только эмуляция такой "глубокой" чистой функциональности — той или иной степени успешности. В свете этого я думаю, что C# — наиболее перспективный "функциональный" (на синтаксическом уровне) язык

ЗЫ: Я совершенно не имею желания спорить о том, что круче. С большим уважением отношусь к Nemerle и F# и их замечательным командам.

Пусть расцветают сто цветов.

(c) Председатель Мао



03.03.08 00:45: Ветка выделена из темы Каково будущее Nemerle / F# ?
Автор: FallenGameR
Дата: 13.02.08
— AndrewVK
Re: Функция как первоклассная сущность для рантайма
От: EvilChild Ниоткуда  
Дата: 13.02.08 17:42
Оценка:
Здравствуйте, deniok, Вы писали:

D>Открою маленькую тайну: в чисто функциональных языках первоклассная сущность функций сохраняется вплоть до рантайма: указатели на данные и на код вычисляющий эти данные эквивалентны и вообще неразличимы

А что это меняет с точки зрения пользователя языка?
И вообще какие есть полезные следствия у этого факта?
now playing: Fergie — Senderon
Re[2]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 13.02.08 17:56
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, deniok, Вы писали:


D>>Открою маленькую тайну: в чисто функциональных языках первоклассная сущность функций сохраняется вплоть до рантайма: указатели на данные и на код вычисляющий эти данные эквивалентны и вообще неразличимы

EC>А что это меняет с точки зрения пользователя языка?
EC>И вообще какие есть полезные следствия у этого факта?

Это даёт пользователю языка понимание того, как исполняется его программа. То что в C массив плотно лежит в памяти, в C++ вызов виртуальных функций осуществляется косвенно, через VTBL, а шаблоны инстанциируются во время компиляции, а в дотнете и джаве динамическая память освобождается с помощью GC и нет детерминированного деструктора — все эти знания помогают писать эффективные программы и расшивать узкие места. Так же и в Хаскелле — понимание того, какие thunk'и сконструируются в рантайме при исполнении кода, позволяет не нарываться на избыточные space leaks.
Re[3]: Функция как первоклассная сущность для рантайма
От: EvilChild Ниоткуда  
Дата: 13.02.08 18:44
Оценка:
Здравствуйте, deniok, Вы писали:

D>Это даёт пользователю языка понимание того, как исполняется его программа. То что в C массив плотно лежит в памяти, в C++ вызов виртуальных функций осуществляется косвенно, через VTBL, а шаблоны инстанциируются во время компиляции, а в дотнете и джаве динамическая память освобождается с помощью GC и нет детерминированного деструктора — все эти знания помогают писать эффективные программы и расшивать узкие места. Так же и в Хаскелле — понимание того, какие thunk'и сконструируются в рантайме при исполнении кода, позволяет не нарываться на избыточные space leaks.

Это на семантику влияет или нет? Насколько я понимаю то, как создаются санки в Хаскеле зависит от реализации.
Вот левая и правая свёртки списка по разному используют память. Это артефакт реализации и от семантики никак не зависит?
now playing: Robert Babicz — Look
Re[4]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 13.02.08 19:15
Оценка: 2 (1)
Здравствуйте, EvilChild, Вы писали:

EC>Это на семантику влияет или нет? Насколько я понимаю то, как создаются санки в Хаскеле зависит от реализации.


Механизм вызова виртуальных функций в C++ тоже зависит от реализации и не документирован в стандарте Но все применяют единственную реализацию (естественную для стандартной архитектуры рантайма).

EC>Вот левая и правая свёртки списка по разному используют память. Это артефакт реализации и от семантики никак не зависит?


Это прямо следует из нормального порядка редукций и ленивости.

Если свёртываемая функция строга по своему второму аргументу, то для foldr для нее требуется линейный по размеру списка стек. В этом случае эффективен foldl' (со строгостью внутри). Если функция не строга по второму аргументу, то стоит использовать foldr для бесконечных списков и/или обработки входных списков поточным образом. Все прелести ленивости при этом сохраняются.

здесь приличное описание

А foldl (без штриха) — вообще ошибка природы
Re[5]: Функция как первоклассная сущность для рантайма
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.02.08 19:41
Оценка:
Здравствуйте, deniok, Вы писали:

D>А foldl (без штриха) — вообще ошибка природы


Ты имеешь в виду foldl для ленивого языка?
Re[6]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 13.02.08 20:00
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Ты имеешь в виду foldl для ленивого языка?


Для языка с поддержкой пользовательской ленивости. Для тотально строгого языка разницы между foldl и fold' нет. Идея в том, что отсутствие строгости применения левой свертке не несет никаких бенефитов:
foldl' f a []     = a 
foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs

Ну уберёшь ты отсюда seq — вместо уже возможного вычисления значения f a x повиснет thunk. Только до него не добраться, он спрятан за следующим вызовом foldl, и будет спрятан, пока ты весь список не разберёшь.
Re[7]: foldl' а не fold' конечно
От: deniok Россия  
Дата: 13.02.08 20:02
Оценка:
Здравствуйте, deniok, Вы писали:

D>Для языка с поддержкой пользовательской ленивости. Для тотально строгого языка разницы между foldl и fold' нет.


foldl' а не fold' конечно
Re[7]: Функция как первоклассная сущность для рантайма
От: Курилка Россия http://kirya.narod.ru/
Дата: 13.02.08 20:05
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Курилка, Вы писали:


К>>Ты имеешь в виду foldl для ленивого языка?


D>Для языка с поддержкой пользовательской ленивости. Для тотально строгого языка разницы между foldl и fold' нет.

Ну об этом и был вопрос, просто слишком обобщённо про ошибки не стоит говорить
Re: Функция как первоклассная сущность для рантайма
От: chukichuki  
Дата: 14.02.08 10:29
Оценка: +3
Здравствуйте, deniok, Вы писали:

D>Открою маленькую тайну: в чисто функциональных языках первоклассная сущность функций сохраняется вплоть до рантайма: указатели на данные и на код вычисляющий эти данные эквивалентны и вообще неразличимы Это реализуется, например, G-машиной (STG в случае компилятора GHC языка Haskell). Поэтому на дотнете возможна только эмуляция такой "глубокой" чистой функциональности — той или иной степени успешности.


Функциональность глубокая и чистая. Прямо романтический образ какой-то А языки с энергичной семантикой функциональными, глубокими и чистыми уже не считаются ? Что касается эмуляции, то чем net как система команд принципиально отличается от нативного x86 c этой точки зрения ? Если нечем, то получается что глубокая и чистая функциональность и на x86 недостижимый идеал. И вообще нет в жизни шасья, одна только эмуляция
Re[2]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 14.02.08 10:46
Оценка: +1 -1
Здравствуйте, chukichuki, Вы писали:

C>Здравствуйте, deniok, Вы писали:


D>>Открою маленькую тайну: в чисто функциональных языках первоклассная сущность функций сохраняется вплоть до рантайма: указатели на данные и на код вычисляющий эти данные эквивалентны и вообще неразличимы Это реализуется, например, G-машиной (STG в случае компилятора GHC языка Haskell). Поэтому на дотнете возможна только эмуляция такой "глубокой" чистой функциональности — той или иной степени успешности.


C>Функциональность глубокая и чистая. Прямо романтический образ какой-то А языки с энергичной семантикой функциональными, глубокими и чистыми уже не считаются ? Что касается эмуляции, то чем net как система команд принципиально отличается от нативного x86 c этой точки зрения ? Если нечем, то получается что глубокая и чистая функциональность и на x86 недостижимый идеал. И вообще нет в жизни шасья, одна только эмуляция


Я не очень хорошо знаю дотнет, но полагаю уровнем. Например, тот memory management, который в CLR имеется, не заточен под чистые функциональные языки.
Re[7]: Функция как первоклассная сущность для рантайма
От: Gaperton http://gaperton.livejournal.com
Дата: 15.02.08 08:34
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Курилка, Вы писали:


К>>Ты имеешь в виду foldl для ленивого языка?


D>Для языка с поддержкой пользовательской ленивости. Для тотально строгого языка разницы между foldl и fold' нет. Идея в том, что отсутствие строгости применения левой свертке не несет никаких бенефитов:

D>
D>foldl' f a []     = a 
D>foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs
D>

D>Ну уберёшь ты отсюда seq — вместо уже возможного вычисления значения f a x повиснет thunk. Только до него не добраться, он спрятан за следующим вызовом foldl, и будет спрятан, пока ты весь список не разберёшь.

Прикольные все-таки релятивистские эффекты возникают в ленивых языках — не перстаю удивляться . Главное ведь — на ровном месте практически .
Re[8]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 15.02.08 08:51
Оценка:
Здравствуйте, Gaperton, Вы писали:

G>Прикольные все-таки релятивистские эффекты возникают в ленивых языках — не перстаю удивляться . Главное ведь — на ровном месте практически .


Хорошо не квантово-механические, а то были бы thunk'и, которые вычислены и не вычислены одновременно

На самом деле в компиляторе есть анализатор строгости, который диктует вычислять то, что в любых контекстах должно быть вычислено. Но ему далеко не всё по зубам.
Re[9]: Функция как первоклассная сущность для рантайма
От: Курилка Россия http://kirya.narod.ru/
Дата: 15.02.08 08:58
Оценка:
Здравствуйте, deniok, Вы писали:

D>Здравствуйте, Gaperton, Вы писали:


G>>Прикольные все-таки релятивистские эффекты возникают в ленивых языках — не перстаю удивляться . Главное ведь — на ровном месте практически .


D>Хорошо не квантово-механические, а то были бы thunk'и, которые вычислены и не вычислены одновременно


Дак может доживём до квантовых компьютеров и появятся?

D>На самом деле в компиляторе есть анализатор строгости, который диктует вычислять то, что в любых контекстах должно быть вычислено. Но ему далеко не всё по зубам.


Дак если бы по зубам было бы, то получили бы "прелести" TFP
А что за анализатор? Пальцем не ткнёшь, а то не совсем понимаю где искать (стопудово есть в хаскель-вики небось), точнее как.
Re[10]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 15.02.08 09:08
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Дак если бы по зубам было бы, то получили бы "прелести" TFP

К>А что за анализатор? Пальцем не ткнёшь, а то не совсем понимаю где искать (стопудово есть в хаскель-вики небось), точнее как.

Я несколько месяцев назад пытался искать, начиная отсюда, но в документации по GHC очень это довольно скупо описано.
Re[11]: Функция как первоклассная сущность для рантайма
От: Курилка Россия http://kirya.narod.ru/
Дата: 15.02.08 09:13
Оценка:
Здравствуйте, deniok, Вы писали:

D>Я несколько месяцев назад пытался искать, начиная отсюда, но в документации по GHC очень это довольно скупо описано.


Мда...
Ясно что что-то есть (и даже в GHCi), но как это что-то "руками попробовать" что-то не догоняю.
Не просветишь чайника?
Re[12]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 15.02.08 09:49
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, deniok, Вы писали:


D>>Я несколько месяцев назад пытался искать, начиная отсюда, но в документации по GHC очень это довольно скупо описано.


К>Мда...

К>Ясно что что-то есть (и даже в GHCi), но как это что-то "руками попробовать" что-то не догоняю.
К>Не просветишь чайника?

Я не Саймон Пэйтон Дж. и даже не Саймон Марлоу

Я сомневаюсь, что в GHCi это делается. Можно под отладчиком попробовать посмотреть, сконструировав что-то, что по приведенной выше ссылке должно вычислиться строго Про то, как пользоваться отладчиком где-то в ru_lambda вроде недавно проскакивало или в документации GHC 6.8.x посмотри
Re[13]: Функция как первоклассная сущность для рантайма
От: Курилка Россия http://kirya.narod.ru/
Дата: 15.02.08 09:57
Оценка:
Здравствуйте, deniok, Вы писали:

D>Я не Саймон Пэйтон Дж. и даже не Саймон Марлоу


D>Я сомневаюсь, что в GHCi это делается. Можно под отладчиком попробовать посмотреть, сконструировав что-то, что по приведенной выше ссылке должно вычислиться строго Про то, как пользоваться отладчиком где-то в ru_lambda вроде недавно проскакивало или в документации GHC 6.8.x посмотри


Ну нифигасе, чтоб пользоваться компилером надо дойти до уровня его создателей
Про гхци это я нетуда посмотрел видать, про дебагер видел упоминания (даж чуть заглянуть пока руки не доходили), но как-то не совсем врубаюсь при чём тут он...
Re[14]: Функция как первоклассная сущность для рантайма
От: deniok Россия  
Дата: 15.02.08 10:08
Оценка:
Здравствуйте, Курилка, Вы писали:

К>Здравствуйте, deniok, Вы писали:


D>>Я не Саймон Пэйтон Дж. и даже не Саймон Марлоу


D>>Я сомневаюсь, что в GHCi это делается. Можно под отладчиком попробовать посмотреть, сконструировав что-то, что по приведенной выше ссылке должно вычислиться строго Про то, как пользоваться отладчиком где-то в ru_lambda вроде недавно проскакивало или в документации GHC 6.8.x посмотри


К>Ну нифигасе, чтоб пользоваться компилером надо дойти до уровня его создателей

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

А что ты увидеть хочешь? Это — деталь реализации компилятора, полностью прозрачная для пользователя. По идее это может улучшить пространственную сложность некоторых алгоритмов, но, я думаю, только в отношении постоянного коэффициента
Re[15]: Функция как первоклассная сущность для рантайма
От: Курилка Россия http://kirya.narod.ru/
Дата: 15.02.08 11:11
Оценка:
Здравствуйте, deniok, Вы писали:

D>А что ты увидеть хочешь? Это — деталь реализации компилятора, полностью прозрачная для пользователя. По идее это может улучшить пространственную сложность некоторых алгоритмов, но, я думаю, только в отношении постоянного коэффициента


Т.е. "снаружи" я это использовать не могу и если есть "затыки" в моём коде, то только лишь я во всём виноват?
Блин, а я-то надеялся, что можно хоть какие-нибудь примитивные ворнинги получить. Типа: "вот здесь всё строго-строго, а вот тут чот непонятное, вы уверены, что это не _|_?".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.