Здравствуйте, VladD2, Вы писали:
VD>Тут завелся сайт суть которого сравнения разных вещей (например, теплого с мягким). VD>Там завели тему Nemerle vs. F#: VD>http://versusit.ru/viewtopic.php?pid=67441
VD>Кто хочет может поражаться за правое дело .
Влад, ты лучше скажи, когда добавите параметрический полиморфизм (параметризация генериков) для типа void? В F# это есть Там используется что-то типа FakeVoid, но делается это совершенно прозрачно для программера. Все это нужно для полноценного использования ComputationExpressions.
Здравствуйте, VladD2, Вы писали:
VD>Тут завелся сайт суть которого сравнения разных вещей (например, теплого с мягким). VD>Там завели тему Nemerle vs. F#: VD>http://versusit.ru/viewtopic.php?pid=67441 VD>Кто хочет может поражаться за правое дело .
Первое же сообщение темы достаточно бредовое. F# никакой не "чистый функциональный", а такой же гибридный, как и Немерле. Да и вообще они весьма похожи, ибо оба сильно завязаны на дотнетную систему типов. Обо что там в F# можно "разломать мозг"? Меня вообще поражает интертность некоторых товарищей. ML-ный синтаксис в действительности *проще*, чем Си-подобный. Он правда проще Чтобы в нем разобраться, нужен час. И из-за этого люди "ломают мозг"?
Здравствуйте, Воронков Василий, Вы писали:
ВВ> Обо что там в F# можно "разломать мозг"?
Людям без математической подготовки карринг лучше не показывать, заболеют.
ВВ> Меня вообще поражает интертность некоторых товарищей. ML-ный синтаксис в действительности *проще*, чем Си-подобный. Он правда проще Чтобы в нем разобраться, нужен час. И из-за этого люди "ломают мозг"?
Большинство людей не мыслит в таких терминах. Для них все сводится к привычно/не привычно. Собственно, большинство людей не мыслит вообще — разум им заменяет дрессировка, и потому вопрос привычности имеет первостепенное значение.
Здравствуйте, Аноним, Вы писали:
ВВ>> Обо что там в F# можно "разломать мозг"? А> Людям без математической подготовки карринг лучше не показывать, заболеют.
Я как-то слабо вижу здесь связь с математической подготовкой
ВВ>> Меня вообще поражает интертность некоторых товарищей. ML-ный синтаксис в действительности *проще*, чем Си-подобный. Он правда проще Чтобы в нем разобраться, нужен час. И из-за этого люди "ломают мозг"? А> Большинство людей не мыслит в таких терминах. Для них все сводится к привычно/не привычно. Собственно, большинство людей не мыслит вообще — разум им заменяет дрессировка, и потому вопрос привычности имеет первостепенное значение.
Видимо, такие люди вообще не будут изучать какой-либо язык программирования "просто из интереса". Вряд ли "привычный синтаксис" сильно поможет привлечь их к "непривычному языку".
Здравствуйте, dsorokin, Вы писали:
D>Влад, ты лучше скажи, когда добавите параметрический полиморфизм (параметризация генериков) для типа void?
В смысле чтобы можно было void в качестве параметра типов передавать? Скорее всего никогда (если, конечно, это в дотнете не реализует). Дотнет этого не позволяет, а делать фэйк только себе вредить.
D>В F# это есть
В нем много чего есть. От того его и не могут использовать большая часть дотнетчиков. Одна из исходных предпосылок в дизайне Nemerle — это чтобы Nemerle был родным в дотнете. И так хватает того, что в Nemerle есть вариантные типы и type котрых нет в дотнете. Усугоблять не стоит.
D>Там используется что-то типа FakeVoid, но делается это совершенно прозрачно для программера. Все это нужно для полноценного использования ComputationExpressions.
Использование подобной хрени нужно в очень редких случаях. Я его видел исплючительно в коде работающем с монадами. И наружу он не выставляется (вроде бы). Вот и пускай там сидит. Разве что можно его в стандартную библиотеку перенести (если он еще не там). А в язык интегрировать его не стоит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, VladD2, Вы писали:
VD>>Тут завелся сайт суть которого сравнения разных вещей (например, теплого с мягким). VD>>Там завели тему Nemerle vs. F#: VD>>http://versusit.ru/viewtopic.php?pid=67441 VD>>Кто хочет может поражаться за правое дело .
ВВ>Первое же сообщение темы достаточно бредовое. F# никакой не "чистый функциональный", а такой же гибридный, как и Немерле. Да и вообще они весьма похожи, ибо оба сильно завязаны на дотнетную систему типов.
Согласен. Но что ты тут то это пишешь? Это имеет смысл в ту тему писать.
ВВ>Обо что там в F# можно "разломать мозг"?
Да один синтаксис чего стоит? Это ты тренировался ML-щину читать пару лет. А остальным это на фиг не упало. Даже вызов без скобок (которых, правда, там не много) уже мозг взрывает. В F# подобной хрени пруд пруди.
ВВ>Меня вообще поражает интертность некоторых товарищей. ML-ный синтаксис в действительности *проще*, чем Си-подобный.
Для челочека проще то, что привычнее. Одно то, что в школе учат "сишному" синтаксису уже делает ML-ный синтаксис сложнее. Можешь хоть лоб разбить, но ничего не изменится.
ВВ>Он правда проще Чтобы в нем разобраться, нужен час. И из-за этого люди "ломают мозг"?
Я до сих пор теряю нить Хаскелевских программ где-то на десяткой строке. А я хоть какой-то опыт имею. Остальные, кто не ставил себе задачи во что бы то ни стало изучить ML-ный синтаксис, просто видят в нем кракозябры. Селяви.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Да один синтаксис чего стоит? Это ты тренировался ML-щину читать пару лет.
Практика показывает, что студентам хватает пары занятий. Правда, они хотя бы отборные, экзамены там всякие сдавали. Думать умеют, и все такое.
VD> Даже вызов без скобок (которых, правда, там не много) уже мозг взрывает.
Это же всего лишь математическая нотация. Кто знает лямбда-исчисление, тот поймет, а кто не знает, тому не стоит программировать.
VD>Для челочека проще то, что привычнее.
Для слабенького человека — да. Для умного проще то, что объективно проще (т.е., имеет более консистентную и компактную модель).
VD> Одно то, что в школе учат "сишному" синтаксису уже делает ML-ный синтаксис сложнее.
В школе вообще Паскалю учат до сих пор в большинстве случаев.
VD>Я до сих пор теряю нить Хаскелевских программ где-то на десяткой строке.
Здравствуйте, Аноним, Вы писали:
VD>>Да один синтаксис чего стоит? Это ты тренировался ML-щину читать пару лет.
А> Практика показывает, что студентам хватает пары занятий.
Практика показывает, что 85% студентов программистских специальностей не работает по професси. А те что работают или начинают учиться программированию параллельно обучению в вузах, или начинают делать это уже на работчем месте (за счет работодателя).
Это ваша практика ничего не показывает. Студенты и основную программу осваивают очень плохо, а разные изыски вроде ML просто походят мимо. Есть, конечно, отдельные исключения, но на то они и исключения.
Ну, на 99% программистов на сегодня имеет реальный опыт программирования на С-подобных языках или на Паскале-подобных.
А>Правда, они хотя бы отборные, экзамены там всякие сдавали. Думать умеют, и все такое.
Думать, в определенных объемах, умеет как минимум половина программистов. Но привычки есть привычки. После 5 лет программирвоания на C#/Java/C++ языки с синтаксисом ML даются крайне тяжело.
И вы можете говорить что угодно, но это банально противоречит реальной действительности.
Меж тем в МЛ есть не мало полезных фич (паттерн-матчинг, АлгТД). Куда проще встроить их в язык с привычным синтаксисом и не пытаться переломить привычки людей.
Опыт Немерла и Скалы показывает, что сам по себе ML-ый синтаксис на практике ничего не дает. Все те же возможности можно получить и в языках со скобочной нотацией.
VD>> Даже вызов без скобок (которых, правда, там не много) уже мозг взрывает.
А> Это же всего лишь математическая нотация.
Вранье. Я еще помню как хотил в школу. Там использовали скобки.
А>Кто знает лямбда-исчисление, тот поймет, а кто не знает, тому не стоит программировать.
Лямбда-исчисления? Это речь идет о теории Черча? Зачем она всем программистам? Программистам достаточно того что из этой теории проистекает. Например, появление лямбд в C# 3.0. Для использования C# 3.0 совершенно не нужно знать теорию Черча. Достаточно небольшой статьи и нескольких примеров.
VD>>Для челочека проще то, что привычнее.
А> Для слабенького человека — да. Для умного проще то, что объективно проще (т.е., имеет более консистентную и компактную модель).
Ну вы — возомнившие себя суперменами, когда напишите столько полезного кода как орды этих "слабеньких", тогда и обсудим вашу крутость и их слабость. А пока будем отталкиваться от того, что есть куча не самых тупых людей которые просто не привыкли к синтаксису ML-я и не хотят к нему привыкать.
VD>> Одно то, что в школе учат "сишному" синтаксису уже делает ML-ный синтаксис сложнее.
А> В школе вообще Паскалю учат до сих пор в большинстве случаев.
Я про уроки математике в 1-7 классах, а не про диковинные уроки информатики на которых преподают редкостную ересь.
В прочем, "Паскалевский синтаксис" — это тот же сишный синтаксис, так как там используются все те же скобки для вызова функций. Он не имеет координальных отличий. Простые смертные спокойно переобучаются с Паскаля на С и обратно. И в то же время плюются на ML-ый бесскобочный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, dsorokin, Вы писали:
VD>Использование подобной хрени нужно в очень редких случаях. Я его видел исплючительно в коде работающем с монадами. И наружу он не выставляется (вроде бы). Вот и пускай там сидит. Разве что можно его в стандартную библиотеку перенести (если он еще не там). А в язык интегрировать его не стоит.
Ну, вот. Такой облом. Это нужно не только для монад. Для полиморфных функций тоже. Фишка в том, что программисты на Немерле разницы большой не заметят. Просто void будет незаметно подменяться классом FakeVoid. Будет более логически законченная вещь — тип void будет приравнен к остальным типам. А C#-перы пусть мучаются
Re[5]: Мелкий холиварчик Nemerle vs. F#
От:
Аноним
Дата:
20.05.11 17:54
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Меж тем в МЛ есть не мало полезных фич (паттерн-матчинг, АлгТД). Куда проще встроить их в язык с привычным синтаксисом и не пытаться переломить привычки людей.
Самая полезная фича ML — карринг. А для нее лучше все же безскобочный синтаксис.
Да и ну их всех на фиг, людей, зависимых от привычек. От негибких умов пользы мало.
VD>Опыт Немерла и Скалы показывает, что сам по себе ML-ый синтаксис на практике ничего не дает. Все те же возможности можно получить и в языках со скобочной нотацией.
Карринг!
VD>Вранье. Я еще помню как хотил в школу. Там использовали скобки.
А что, в школе математику учат? Экая новость!
VD>Лямбда-исчисления? Это речь идет о теории Черча? Зачем она всем программистам? Программистам достаточно того что из этой теории проистекает. Например, появление лямбд в C# 3.0. Для использования C# 3.0 совершенно не нужно знать теорию Черча. Достаточно небольшой статьи и нескольких примеров.
Для программирования вообще надо знать значительную часть дискретки. В том числе и самые основы — лямбда-исчисление, комбинаторную логику, Марковские алгорифмы, машину Тьюринга, и т.п.
Я не могу себе представить, как можно браться за программирование без этих базовых знаний.
Здравствуйте, <Аноним>, Вы писали:
А> Самая полезная фича ML — карринг. А для нее лучше все же безскобочный синтаксис.
Карринг не нужен.
По сравнению с немерловым подходом он ничего не дает и при этом мешает перегрузке.
Что сразу приводит к невозможности использовать библиотеки .НЕТ.
Ну и нафига козе баян?
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Аноним, Вы писали:
А> Самая полезная фича ML — карринг.
Это полная чушь. Карринг не более чем одна из возможных реализаций идеи частичного применения функций. Тот факт, что в том же немеле (и похоже в Скале) есть частичное применение функций, но нет карринага уже опровергает твое утверждение.
Далее обсуждать просто не чего.
А> Да и ну их всех на фиг, людей, зависимых от привычек. От негибких умов пользы мало.
Мы поступим проще. Пошлем на фиг тех кого меньше и кто безапелляционно несет полную чушь.
А> А что, в школе математику учат? Экая новость!
А ты в нее не ходил? Или забыл, что ли? Я тебе напомню. В первом классе проходят арифметику. Где-то класса с 4-го функции и т.п. Вот там скобки и вылезают. А привычка с 4-го класса — это очень сильная привычка. Для многих не преодолимая.
А> Для программирования вообще надо знать значительную часть дискретки.
Гы-гы. Расскажи это тем кто пишет сайты и автоматизирует учет на предприятиях. А из где-то 90% у нас в стране.
А>В том числе и самые основы — лямбда-исчисление, комбинаторную логику, Марковские алгорифмы, машину Тьюринга, и т.п. А> Я не могу себе представить, как можно браться за программирование без этих базовых знаний.
А что тут представлять то? Даже те кто это когда-то знал (а большая часть тупо проспали это в универах) забывает всю эту заумную муру где-то через 5-10 лет работы в областях где она не нужна. А таких областей большинство.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Аноним, Вы писали:
А> Большинство людей не мыслит в таких терминах. Для них все сводится к привычно/не привычно. Собственно, большинство людей не мыслит вообще — разум им заменяет дрессировка, и потому вопрос привычности имеет первостепенное значение.
дрессированные немерлисты?
все люди разные [в контексте программирования]. В чём-то у вас лучше, в чём-то у другого, при одном уровне. кто-то известный сказал — "почему же вы так бедны, раз вы так умны". ничего личного, но определённый уровень типа хаскеля требует "определённый" склада ума.
как не все люди рождаются программистам, так и не все хаскелистами и тут нет зависимости от "привычно/не привычно". это конечно обучаемый навык но не всем так просто, как наверное Вам.
Здравствуйте, VladD2, Вы писали:
А>> Самая полезная фича ML — карринг. VD>Это полная чушь. Карринг не более чем одна из возможных реализаций идеи частичного применения функций. Тот факт, что в том же немеле (и похоже в Скале) есть частичное применение функций, но нет карринага уже опровергает твое утверждение.
Каррирование можно сделать на любом языке с замыканиями. А в Скале кстати можно сразу объявлять функции как каррированные. Это делается с помощью нотации def sum(x)(y) { ... }
Здравствуйте, WolfHound, Вы писали:
А>> Самая полезная фича ML — карринг. А для нее лучше все же безскобочный синтаксис. WH>Карринг не нужен. WH>По сравнению с немерловым подходом он ничего не дает и при этом мешает перегрузке. WH>Что сразу приводит к невозможности использовать библиотеки .НЕТ. WH>Ну и нафига козе баян?
Каррирование дает удобную форму для поинт-фри и для построения комбинаторов. Собственно, поинт-фри естественным образом проистекает из факта каррированности функций. Да и перегрузке по типу он не особо-то и мешает.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, <Аноним>, Вы писали:
А>> Самая полезная фича ML — карринг. А для нее лучше все же безскобочный синтаксис. WH>Карринг не нужен. WH>По сравнению с немерловым подходом он ничего не дает и при этом мешает перегрузке. WH>Что сразу приводит к невозможности использовать библиотеки .НЕТ. WH>Ну и нафига козе баян?
Наоборот, карринг чертовски полезен в F#. С помощью него легко строить потоковую обработку. Многие функции специально имеют такой порядок аргументов, чтобы удобнее было пользоваться каррингом. Одна из моих любимых фич F#. Получается очень функционально.
let makeClickable (n: IDiagramNode) (w: IObservable<UIElement option>) =
w |> Observable.filter Option.isSome
|> Observable.map Option.get
|> Observable.map (fun e -> e.MouseLeftButtonDown :> IObservable<_>)
|> Observable.concat
|> Observable.subscribe (fun e -> ...)
Здравствуйте, dsorokin, Вы писали:
D>Наоборот, карринг чертовски полезен в F#. С помощью него легко строить потоковую обработку. Многие функции специально имеют такой порядок аргументов, чтобы удобнее было пользоваться каррингом. Одна из моих любимых фич F#. Получается очень функционально.
Аналог не немерле: