-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80


Что делать с жунами

Воскресенье, 25 Апреля 2021 г. 12:31 + в цитатник
korvin:
Цитата applegame @
Ты ошибаешься, возможно путаешь иммутабельность и возможность объявлять константы. const в том же Си появилась, внезапно, в C89, благодаря тому самому Страуструпу, который добавил его сначала в свой Си с классами. Я помню времена, когда строковые литералы в сяшке имели тип char*. В школьном бейсике вообще не было никаких константных переменных.

Нет, не ошибаюсь. Но раз ты не понял, о чём я, то подскажу: opaque struct + функции чтения.

Цитата applegame @
Вообще-то нет.

Вообще-то да.

Цитата applegame @
Этож одна из фишек этого вашего ФП, типа смотрите, компилятор может все нафиг распараллелить.

Параллельность к этому примеру вообще не в тему.

Цитата applegame @
В ФП можно раздербанить список на элементы и запустить кучу потоков, которые будут параллельно выполнять сравнение. При этом твой код никак не изменится.

В моём примере нет списка.

Цитата applegame @
    a = foo(x)
    bar(a)


    bar(foo(x))


На первый взгляд кажется, что разницы нет, но на самом деле есть. В императивном варианте функция foo будет выполнена до начала выполнения функции bar. В функциональной же версии foo может быть выполнена уже после начала выполнения bar (например в середине или даже паралелльно), да и вообще пофиг когда она выполнится. Мысли абстрактней, в ФП композиция функций - это просто новая функция, а не последовательность вызовов функций.


И вот ты снова путаешь синтаксис и семантику.
Чисто функциональный код на Хаскелле:
    do
    a <- foo x
    bar a

do-нотация является ни чем иным, как синтаксическим сахаром для монадной функции bind (оператор '>>=' и '>>' ):
    foo x >>= \a -> bar a

который в свою очередь является просто композицией функций, определённой в используемой монаде:
    (\a -> bar a) (unwrap (foo x))


При этом
    bar(foo(x))

foo вычислится гарантировано до вызова bar при аппликативном порядке вычислений (а это все неленивые ФП языки, F#, Ocaml, Clojure и т.д.)

а
    a = foo(x)
    bar(a)

может вычислиться в другом порядке при нормальном порядке вычислений или просто отложенных вычислениях, например, в Си/Паскале foo может вернуть какой-то объект Promise.

Цитата applegame @
Да не, там отличные, на мой взгляд, статейки. Там прекрасно описаны достоинства и недостатки связных списков в том числе по сравнению с массивам. И вообще, рассмотрена туева хуча всяких видов списков, включая xor и unrolled варианты, на доступном английском языке с картинками. Даже дебил осилит. Инфа представленная там никак не противоречит твоим бенчам, скорее наоборот, объясняет почему так может происходить.

Значит, sergioK и вправду джун, раз не понимает даже статей, на которые сам ссылается. )

https://forum.sources.ru/index.php?showtopic=421266&view=findpost&p=3846791

Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку