All streams
Search
Write a publication
Pull to refresh
19
0
Юрий Сыровецкий @cblp

говорящий с машинами

Send message
mask_ $ preserveObject x >>= p -> newForeignPtr p releaseObject
   preserveObject p
   newForeignPtr p releaseObject

Если между этими строчками прилетит исключение, финализатор никогда не вызовется? С этим можно как-то бороться?
Из количества аллокаций какие-то выводы можно сделать?
Да, но и упрощает по сравнению с IORef
Я тоже именно об этом. Иммутабельность вообще упрощает сборку мусора. Даже хаскельная, которую вы считаете ненастоящией.
Программисту не очень интересно, что себе думает GC. С точки зрения процессора вообще нет ни GC, ни переменных, ни функций, — только одно мутабельное пространство памяти.

Мы же рассуждаем о мутабельности с точки зрения программиста и семантики языка.

Да и точки зрения зрения GC «мутабельная ровно 1 раз» переменная от настоящей мутабельной отличается существенно, о чём было высказывание выше.
Не совсем правда. Ленивое значение — это как бы «переменная», в которую можно присвоить не больше одного раза. Разве это мутабельноность?

20 лет назад хаскельные компиляторы оптимизировали хуже, чем Ява.

Поиск по вики есть — https://github.com/ruHaskell/ruhaskell/search?q=IDE&type=Wikis


Хотя там всего несколько страниц, можно по их списку пройтись.


А ещё можно задавать вопросы в наших чатах — https://ruhaskell.org/links.html

В нашем большом сообществе ruHaskell есть вики для ответов на такие часто задаваемые вопросы github.com/ruHaskell/ruhaskell/wiki
Второй вариант хороший. STM его обеспечивает. Поскольку чтение и запись регистра — императивный эффект, Хаскель обеспечивает порядок. Очень плохо, что в вашем языке последовательность чтений из записей не определена. Переходите на Хаскель.
Передавать функции в качестве параметра — downwards funarg problem — это лишь малая часть функционального стиля.
Т.н. "вычисление" не может достать что-то из БД или не может вызвать системную функцию?

Не может (без unsafe).


И функции внутри функциональной композиции не могут иметь "действия"?

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


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


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

Вот это как раз невозможно (возможно только если специально стрелять себе в ногу через unsafe). Неявное изменение порядка вычислений есть, но оно не вредит, а либо не имеет значения, либо помогает.


И я так думаю, это именно те случаи, которые имел ввиду Игорь Шевнин в своей фразе.

Я уверен, что нет. Иногда хочется разобраться в деталях, например, чтобы оптимизировать скорость или расход памяти, и только в этом случае ленивость сложнее императивного кода. Хотя на этот случай есть инструменты управления энергичностью и ST для локального отказа от ленивости в пользу явного управления порядком и присваиваний в обычные изменяемые переменные.

Текст почти всегда раздувается ненамеренно.
Конечно, он функциональный! Для некоторого определения «функционального».
Я не глубокий специалист в лиспе, надеюсь, кто-нибудь поправит. Знаю только, что есть много разных лиспов: изначальный Лисп МакКарти — совсем императивный, в Common Lisp есть элементы ФП, в Scheme их ещё больше.

Преподавали, наверно, потому что в нём есть базовые элементы ФП — лямбда-абстракция и замыкание, а также односвязный список в сердце языка. Но шаг в сторону — и появляются мутации. С комбинаторами не так удобно работать, как в языках с синтаксисом ISWYM (*ML, Haskell). С таким же успехом можно на Питоне и С++ преподавать ФП.

Так что Лиспы считаются функциональными, но примерно в той же степени, что и Питон.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity