Шикарная книжка по C++
От: LaptevVV Россия  
Дата: 06.10.16 16:01
Оценка: 36 (7) -2
http://www.pdfbooksplanet.org/tags/Chris+Weed/
Функциональное программирование на С++.
Chris Weed.
Всего 100 с небольшим страниц, но написано шикарно!
Абсолютно без вода, только небольшое введение — и код, код, код...
Уже первая глава — рекурсивная форма стандартных алгоритмов.
Понятная даже начинающим.
Неистово рекомендую!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Шикарная книжка по C++
От: _hum_ Беларусь  
Дата: 06.10.16 20:18
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.pdfbooksplanet.org/tags/Chris+Weed/

LVV>Функциональное программирование на С++.
LVV>Chris Weed.
LVV>Всего 100 с небольшим страниц, но написано шикарно!
LVV>Абсолютно без вода, только небольшое введение — и код, код, код...
LVV>Уже первая глава — рекурсивная форма стандартных алгоритмов.
LVV>Понятная даже начинающим.
LVV>Неистово рекомендую!


так а это разве правильно — рекурсивная форма алгоритмов на с++? или уже появилась возможность контроля размера стека?
Re[2]: Шикарная книжка по C++
От: LaptevVV Россия  
Дата: 06.10.16 20:41
Оценка:
LVV>>Уже первая глава — рекурсивная форма стандартных алгоритмов.
LVV>>Понятная даже начинающим.
LVV>>Неистово рекомендую!
__>так а это разве правильно — рекурсивная форма алгоритмов на с++? или уже появилась возможность контроля размера стека?
Первое, что в книжке объясняется: побочный эффект и чистые функции без побочных эффектов.
Потом берет и пишет рекурсивную форму многих стандартных алгоритмов.
И не просто пишет, а сравнивает со стандартной реализацией в указанной им платформе.
В половине случаев рекурсивная версия оказывается эффективнее.
Потом у него лямды, потом — ленивые вычисления...
В общем, то, что я успел посмотреть-почитать — мне ОЧЕНЬ понравилось.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Шикарная книжка по C++
От: _hum_ Беларусь  
Дата: 06.10.16 21:07
Оценка: 42 (5) +1
Здравствуйте, LaptevVV, Вы писали:

LVV>>>Уже первая глава — рекурсивная форма стандартных алгоритмов.

LVV>>>Понятная даже начинающим.
LVV>>>Неистово рекомендую!
__>>так а это разве правильно — рекурсивная форма алгоритмов на с++? или уже появилась возможность контроля размера стека?
LVV>Первое, что в книжке объясняется: побочный эффект и чистые функции без побочных эффектов.
LVV>Потом берет и пишет рекурсивную форму многих стандартных алгоритмов.
LVV>И не просто пишет, а сравнивает со стандартной реализацией в указанной им платформе.
LVV>В половине случаев рекурсивная версия оказывается эффективнее.
LVV>Потом у него лямды, потом — ленивые вычисления...
LVV>В общем, то, что я успел посмотреть-почитать — мне ОЧЕНЬ понравилось.

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

я к тому веду, что такие вещи естественнее изучать на соответствующих языках (меня в свое время впечатлила P.Van Roy, S. Haridi. Concepts, Techniques, and Models of Computer Programming)
Отредактировано 06.10.2016 21:10 _hum_ . Предыдущая версия .
Re[2]: Шикарная книжка по C++
От: Evgeny.Panasyuk Россия  
Дата: 06.10.16 21:13
Оценка: +2
Здравствуйте, _hum_, Вы писали:

__>так а это разве правильно — рекурсивная форма алгоритмов на с++? или уже появилась возможность контроля размера стека?


Вообще нет, но многие (все?) компиляторы оптимизируют хвостовую рекурсию в цикл, при включённых оптимизациях.
Re[3]: Шикарная книжка по C++
От: _hum_ Беларусь  
Дата: 06.10.16 21:16
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


__>>так а это разве правильно — рекурсивная форма алгоритмов на с++? или уже появилась возможность контроля размера стека?


EP>Вообще нет, но многие (все?) компиляторы оптимизируют хвостовую рекурсию в цикл, при включённых оптимизациях.


так не всегда же к хвостовой можно свети — это раз. а во-вторых, если нет гарантии, то код подойдет только для баловства.
Re: Шикарная книжка по C++
От: kov_serg Россия  
Дата: 07.10.16 01:11
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.pdfbooksplanet.org/tags/Chris+Weed/

LVV>Функциональное программирование на С++.
LVV>Chris Weed.
LVV>Всего 100 с небольшим страниц, но написано шикарно!
LVV>Абсолютно без вода, только небольшое введение — и код, код, код...
LVV>Уже первая глава — рекурсивная форма стандартных алгоритмов.
LVV>Понятная даже начинающим.
LVV>Неистово рекомендую!

Вот что меня настораживает так это такие книги. Они решают искуственные проблемы искуствееными методами. И все рады как это круто.
Есть нормальные языки для работы в таком стиле, зачем всё пихать в одну кучу?
На любом полном языке можно писать фортраном. Так что радоватья особо нечему.
C++ идёт неведомо куда, он создаёт всё новые и новые трудности которые потом пытается преодолеть.
Если вам надо мето-программирование и другие моделирования до синтеза кода, так что мешает это разделить на разные этапы
зачем всё пихить в один этап компиляции?
Например надо тебе колекцию с заданными свойствами, указал требование тебе синтезирует оптимальную колекцию, и используй.
Запросил оптимизировать и выкинуть лишее. Вуаля. Двигайся дальше.
Надо поменял требование получил другую рализацию, проверил скороть и потребление на реальном железе и данных сделал выводы.
Для чего таскать весь лишний мусор в виде шаблонов на все случаи, которые вместо облегчения жизни станут лютым гемороем.
И использовать их не по назначению, а для получения функционала которого изначально нет в языке.

ps: Послушал выступление негра из MS про модули. Это признание в том что они неосилили задачу и скорее всего не осилят, учитывая всё навороты и прибабахи которые хотят отставить в этих модулях.

pps: Я бы добавил в C++ функционал depedecated на функции языка что бы от них можно было избавлятся или хотябы проверять что их нет в коде.
Re[4]: Шикарная книжка по C++
От: мыщъх США http://nezumi-lab.org
Дата: 07.10.16 01:27
Оценка:
Здравствуйте, _hum_, Вы писали:

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


__> на с++ рекурсивный подход использовать мало того, что сомнительно по эффективности,

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

__> так еще и небезопасно по переполнению стека. вот вы знаете, как удостовериться, что размера стека хватит?

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


__>я к тому веду, что такие вещи естественнее изучать на соответствующих языках

+1
есть куча языков где рекурсия кушает не стек, а кучу. хотя накладные расходы на вызов функции в общем случае неизвестны. даже если это рекурсивный обход каталогов, то очень может быть что накладные расходы скушают всю кучу...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[5]: Шикарная книжка по C++
От: Evgeny.Panasyuk Россия  
Дата: 07.10.16 01:42
Оценка:
Здравствуйте, мыщъх, Вы писали:

__>>я к тому веду, что такие вещи естественнее изучать на соответствующих языках

М>+1
М>есть куча языков где рекурсия кушает не стек, а кучу.

Это скорее относится к компиляторам, чем к языку. Например есть такие штуки как Split Stacks, Segmented Stacks.
Re[6]: Шикарная книжка по C++
От: мыщъх США http://nezumi-lab.org
Дата: 07.10.16 01:54
Оценка: +1 -1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, мыщъх, Вы писали:


__>>>я к тому веду, что такие вещи естественнее изучать на соответствующих языках

М>>+1
М>>есть куча языков где рекурсия кушает не стек, а кучу.

EP>Это скорее относится к компиляторам, чем к языку. Например есть такие штуки как Split Stacks, Segmented Stacks.


а есть _универсальный_ рецепт для си (си++) ?
давайте исходить из того, что мы пишем код не под конкретный компилятор.
нерекурсивный подход скорее всего будет работать везде. рекурсивный же это хождение по минному полю. умеючи можно и рекурсивно. но все-таки слишком рисковано.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[7]: Шикарная книжка по C++
От: Evgeny.Panasyuk Россия  
Дата: 07.10.16 02:20
Оценка: +2
Здравствуйте, мыщъх, Вы писали:

М>а есть _универсальный_ рецепт для си (си++) ?

М>давайте исходить из того, что мы пишем код не под конкретный компилятор.

C++ работает везде — и на современных десктопах, и на микроконтроллерах, и даже на древних компьютерах типа Commodore 64.
Поэтому писать под что-то конкретное, по-крайней относительно памяти, таки придётся.

М>нерекурсивный подход скорее всего будет работать везде.


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

М>рекурсивный же это хождение по минному полю. умеючи можно и рекурсивно.


Ну да, при желании можно и рекурсивно, например:
1. убеждаться в оптимизации хвостовой рекурсии
2. выделять много адресного пространства под стэк
3. использовать фрагментированные стэки
4. ограничивать глубину рекурсии логарифмом, например как в нормальных реализациях quicksort

М>но все-таки слишком рисковано.


Вопрос зачем.
Re[4]: Шикарная книжка по C++
От: LaptevVV Россия  
Дата: 07.10.16 14:34
Оценка:
LVV>>В общем, то, что я успел посмотреть-почитать — мне ОЧЕНЬ понравилось.
__>не, я немного про другое — что на с++ рекурсивный подход использовать мало того, что сомнительно по эффективности, так еще и небезопасно по переполнению стека. вот вы знаете, как удостовериться, что размера стека хватит?
Это не вопрос парадигмы и стиля программирования.
А в означенной мной книжке речь идет о функциональном стиле кода в С++.
__>я к тому веду, что такие вещи естественнее изучать на соответствующих языках (меня в свое время впечатлила P.Van Roy, S. Haridi. Concepts, Techniques, and Models of Computer Programming)
Вот за это — спасибо!
Уже посмотрел — книжка блеск!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Шикарная книжка по C++
От: _hum_ Беларусь  
Дата: 07.10.16 15:20
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>>>В общем, то, что я успел посмотреть-почитать — мне ОЧЕНЬ понравилось.

__>>не, я немного про другое — что на с++ рекурсивный подход использовать мало того, что сомнительно по эффективности, так еще и небезопасно по переполнению стека. вот вы знаете, как удостовериться, что размера стека хватит?
LVV>Это не вопрос парадигмы и стиля программирования.
LVV>А в означенной мной книжке речь идет о функциональном стиле кода в С++.
__>>я к тому веду, что такие вещи естественнее изучать на соответствующих языках (меня в свое время впечатлила P.Van Roy, S. Haridi. Concepts, Techniques, and Models of Computer Programming)
LVV>Вот за это — спасибо!
LVV>Уже посмотрел — книжка блеск!

ага. именно после таких книг понимаешь, что пытаться демонстрировать (в том числе студентам) приемы декларативного программирования на императивном языке — это как играть в хоккей на траве
Re[6]: Шикарная книжка по C++
От: cures Россия cures.narod.ru
Дата: 07.10.16 17:55
Оценка: +1
Здравствуйте, _hum_, Вы писали:

__>ага. именно после таких книг понимаешь, что пытаться демонстрировать (в том числе студентам) приемы декларативного программирования на императивном языке — это как играть в хоккей на траве


Книжка отличная, но почему бы не демонстрировать? C++ — язык мейнстрима, на нём пишутся быстрые программы, его многие знают. Если тем, кто его знает, можно с его помощью показать какие-то красивые идеи, которые они потом смогут использовать, то почему бы это не сделать? Можно, конечно, их показывать на Хаскеле или Ерланге, но пользователи оных, во-первых, и так хорошо знают про рекурсию, а во-вторых, "узок круг этих людей, страшно далеки они от народа".

__>так не всегда же к хвостовой можно свети — это раз. а во-вторых, если нет гарантии, то код подойдет только для баловства.


К хвостовой сводятся только элементарные циклы, это не очень интересно.
А полную гарантию даёт только похоронное бюро
Re: Шикарная книжка по C++
От: Кодт Россия  
Дата: 07.10.16 18:53
Оценка: +1
Здравствуйте, LaptevVV, Вы писали:

LVV>http://www.pdfbooksplanet.org/tags/Chris+Weed/


Жалко, что она выложена на какие-то жлобские файлохранилища.
Варез? (украдено у амазона?)

LVV>Всего 100 с небольшим страниц, но написано шикарно!

LVV>Абсолютно без вода, только небольшое введение — и код, код, код...

Вся вода — в коде.

Читать по сто раз один и тот же паттерн хвостовой рекурсии — тоскливо.
Например, очевидно же, что all_of, any_of, none_of отличаются друг от друга только операцией.
И более того, выражаются друг через друга, по правилам де Моргана
template<class It, class Pred>
bool all_of(It begin, It end, Pred&& pred) {
  return begin == end ? true
                      : pred(*begin) && all_of(next(begin), end, pred);
}

template<class It, class Pred>
bool none_of(It begin, It end, Pred&& pred) {
  return all_of(begin, end, not_(pred));
}

