LINUX.ORG.RU

Почему ООП стало более популярным и соответствующие языки и технологии программирования чем то же ФП?

 ,


1

5

Заранее прошу прощения за то, что не в Talks, а сюда. Так получается, что теперь в Talks просто так постить нельзя, нужна некая карма и я должен «страдать» (Почему я не могу писать в раздел Talks? (комментарий)). Я в упор не помню данные своего старого аккаунта. Зарабатывать карму здесь и сейчас у меня нет ни времени, ни возможности, ни необходимости. Почему сюда, а не на другие форумы? Потому что считаю, что здесь обитают люди, которые смогут ответить на вопросы ниже и, возможно, даже, которые застали те самые времена (если конечно те самые люди ещё здесь).

Всем доброго времени суток! Не срача ради, а понимания для. Хочется понять историчность и почему так произошло. Понятно, что сейчас уже стали внедрять функциональные фичи много куда (в те же Java, C++, C# и т.д.). Стало появляться много функциональных языков (в том числе совсем новых). Но почему спустя столько времени? Почему спрашиваю:
- Functional programming has its origins in lambda calculus, a formal system developed in the 1930s (!!!) to investigate computability, the Entscheidungsproblem, function definition, function application, and recursion. Many functional programming languages can be viewed as elaborations on the lambda calculus (отсюда: https://en.m.wikipedia.org/wiki/Functional_programming);
- Lisp появился ажно в 1958 году;
- после лиспа ещё была целая куча функциональных языков (APL, IPL, ML, Miranda, Erlang, etc.);
- C++ в 1985;
- Haskell в 1990;
- Java в 1995;

Сама идея ООП (и то я так понял весьма размытая, каждый понимал (и, кстати, по-моему до сих пор понимает) по-своему) вроде как витала со времени создания самого лиспа, но до конкретных реализаций она добралась ближе к концу 80-х - начала 90-х годов.
(поправьте меня, если не прав)
И это ещё при всём при том, что ФП имеет под собой весьма конкретный математический базис (чего я, пожалуй, не могу сказать про ООП).
Я так понял, что благодаря таким крупным компаниям как Microsoft, Oracle...
Но почему они так сильно повлияли на развитие этих технологий и как именно они это сделали я, честно говоря, не совсем понимаю.
Ок, ладно, тогда железо было не такое как сейчас, памяти было маловато для нормального существования функциональных языков на x86 платформе.
Но ведь была же та же, например, Symbolics, которая вроде бы весьма активно продавала лисп-машины?
Ок, Symbolics развалилась благодаря неблагоприятному стечению обстоятельств и «эффективным» манагерам, но их наработки оказались никому не нужны что ли?
И опять-таки, когда нужное железо появилось почему выбор этих и других крупных компаний пал именно на эти языки?
Почему не на функциональные языки?
Потому что в то время функциональные языки в основном использовались сугубо в академической среде или как?
Или если перефразировать всё вышесказанное словами моего коллеги: «если всё так круто (про ФП), то почему оно ещё не захватило рынок?»

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

Он дал ссылку «мой форк шланга, запилил (не сделаЮ, а сделаЛ) нужные мне фичи, вот туториал, это правильное решение этой проблемы».

А это сакральное знание или простым смертным тоже доступно?

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

Исходники форка шланга и туториалы находятся в открытом доступе. https://gitlab.com/lock3/clang/wikis/Metaprogramming-Introductory-Tutorial

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

Даже Котечка заценил. Метапроговцы его знают.

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

Я почти уверен, что он сделал это не сам, а с единомышленниками.

Я в свою очередь не уверен, что он там вообще что-то делал. Ну да ладно, он сам всё равно карты не раскроет, а в отсутствии информации спорить бесполезно.

Прочитав 5% туториала, я осознал, насколько это мощная и гибкая штука, что в моих глазах затмевает макросы лиспов.

Может поделишься своими мыслями? Просмотрев доку по диагонали я не увидел чего-то сногсшибательного, разве что авторам пришлось засунуть в сие творение отдельными пунктами чуть ли не все фичи крестов.

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

Правильнее будет сказать что для выражения своего мнения, я не обязан отвечать на чьи-либо вопросы

Ок, запомню вас как человека, который не готов аргументировать свою позицию. No problem.

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

consteval код, который генерирует код на этапе компиляции. Принимает на вход AST, на выход тоже AST.

Позволяет творить магию. Для обычной структуры

struct Foo
{
   int a;
   std::string b;
   MyType *с;
};

можно автоматически нагенерировать БЕЗ внешних программ всю необходимую обвязку (геттеры-сеттеры, всякие InvokeMethod(pInstance, "MyMethod", 42);) и реализовывать на основе этого всякие прикладные вещи (ORM, автоматическая сериализация во что угодно, генерация формочек для редактирования как в игровых движках...). И всё это для любого кода - своего или стороннего. Можно сгенерировать это всё для любого типа данных ЯП, С или С++ сторонней бибилотеки, не меняя саму библиотеку, не нарушая ABI.

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

Опять же, Царю очень не нравится, что в остальных (почти всех?) ЯП эта магия работает в рантайме, соответственно, эта реализация работает строго в компайлтайме, следуя любимой растаманами концепции «отловить ошибки на этапе компиляции». Кстати, следует ли назвать оксюмороном «Царь использует любимую фанатами Раста концепцию...»? Хотя если сказать ему это, он, наверное, скажет «это сишная концепция, эти адепты всё украли, хотя их реализация несостоятельна».

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

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

Жаль что его опять притерли, потом орать будет что он ответить не мог. Нет у него никакой концепции в том то и дело, просто он считает С/C++ венцом творения и можно сколько угодно с ним беседовать на тему того, что жизнь не стоит на месте, не всегда нужна максимальная производительность от языка, не каждый хочет пердолиться с таким достаточно низкоуровневым языком и еще 1000 причин почему язык может и хороший, но есть что-то и поудобней для жизни. На все это он будет реагировать своей стандартной пастой поехавшего и хамить.

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

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

arturianec100 ()
Ответ на: комментарий от abcq

он считает С/C++ венцом творения

Нет. Он писал, что С++ стал более-менее нормальным к 17-й версии. Предыдущие версии языка он открыто называл парашой. У него как раз амбиции и идеи как сделать С++ гораздо лучше (его рассказы про С++ как новый мета-язык). Для него есть принципиальная разница между «на основе этих концепций решаем прикладную задачу» и «на основе этих концепций строим новые концепции и на их основе решаем прикладную задачу».

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

Весь хайлевел сделан на основе лоу левела. Тут можно очень много философствовать, но это нужно очень немногим разработчикам.

На все это он будет реагировать своей стандартной пастой поехавшего и хамить.

Если ему поменьше возражать и больше спрашивать, тогда он не хамит.

Кстати, он же иногда пишет под анонимусом. Его манеру речи трудно перепутать с кем-то другим. Значит, он по каким-то причинам не хочет возвращаться в дискуссию после очередного бана.

И да, люди, которым нужен ЯП строго «поудобней для жизни» концепции Царя не понятны и не нужны.

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

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

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

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

«Новое не добавляют - C++ не годится как ЯП высокого уровня. Добавляют что-то новое - хватит усложнять язык!» Мне нравится цитата из статьи на лурке:

Далее, стремительно заполонив все ниши, С++ столкнулся со множеством проблем и вызовов. На вызовы он, проявляя чудеса гибкости и расширяемости, отвечал внедрением новых фич и возможностей, а на проблемы забивал. Впрочем, большинство из них можно обойти, если знать как.

В случае С++ добавление новых фич - это нормально и обычно. Только особые гении-фанатики используют ВСЕ фичи С++, 99% С++ программистов пишут на своём (удобном для себя) подмножестве С++ и норм. На том же Qt можно спокойно писать на платформы, где нету С++11. Идеальное подмножество для «попроще решить прикладную задачу», где кривая обучения, имхо, легче, чем у раста.

У тебя глубоко в голове сидят тезисы «нормальный хайлевел - это в ЯП со своей ВМ» и «без ВМ никакого нормального хайлевела не будет». Это противоположность тезисам Царя. Ты уже какой пост пишешь их разными формулировками. Исходя из этого, Царь будет критиковать любые твои тезисы.

полигоном для обкатывания концепций того, как правильно реализовать эти хайлевел концепции

Прикинь, если бы эти хайлевел концепции реализовывались бы ТОЛЬКО в С++. Тогда 99% программистов мира твердило бы «С++ - это серебрянная пуля». Тот факт, что они реализуются в С++ в виде библиотек, а в ЯП с ВМ - в виде изменения ВМ, уже намекает на фундаментальность С++.

arturianec100 ()