LINUX.ORG.RU

Нужно ли ФП обычным смертным программистам?

 , ,


1

2

Я c++ джуниор, работаю в интересной компании. Я хочу развиваться как программист.

Что делать с ООП понятно: книжки по паттернам и наизусть свежие стандарты. Но что делать с ФП? Есть ряд вопросов.

  • 1. Нужно ли обычному программисту (не теоретику, а человеку для которого программирование - работа) понимать Функциональщину чтобы профессионально развиваться?
  • 2. Есть ли на этом дружелюбном ресурсе люди, которые как я не осилили монады, лямбда-исчисление и при этом стали хорошими программистами?
  • 3. Полезно ли вообще программисту читать книжки вроде SICP? (у которого нет главной жизненной цели - блистать умом на лоре).

Перемещено mono из talks


Ответ на: комментарий от tailgunner

Although I have not had time to study them carefully, much less write serious code using them, it is evident from even a brief review of their web sites...

Yeah... Charming...

То же самое можно сказать и про Scala или про F# (который, кстати, весьма близкий родственник ML).

Харпер, он весьма и весьма специфический чувак... Он, например, давно катит бочку на модульную систему/типклассы хаскеля...

А так, он ML вроде бы уважает, а F# — не любит.

И главная идея его пассажа, что на этот раз можно смотреть на мейнстрим-языки без «overwhelming sense of disappointment», а с оптимизмом и энтузиазмом, что наконец-то новые важные идеи были, признаны и приняты. Т.е. на безрыбье и рак — рыба.

Macil ★★★★★
()
Ответ на: комментарий от Macil

Харпер, он весьма и весьма специфический чувак...

Неважно. Он разбирается в ЯП вообще и ML в частности, и он отнюдь не считает Rust «хтонической химерой, в которой ad-hoc стоит на ad-hoc'е и ad-hoc'ом погоняет».

tailgunner ★★★★★
()
Ответ на: комментарий от ozkriff

Rust мне показался более интересеным как минимум из-за явного управления памятью

Нет никаких препятствий... Да и вообще, что тебе мешает управлять памятью, например, в хаскеле?

Пресловутые байтстринги спокойно лежат себе на сишной куче, а на хаскельной куче лежит только ForeignPtr, который при сборке мусора вызывает соответствующий free. А если брать просто Ptr, то и не вызывает.

что не так с синтаксисом

Тем что Rust совершенно синтаксически перегружен. Пусть как в C++, в смысле что можно перегужать операторы, но и это — зло.

Macil ★★★★★
()
Ответ на: комментарий от tailgunner

и он отнюдь не считает Rust «хтонической химерой,

Поправка: относительно *других* мейнстрим-языков. Кроме того, если бы и я делал «официальное заявляение», то и я бы его делал по шаблону «с одной стороны нельзя не согласиться, с другой стороны нельзя не возразить» в духе осторожного оптимизма.

И вообще, если сравнивать Rust с Си или Си++ или с Go или с питоном или с ява-скриптом... То рулит нипадеццки.

А так, пока Rust относительно C++ примерно то же самое что Скала относительно Явы: по всем параметрам лучше, но никто не рискует пользоваться.

Macil ★★★★★
()
Ответ на: комментарий от tailgunner

Цитату.

For once I can look at new industrial languages without an overwhelming sense of disappointment, but instead with optimism and enthusiasm that important ideas are finally, at long last, being recognized and adopted. As has often been observed, it takes 25 years for an academic language idea to make it into industrial practice. With Java it was simply the 1970’s idea of automatic storage management; with languages such as Rust and Swift we are seeing ideas from the 80’s and 90’s make their way into industrial practice. It’s cause for celebration, and encouragement for those entering the field: the right ideas do win out in the end, one just has to have the courage to be irrelevant.

Оттуда же.

Macil ★★★★★
()
Последнее исправление: Macil (всего исправлений: 1)
Ответ на: комментарий от Macil

with optimism and enthusiasm that important ideas are finally, at long last, being recognized and adopted

И это говорит специалист по ЯП. Короче, меньше гонора - не так глупо будешь выглядеть.

tailgunner ★★★★★
()
Ответ на: комментарий от Macil

Да и вообще, что тебе мешает управлять памятью, например, в хаскеле?

например тем, что в haskell нельзя сделать регионы, которые не будут напрягать GC.