template<class It, class Pred>
bool any_of(It begin, It end, Pred&& pred) {
  return !none_of(begin, end, pred);
}
Перекуём баги на фичи!
Отредактировано 07.10.2016 21:37 Кодт . Предыдущая версия . Еще …
Отредактировано 07.10.2016 21:36 Кодт . Предыдущая версия .
Re[7]: Шикарная книжка по C++
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.10.16 19:10
Оценка:
Здравствуйте, cures, Вы писали:

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


__>>так не всегда же к хвостовой можно свети — это раз. а во-вторых, если нет гарантии, то код подойдет только для баловства.


C>К хвостовой сводятся только элементарные циклы, это не очень интересно.

CPS же
Re[2]: Шикарная книжка по C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.10.16 19:38
Оценка: +1
Здравствуйте, kov_serg, Вы писали:

_>ps: Послушал выступление негра из MS про модули. Это признание в том что они неосилили задачу и скорее всего не осилят, учитывая всё навороты и прибабахи которые хотят отставить в этих модулях.


Наконец, хотя этот предмет не из приятных, я должен упомянуть PL/1, язык программирования, документация которого обладает устрашающими размерами и сложностью. Использование PL/1 больше всего напоминает полет на самолете с 7000 кнопок, переключателей и рычагов в кабине. Я совершенно не представляю себе, как мы можем удерживать растущие программы в голове, когда из-за своей полнейшей вычурности язык программирования — наш основной инструмент, не так ли! — ускользает из-под контроля нашего интеллекта. И если мне понадобится описать влияние, которое PL/1 может оказывать на своих пользователей, ближайшее сравнение, которое приходит мне в голову, — это наркотик. Я помню лекцию в защиту PL/1, прочитанную на симпозиуме по языкам программирования высокого уровня человеком, который представился одним из его преданных пользователей. Но после похвал в адрес PL/1 в течение часа он умудрился попросить добавить к нему около пятидесяти новых "возможностей", не предполагая, что главный источник его проблем кроется в том, что в нем уже и так слишком уж много "возможностей". Выступающий продемонстрировал все неутешительные признаки пагубной привычки, сводящейся к тому, что он впал в состояние умственного застоя и может теперь только просить еще, еще, еще. Если FORTRAN называют детским расстройством, то PL/1, с его тенденциями роста подобно опасной опухоли, может оказаться смертельной болезнью


Э.Дейкстра, Смиренный программист, 1972
Re: Шикарная книжка по C++
От: Pzz Россия https://github.com/alexpevzner
Дата: 07.10.16 19:39
Оценка: :)
Здравствуйте, LaptevVV, Вы писали:

LVV>Абсолютно без вода, только небольшое введение — и код, код, код...

LVV>Уже первая глава — рекурсивная форма стандартных алгоритмов.

Я нет какой-нибудь книжки о том, как использовать стиральную машину для перемешки салатов?

Я к тому, что каждому инструменту свое применение.
Re[4]: Шикарная книжка по C++
От: VTT http://vtt.to
Дата: 07.10.16 19:55
Оценка:
Здравствуйте, _hum_, Вы писали:

__>не, я немного про другое — что на с++ рекурсивный подход использовать мало того, что сомнительно по эффективности, так еще и небезопасно по переполнению стека. вот вы знаете, как удостовериться, что размера стека хватит?


Ну вот автор книжки ссылается на фундаментальнейшую теорему "Ей-богу, так!".

The Apple LLVM version 6.1.0 compiler was used to compile the samples in this book using the “-O3” option that includes tail-call optimization.

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

Книга по большей части написана в виде <summary>\r\n<code>.
Лучше бы автор вместо нее просто сделал репозиторий.
И еще бы привел код, использованный для сравнения производительности.
А то все таблица Run-time Results похожа на сравнение порошков.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Отредактировано 07.10.2016 19:56 VTT . Предыдущая версия .
Re[2]: Шикарная книжка по C++
От: kov_serg Россия  
Дата: 07.10.16 20:27
Оценка: -3
Здравствуйте, Pzz, Вы писали:

Pzz>Я нет какой-нибудь книжки о том, как использовать стиральную машину для перемешки салатов?

Есть отличное прменение для ультразвуковой стиральной машины в функциональном стиле
http://alkohacker.ru/samy-j-by-stry-j-retsept-samogona-braga-za-1-sutki

Pzz>Я к тому, что каждому инструменту свое применение.

Категорически поддерживаю. Растраивает только то что раньше C++ можно было применить куда угодно,
а теперь С++(n+1) уже даже на winxp не работает и это видимо не предел.
Но у C++ есть очень отличная черта он поддерживает C. А это очень живучий и не требовательный язык.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.