> интерфейсы и сигнатуры это еще один черезжопный подход плюсанутого ООП.
Почему-то мне кажется, что ты не знаешь ничего о сигнатурах, реализованных когда-то для Си++, иначе не стал бы упоминать их в одном предложении с интерфейсами (имеются в виду интерфейсы в духе Java?).
Насколько я помню, вот это: "если добавить в лексикон интерфейсы можно выразиться по-точнее -- об этом заранее не позаботится создатель палки" - неверно для Си++-сигнатур.
ФЕЛОСОВСКИЙ ВАПРОЗ состоит не в том, каким ЕЗЫКОМ пользоваться, а ФТОМ, какие данные нужно обрабатывать.
Вот С, например, изумительно хорош для обработки данных типа регистры-память-буфера, КАРОЧЕ, арифметика указателей.
Визуал Бейсик, опять же, нормально так позволяет делать вещи типа "окошко-списокфайлов-кнопки-окей-кэнсел".
LISP, aka List Processor, хех, достаточно сказано ;)
Perl : Паталогически-Эклектичный (всякой фигни) Распечатчик - тоже понятно.
Супер-пупер-фсе-есть-объект-язык : Для производства конструкций типа "Мой_объект.Квартира.Дверь.Замок.Ключ.Вставить.ОткрытьКем( Ялюбимый ) Зашибись матмодель, но так жить нельзя.
Внимание, вопрос на засыпку: для каких данных предназначен Хаскел?
Посмотрел я на Хаскелл. Язык интересный, может быть мощный, достаточно красивый. Но вот лично мнение, что он в промышленных масштабах не приемлем. Не знаю даже, почему у меня такое мнение сложилось. Побаловаться с ним - да, какую-нибудь интересную фишку написать - да, в конце концов повыпендриваться перед сверстниками, чтобы у них глаза на жопу полезли, мол "Я Хаскелл знаю и умею на нем программить" - это тоже да. А так - может он в будущем и будет популярен, но мне в это не вериться.
Тем более он существует уже достаточно давно. Вообще само ФП существует очень давно, а до сих пор в массы не пробилось.
ФП похоже на латынь. Вроде есть такой язык, а мало кто на нем разговаривает, хотя и очень красивый, выразительный и развитый, но латынь - язык для малых кругов.
Мне кстати заняться сейчас особо нечем и я просто так перевожу разные доки, правда только для себя. Если есть нитересная книжка по Хаскеллу или Лиспу на английском языке - присылайте.
> Слышал, язык хороший, но что в нем такого, чего нельзя со сравнимыми трудозатратами реализовать на языках таких как питон, джава и С++?
Учебный пример подойдёт?
Числа Хемминга:
hemmings = 1 : unfoldr generator (map (\n -> map (n*) hemmings) [2,3,5]) where generator xss = let x = minimum (map head xss) in Just (x,map (dropWhile (x==)) xss)
Теперь hammings - бесконечный список, содержащиё все числа Хемминга. Скорость вычисления N-го числа - линейна, скорость вычисления N-го при условии, что все предыдущие уже вычислены - константа.
И надо учесть, что эту конструкцию я написал "с листа", а не упрощая предыдущую запись - потому что для знающего язык она почти очевидна.
> Слышал, язык хороший, но что в нем такого, чего нельзя со сравнимыми трудозатратами реализовать на языках таких как питон, джава и С++?
Аналог того же Xilinx Lava на C++ потребовал бы в сотни раз больше усилий на реализацию, и качество этой реализации, скорее всего, оставляло бы желать лучшего.
> Но вот лично мнение, что он в промышленных масштабах не приемлем.
Опоздал. Именно в промышленности он наиболее и применим. В околоайтишной быдловозне - сайтишки сраные, бухгалтеришка убогая, игрушки быдловские - не особо применим, а вот в таких задачах, как оптимизация и верификация микросхем - применяют, и очень даже.
> Вообще само ФП существует очень давно, а до сих пор в массы не пробилось.
В массы много чего не пробилось. Так ведь массы - это серое говно. Тупицы. Средний IQ человечества - 100 единиц, блин. Это ж близко к дебилизму!
> ФП похоже на латынь. Вроде есть такой язык, а мало кто на нем разговаривает,
На ФП рагзоваривают ВСЕ математики, даже те, кто об этом и не подозревает. А только математики и способны решать задачи, все остальные - максимум могут комбинировать пару сотен зазубренных типовых решений. Соответственно, интерес для промышленности может представлять в первую очередь инструмент, рассчитанный на умных и производительных людей - на математиков, и только потом уже - инструменты для обезьянок, для тех, кто мыслит не как математики.
> ФП похоже на латынь. Вроде есть такой язык, а мало кто на нем разговаривает, хотя и очень красивый, выразительный и развитый
+1
Любиетлям Хаскеля рекомендую статью "Confessions of a Used Programming Languages Salesman: Getting the Masses Hooked on Haskell" - о том, как многие годы Хаскель пытались протолкнуть в массовое программирование, а получилось из этого расширение для Visual Basic 8)
Да не надо ничего проталкивать в жвачные быдломассы. Они, быдломассы, сами по себе вообще не нужны - они не креативны, они не способны создать ничего серьёзного. Зачем давать им инструмент, которым им не хватит ума воспользоваться по назначению?
> Да не надо ничего проталкивать в жвачные быдломассы.
А я рад, что не все любители Хаскеля так считают :-P
> Зачем давать им инструмент, которым им не хватит ума воспользоваться по назначению?
Чтобы гарантировать живучесть и развитие инструмента. Чтобы создать больше интересных предложений на рынке труда (хотя тебе в Китеж-сити это неинтересно :D)
> Чтобы гарантировать живучесть и развитие инструмента
Пример C++ и Java, да и даже Basic доказал, что это гарантирует превращение инструмента в адскую помойку.
Разработчики начинают идти на поводу массового потребителя, и инструмент разлагается до уровня этого самого потребителя со всей неизбежностью. Я удивляюсь, как до сих пор Питон и Руби держатся...
> Чтобы создать больше интересных предложений на рынке труда (хотя тебе в Китеж-сити это неинтересно :D)
Зачем предложения на рынке труда? Зачем армии дворников, вооруженных лопатами с турбонаддувом, когда достаточно одной снегоуборочной машины с пьяным водителем дядей Васей?
>>ведь классическая математика вообще не заморачивается проблемами существования и времени.
>это как?
ну вот так:
> эээ... "сожженая бумажка"? угадал? что у нас "сжигаем (x)" возвращает?
а почему действие должно что-то возвращать? почему считается, что мир можно описать используя лишь функциональные связи? функциональные абстракции прикольны, т.к. обладают удобными свойствами. но при этом не стоит забывать, что это всего лишь -- теории, где реальность -- интерпретация.
в смысле реального "сжигания" между бумажкой и пеплом нет функциональной связи. (временнАя, причинно-следственная, -- какая угодно -- но не функциональная). (разумеется, для горения, можно выделить некоторые аспекты, которые, с достаточной степенью достоверности, можно описывать функциональными связями. но как выразить тот факт, что объект, бывший до того бумажкой, перестал существовать навечно, превратившись в пепел? и любые теоремы, основанные на том, что X - бумажка, будучи справедливыми некоторое время тому назад, сейчас уже не состоятельны?)
язык классической математики ограничен. удобен, поскольку позволяет создавать предсказуемые рассуждения. но ограничен. и в хаскеле существует монада State. и любая программа на хаскеле, отличная от хелло-воровых примеров пестрит do -> return. ведь одно из ключевых свойств реальности -- это изменчивость.
> и любая программа на хаскеле, отличная от хелло-воровых примеров пестрит do -> return.
Убей себя об стену. Монады (а равно и синтаксис do) используются ДАЛЕКО не только для эмуляции императивности. Например: монада Maybe используется для вычислений, которые могут прерваться; монада List - для вычислений, возвращающих не один результат; тот же Parsec, предназначенный для парсинга чего угодно, тоже является монадой.
сам дурак. :) я писал про do return в контексте State.
кста, отквоченная популярная реплика, по сути, -- монадическое высказывание! ) типа: "очень хочется тебя убить, но я на это не способен. поэтому делай собой что хочешь, но, в этом мире, ты мне нужен мертвым!".
собственно, иллюстрация того как (математический) хаскель меняет состояние мира: функциональные законы не могут менять мир, но мир может меняться по функциональным законам.
вот мне и кажется, что программирование в таком духе несколько противоестественно. в смысле, через жопу. ведь мир априорно изменчив, это должно быть аксиомой (в смысле логического базиса языка), а не исключением из правил. )
> но как выразить тот факт, что объект, бывший до того бумажкой, перестал существовать навечно, превратившись в пепел?
В этом случае создаётся ещё одна модель исходной ситуации, в которой весь контекст переопределяется в соответствии с тем фактом, что бумажка сожжена. С этого момента мы имеем дело с двумя моделями, в одной из которых бумажка константно цела, а в другой - константно сожжена. Соответственно, в одной модели будет действовать один набор законов, а в другой модели - другой набор. Именно в этом отношении математика безразлична ко времени, ибо она имеет дело лишь с отдельными моментами, каждый из которых абсолютно статичен.
Ещё пример: в бидоне было 10 литров воды, 3 литра выпили, сколько осталось? Опять же мы имеем дело не с одним, а с двумя бидонами.
> а как вообще выражается тот факт, что на некоем участке функция не существует?
математика оперирует только существующими фактами. если функция задана -- значит она существует. о "не существовании" речи быть не может. тут все немного иначе.
для функции задаётся множество возможных аргументов -- aka область определения (непрерывная или прерывная -- пофик). функция однозначно связывает каждое значение из области определения с неким "результатом". а попытка утверждать что-то о функции, вне области определения, -- это логическая ошибка. данное свойство часто используется в доказательствах.
> С этого момента мы имеем дело с двумя моделями ...
по индукции, это приведет к тому, что, в итоге, мы будем иметь дело со столькими моделями, сколько раз изменялось состояние мира в течении отслеживаемого промежутка времени. оккам бы от такого бардака в гробу побрился. )
нарушение целостности картины мира это зло полюбому. и зло функциональное, это не меньшее зло, чем зло ООП'шное (тут характерно представление разными объектами отдельных аспектов, одной и той же физической сущности или явления).
> Именно в этом отношении математика безразлична ко времени, ибо она имеет дело лишь с отдельными моментами, каждый из которых абсолютно статичен.
собственно об этом и речь. математика безразлична ко времени -- состоятельная интерпретация математических теорий относительно реального мира -- весьма ограничена. поэтому ждать, что функциональный подход совершит значимый прорыв, не стоит.