Здравствуйте, anastassia, Вы писали:
A>Профессионалы! Выскажетесь!!! Кто с CAML знаком, чем плох, чем хорош, чем удобен, чем нет и т.д. Как он вообще среди функциональных — не самый же отсталый? Исключительно ваше мнение!!!
Конечно же далеко не самый отсталый: на соревнованиях по программированию окамлеры постоянно занимают первые места вместе с хаскеллерами. Недаром в Microsoft Research ведутся работы по развитию обоих этих языковых семейств — Хаскелл и F# (развитие Окамля).
Тут не зря так настойчиво рекомендуют F# — плагин к Visual Studio для F# действительно очень удобен. Большая часть программ на Окамле должна работать на F# (без больших переделок)...
Здравствуйте, anastassia, Вы писали:
A>Профессионалы! Выскажетесь!!! Кто с CAML знаком, чем плох, чем хорош, чем удобен, чем нет и т.д. Как он вообще среди функциональных — не самый же отсталый? Исключительно ваше мнение!!!
Я в нем не проффесионал, но могу в общих чертах, тык сызыть...
Хорош тем что:
1. Совмещает в себе ООП и ФП (сокращения понятны?).
2. Статически типизированный.
3. Порождает довольно быстрый код, так как п.2 и без заскоков вроде Хаскелевской ленивости (в прочем, наверное есть варианты).
4. Как и все языки линейки ML поддерживает вывод типов, что позволяет писать программы почти не указывая типы явно (как на скриптах), но при этом получая надежный и быстрый код.
5. Очень безопасный язык. Запрещены многие вольности с типами допустимые даже в считающихся типобезопасными языках вроде Явы.
6. Как прямой потомок ML-я поддерживает сопоставление с образцом (pattern matching), что позволяет сщественно упростить решение многих задач. Например, разработку компиляторов.
7. Имеет мощьный препроцессор (на возглас "препроцессор — сакс!" надо отвечать "ламер, это же не С++-ный препроцессор") поволяющий менять синтаксис языка и создавать DSL-и (тут надо добавлять "это по научному, вам не понять...".
Плохо там:
1. Реализация ООП несколько урезанная и непривычная для тех кто изучал С++/Яву/Дельфи...
2. Статическая тмпизация излишне параноидальная. Это приводит к проблемам п. 1.
3. Вывод типов основан на алогоритме Хиндли/Миллера который требует уникальности всех идентификторов и не позволяет пергружать фукнции (создавать две фукнции с одним именем чтобы компилятор сам выбирал нужную).
4. Язык вообще очень непохож на классические ООЯ и вообще императивные языки (С, Паскаль...). Для привыкших к оным он выглядит как форменное издевательство. А если еще не понимать что такое сопоставление с образцом, то полный пипец получается.
5. Очень плохо поддерживает динамические действия (компонетный подход и т.п.).
6. Имеет очень аскетичные средства разработки (в основном поддержку в текстовых редакторах).
Отчасти некоторые проблемы решены в том самом F#.
Лично мое мнение — это проходной язык. Как и многие другие он много дал с научной точки зрения, но будущего за ним нет. Причем даже не потому, что он сам по себе плох, а потому, что его не примет программистское сообщество привыкшее к С-подобным языкам. Темболее, что языки вроде Scala и Nemerle скомуниздили у него все приемущества и устранили его недостатки. А языки вроде (да что уж там, "вроде"?) Хаскеля превзашли его с точки зрения дальнешего развития функционального подхода.
Однако Хаскель полнеший тормоз, а Scala, Nemerle и даже F# зависят от сред исполнения (Явы и .NET-а). А в области языков компилирующихся в родной код процессоров и обеспечивающих производительность сравнимую с С++ и при этом отлично поддерживающие ФП и неплохо поддериживающие ООП пожалуй больше языков и нет. По крайней мере это очень неплохой выбор.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>3. Вывод типов основан на алогоритме Хиндли/Миллера который требует уникальности всех идентификторов и не позволяет пергружать фукнции (создавать две фукнции с одним именем чтобы компилятор сам выбирал нужную).
Правильный вариант написания Hindley–Mil<b>n</b>er.
ой аж зачиталась))) вот там си частенько упоминался, меня собственно это и интересует- с++ в противопоставлении с Obj. CAML! Я так понимаю, последний конкретно эффективней))) Вы уж меня извините, я кроме си, делфи и ассемблера(одним глазом) в жизни-то ничего и не видела, вроде как недоросла еще до некоторых прог.выражений)))) Если не затруднит-это можно подоступнее объяснить?Буду крайне признательна
Здравствуйте, Gaperton, Вы писали:
G>Поставь вопрос шире. Зачем тебе это все надо? Экзамен, лаба, научная работа, развлечение, впечатление произвести, работу сделать. Опиши короче ситуацию.
ситуация-проще некуда, диплом защищать на след.неделе, там один дядечка вредный будет, может всяких вопросов назадавать, вот и интересуюсь у людей умных и продвинутых))) Интересует меня противопоставление императивные-функциональные языки( на примере си++ и кэмла).
Здравствуйте, anastassia, Вы писали:
A>ой аж зачиталась))) вот там си частенько упоминался, меня собственно это и интересует- с++ в противопоставлении с Obj. CAML! Я так понимаю, последний конкретно эффективней)))
Ага, эффективнее для программиста. По скорости работы программы, скорее, OCaml чуть-чуть проигрывает C++. Но как правило, это ничего не значит, т.к. на C++ очень тяжело делать нормальную высокоуровневую оптимизацию, а на ML-подобных языках это делается в два касания.
A> Вы уж меня извините, я кроме си, делфи и ассемблера(одним глазом) в жизни-то ничего и не видела, вроде как недоросла еще до некоторых прог.выражений)))) Если не затруднит-это можно подоступнее объяснить?Буду крайне признательна
А Dам, барышня, обязательно ОКамл нужен? Дело в том, что ОКамл — язык, производный от ML. Но существует много языков, которые так или иначе вобрали в себя фичи ML. Например, Nemerle или Хаскель. Если Вам хочется увидеть "как выглядит ОКамл", то не обязательно смотреть на ОКамл. Достаточно поглядеть на Nemerle или Хаскель. Тут на сайте как раз недавно пару хороших статей с примерами по этим языкам выложили.
K>А Dам, барышня, обязательно ОКамл нужен? Дело в том, что ОКамл — язык, производный от ML. Но существует много языков, которые так или иначе вобрали в себя фичи ML. Например, Nemerle или Хаскель. Если Вам хочется увидеть "как выглядит ОКамл", то не обязательно смотреть на ОКамл. Достаточно поглядеть на Nemerle или Хаскель. Тут на сайте как раз недавно пару хороших статей с примерами по этим языкам выложили.
Да вот нельзя другого...Как-то все на этом кэмле завязалось )) На окэмл я уже поглядела)))по-моему мы друг другу не понравились Но это не страшно, мне всего-то один раз надо рассказать какой это прекрасный язык и что ну никак без него нельзя))) Что от metalanguage-то знаю, как раз весь диплом об этом, но пример надо именно на кэмле и на си(одну и ту же сортировку), вроде как посмотрите-сравните, как все красиво!
а почему, собственно, все так шугаются от него в сторону Nemerle или Хаскеля?
Здравствуйте, VladD2, Вы писали:
VD2> Однако Хаскель полнеший тормоз...
Как ты любишь повторять, это зависит... :о)
Можно провести простейшие тесты, в которых анализатор строгости в Хаскелле позволяет сгенерировать более быстрый код, чем даже в Си (пример — функция Аккермана).
VD2> А в области языков компилирующихся в родной код процессоров и обеспечивающих производительность сравнимую с С++ и при этом отлично поддерживающие ФП и неплохо поддериживающие ООП пожалуй больше языков и нет.
Ну, можно привести в пример Common Lisp и Scheme, в которых есть отличная поддержка не только ФП, ООП и метапрограммирования, но и компиляторы, генерирующие нативный код не хуже (или ненамного хуже), чем у Си — Stalin, Bigloo, mzScheme, SBCL...
Здравствуйте, anastassia, Вы писали:
A>а почему, собственно, все так шугаются от него в сторону Nemerle или Хаскеля?
Просто, как бы это сказать... ОКамл чуть-чуть устарел. Хотя его новые реинкарнации — F# и Nemerle — продолжают его дело (грязное иперативное ООПное дело), но тем не менее, самые новые разработки в области информатики (Computer Science) сейчас крутяться именно вокруг Хаскелла — потому Хаскелл так и интересен.
Немерлёй же тут (на данном конкретном форуме) увлекаются, так как это язык, нахватавший всяких разных фишек из кучи разных языков — ФП, ООП, метапрограммирование. Ну прям новый статический Лисп с сишным синтаксисом... :о))
geniepro,
G>Просто, как бы это сказать... ОКамл чуть-чуть устарел.
Ну да, GADTs, dependent types и прочих высоких технологий нет — всё, можно ставить крест? Дело в том, что OCaml уникален — ему не нужен тяжёлый рантайм, статически типизирован с выводом типов, достаточно мощные типы для многих задач, и это может сыграть в его пользу. Какая-нибудь ниша всё равно найдётся.
И мне кажется, уже две type-лаборатории это чересчур. Одной в лице Хаскеля достаточно
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>И мне кажется, уже две type-лаборатории это чересчур. Одной в лице Хаскеля достаточно
Как ни крути, Окамл — уже type-лаборатория. Например, попробуй эмулировать полиморфные варианты на Хаскеле.
Или почитай, как народ извращается. У Окамла не такая уж простая система типов.
Здравствуйте, anastassia, Вы писали:
A>а почему, собственно, все так шугаются от него в сторону Nemerle или Хаскеля?
Просто чтобы доходчиво описать OCaml, понадобится время и литературно-педагогические способности. А по Хаскелю и по Немерле на сайте уже есть замечательные статьи. Я так понял, что нужно не разбираться в тонкостях OCaml, а в общих чертах представить себе, что это такое. Тогда вполне подойдут статьи о похожих языках: Функциональное программирование в Nemerle
palm mute,
LCR>>И мне кажется, уже две type-лаборатории это чересчур. Одной в лице Хаскеля достаточно PM>Как ни крути, Окамл — уже type-лаборатория. Например, попробуй эмулировать полиморфные варианты на Хаскеле.
Хм, если включить пересекающиеся классы типов, то одна и та же функция может принадлежать различным классам. В точности, как конструкторы у полиморфных вариантов... Надо попробовать.
В принципе согласен, да. Окамл не прост. Я с этим и не спорил, меня встревожила фраза "OCaml чуть чуть устарел" by geniepro. Подожду, может он ответит, что он имел ввиду под ней.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>В принципе согласен, да. Окамл не прост. Я с этим и не спорил, меня встревожила фраза "OCaml чуть чуть устарел" by geniepro. Подожду, может он ответит, что он имел ввиду под ней.
Здравствуйте, anastassia, Вы писали:
A>Здравствуйте, Gaperton, Вы писали:
G>>Поставь вопрос шире. Зачем тебе это все надо? Экзамен, лаба, научная работа, развлечение, впечатление произвести, работу сделать. Опиши короче ситуацию.
A>ситуация-проще некуда, диплом защищать на след.неделе, там один дядечка вредный будет, может всяких вопросов назадавать, вот и интересуюсь у людей умных и продвинутых))) Интересует меня противопоставление императивные-функциональные языки( на примере си++ и кэмла).
1) Забей. Пусть твой научный тебя защищает от дядьки.
2) Противопоставления никакого нет и быть не может — OCaml полноценный императивный ОО язык. ("Чистый" функциональный язык, о котором можно сказать, что он "распространен" — вообще один. Это Хаскель.) Наиболее существенные (принципиальные) отличия OCaml от С++, (синтаксис в рассчет не берем) — система типов Хиндли-Милнера (обращаем особенное внимание на параметрические типы — более гибкий параметрический полиморфизм), сопоставление с образцом (более гибкий ad-hoc полиморфизм), автоматическое управление памятью (сборка мусора), функции высокого порядка + замыкания.
Здравствуйте, geniepro, Вы писали:
VD2>> Однако Хаскель полнеший тормоз...
G>Как ты любишь повторять, это зависит... :о) G>Можно провести простейшие тесты, в которых анализатор строгости в Хаскелле позволяет сгенерировать более быстрый код, чем даже в Си (пример — функция Аккермана).
Что то не верится. Си всё таки считай ассемблер и есть.
Приведи, пожалуйста.