В функциональных языках проще работать с памятью, не надо возиться
Сборка мусора не является специфическим атрибутом функциональных языков.
Можете реализовать вывод региона в Хиндли-Миллнере через С++ные темплейты?
В частности, в C# примерами синтаксического сахара являются блоки
Код:
using ( ... ) {
}
и
Код:
foreach (...) {
}
, а в Haskell -- do-синтаксис и list comprehension.
На самом деле, это как посмотреть. На мой взгляд, такие вещи как
- перегрузка операторов
- a->b вместо (*a).b
- <cond> ? <trueVal> : <falseVal>
вполне себе подпадают под понятие синтаксического сахара.
Чушь.
"СИНТАКСИЧЕСКИЙ сахар" (обращаю внимание - не семантический) - это компактификация синтаксиса, никак не вляющая на архитектуру ПО. Например, когда закалённый программист на Delphi переходит на С++, то первое, на что он обращает внимание - это на необходимость реализовывать properties ручками. Архитектуру это не меняет, но привычный ему контроль усложняется. С другой стороны, когда программист на Си переходит на Delphi, то properties для него будут излишеством - дополнительной непонятно зачем нужной фенечкой, а вот семантической возможности играться с массивами указателей на функции ему будет не хватать просто аццки, т.к. это повлияет уже на архитектуру. Когда программист с Фортрана переходит на Си, то возможность реализовать рекурсивный по своей природе алгоритм без лишних извращений будет для него полезной дополнительной фенечкой - он воспримет её как "сахар", хотя понятно, что возможность рекурсии в языке зависит от семантики. Точно также, когда закалённый языком VB/C++/Delphi/Java программист переходит на Haskell, он будет считать, что... (цитирую из другого топика):
хаскелевские моноиды, функторы и монады остаются абстракциями, непонятно откуда взявшимися и для чего нужными.
Так что "a->b вместо (*a).b" - это просто синтаксис, а не синтаксический сахар. Перегрузка операторов - это "средство языка для введения сахара в свою программу", а не "сахар собственно языка". Пространство имён - это сахар (длинные идентификаторы разбиваются на зоны, разделяемые спец.символами).
Foreach - это семантическая абстракция, но закалённый языком Delphi программист смотрит на foreach как на сахар - т.е. на встроенный в компилятор "Iterator pattern". А если потребуется сказать нечто вроде "foreach что-то in foreach что-то ещё..." - то он будет смотреть на это либо как на Высочайшую Заумность, либо как на запутывание кода, чреватое скрытыми ошибками, хотя для любого нормального человека это обычная обработка множества.
Просто сравнивать язык, на котором Вами написаны сотни тысяч строк в реальных проектах, с языком, который Вы изучаете вторую неделю, -- это, на мой взгляд, не очень правильно.
Ошибаетесь. И держите своё личное мнение при себе, коли не можете подкрепить его формальным обоснованием. Я же так скажу - когнтивное обучение во много раз лучше, чем бихевиористское, и порождает специалистов, много более полезных для общества. У начинающего программиста, который, как выражаются вам подобные люди, "нахватался по верхушкам" всех основных известных семантик, мозг в последствии будет работать намного-пренамного более правильно в архитектурном смысле. Кругозор необходимо развивать сначала вширь, а лишь потом вглубь, и ни в коем случае не наоборот. "
Мозг, хорошо устроенный, стоит больше, чем мозг, хорошо наполненный" - (с) Мишель де Монтень. Если угодно, могу привести целую коллекцию высказываний известных личностей на эту тему, у меня под рукой (не из желания превратить беседу в перекидывание цитатами "авторитетов", а просто в наставление - распечатаете и приклеите возле монитора, а ещё лучше прямо на него).
Программирование - есть построение виртуальных систем как иерархии абстракций (ну да, 99% этих абстракций требует математического обоснования, но нельзя путать причину со следствием), а оценить язык на абстрактность и соответствование требованиям системологии можно ТОЛЬКО интуитивно при поверхностном ознакомлении. В последствии же у человека выстраивается сложная система каузальных ментальных моделей, что формирует устойчивую систему ошибочных знаний. Кроме того, лень приводит к тому, что желание видеть достоинства затмевает способность видеть недостатки. Так что суждение о С++ от матёрого программиста на С++ куда менее ценно, чем суждение о нём начинающего программиста с малым опытом разработки, но зато знакомого в равной степени с языками Scheme, SML, Forth, Рефал, Prolog и Smalltalk.
То есть, функция должна наследоваться от (скорее всего абстрактного) класса "функция", интеграл будет принимать этот класс и (возможно) класс параметров и области определения. Уверяю Вас, глубоко внутри ФЯП это всё именно так и реализовано.
Картинка из
ТРИЗ:
Вдумайтесь.
У большинства критиков С++ даже Design & Evolution не читан.
Дык именно ЭВОЛЮЦИЯ языка как раз и является его главной корявостью. Хороший язык - тот, который в развитии не нуждается, т.к. любые новые веяния времени легко реализуются его собственными средствами в виде библиотек.
Ну и в целом, с распараллеливанием насколько я знаю у функциональных языков пока что всё довольно грустно. То есть если речь заходит о неприятных вещах вроде раскидывания матриц по процессорам, они тут точно так же не справляются как и "обычные" языки. А писать низкоуровневые вещи на них сложнее.
Это что, попытка отыскать "универсальный" язык?
Более того, он уже спрятан в буст. Несколько коряво (в рамках не самого идеального синтаксиса не самого идеального для этой цели языка), но спрятан же.
Одним из ключевых недостатков С++ является как раз то, что при желании абстракность любого кода можно легко нарушить. Неудивительно, что индусокодеры именно это в первую очередь и делают.
Потому что критерии наглядности очень зависят от привычки.
Наоборот, наглядность в программировании - это когда наглядно даже для малоопытного программиста. Оно же - "самодокументируемость".
Просто обсуждать плохость одного из самых распространённых языков программирования "вообще" мне кажется несколько странным.
Вы намекаете, что миллионы леммингов не могут ошибаться?
"
Заблуждение не перестаёт быть заблуждением оттого, что большинство разделяет его" (с) Лев Толстой.
У Вас "любители синтаксического сахара" -- это просто ругательство какое-то. А этих любителей, на самом деле, подавляющее большинство :).
Ну да - людей, способных мыслить системно, очень немного. Большинство - тупицы.