Пресловутые байтстринги спокойно лежат себе на сишной куче,

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

qnikst ★★★★★
()
Ответ на: комментарий от tailgunner

И это говорит специалист по ЯП.

Не говорит, а выражает мнение. Используя достаточно распространённый штамп. Сбалансированно, но неинтересно, т.к. по сути дела ничего он этим не сказал.

Я категорически не согласен что Rust — это не «ad-hoc language design». Тут уж Харпер явно перегибает. Да многие хорошие идеи нашли относительно гармоничное место в Rust, в первую очередь, полная и безоговорочная ликвидация мейнстрим ООП. Но всё-равно Rust во многом остается жестким, искусственным языком, созданным под узкий круг конкретных задач.

P.S. Про хаскель он говорил намного более «интереснее».

Macil ★★★★★
()
Ответ на: комментарий от qnikst

они лежат в блоках обозначенных как pinned

Да. Ты прав. Я погорячился насчет байтстрингов.

Но к ForeignPtr можно прицепить область, полученную через malloc или memory mapped I/O. Хаскельский GC о ней будет знать чуть более чем ничего.

Macil ★★★★★
()
Ответ на: комментарий от qnikst

Кстати, это их свойство делает работу с ними нежелательной во многих случаях

Интересно... А что не так с pinned?

Macil ★★★★★
()

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

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

Подумываю покопаться в эрланге, в конечном счёте на нём написан такой весьма практичный проект, как ejabberd.

hobbit ★★★★★
()
Ответ на: комментарий от Macil

поскольку с pinned блоком возможно работает внешние функции, то весь блок pinned не может быть перемещен и освобожден. Когда блоки не разделялись по виду это приводило к тому, что все объекты не будут освобождены. Сейчас, насколько я знаю, runtime ghc разделяет pinned и не pinned объекты, но все равно неаккуратное использование bytestring ведет к фрагментации. Поэтому оно оправдано в IO, и единственный вариант в случае FFI, но использование как внутреннего типа далеко не всегда оправдано.

qnikst ★★★★★
()
Ответ на: комментарий от Macil

многие хорошие идеи нашли относительно гармоничное место в Rust, в первую очередь, полная и безоговорочная ликвидация мейнстрим ООП.

Мне уже почти любопытно - какие у тебя источники информации о Rust...

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

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

Это всего лишь одно из возможных определений. С точки зрения трудовой книжки и отдела кадров оно безусловно правильное. А вот к определению реального профессионального уровня отношение имеет весьма косвенное.

Мне приходилось руководить студентами третьего курса, которые программировали куда лучше, чем некоторые обладатели трудовой книжки с гордой записью «инженер-программист 2 категории».

hobbit ★★★★★
()
Ответ на: комментарий от Macil

можно, просто, например, есть в haskell resourcet и regions, которые формально позволяют ввести регионы и переменные за которыми «следит» регион не обязаны отслеживаться gc, но в силу ленивости может получаться, что такой объект содержит thunk ссылающийся на переменные за которыми должен следить GC.

Т.е. сделать на haskell то, что можно сделать на rust (насколько я понимаю rust) нельзя без модификаций runtime или урезания возможностей.

А так да GHC.ByteArray, ForeignPtr, WeakRef позволяют сделать что-то похожее.

qnikst ★★★★★
()
Ответ на: комментарий от tailgunner

Мне уже почти любопытно - какие у тебя источники информации о Rust...

А мне любопытно чего же именно я пропустил из новостей о Rust.

Macil ★★★★★
()
Ответ на: комментарий от Macil

Ну, насчет ООП ты пропустил 4 RFC о добавлении ООП в Rust. Насчёт остального - даже предположить страшно.

tailgunner ★★★★★
()
Ответ на: комментарий от Eddy_Em

Из кучи собеседников на ЛОРе я никого сходу и не вспомню, кто был бы программистом: есть научники, математики, физики, админы, фотографы... Но программистов нет!

Ну я программист. Всю жизнь программирую. Но ФП я не осилил, такая печалька.

hobbit ★★★★★
()
Ответ на: комментарий от JANB

Просто почитаешь треды на лоре и возникает ощущение, что ФП чаще всего используется для сравнения длин половых членов у самцов-интеллектуалов.

Тоже мне критерий. В своё время для этого же использовалось чтение Джойса. Но это же не означает, что Джойса нельзя читать просто так.

hobbit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.