Информация об изменениях

Сообщение Re[5]: F#, вычисление дистанции между узлами дерева от 23.07.2019 14:42

Изменено 24.07.2019 9:39 Разраб

Re[5]: F#, вычисление дистанции между узлами дерева
Здравствуйте, zverjuga, Вы писали:

Z>Здравствуйте, varenikAA, Вы писали:


AA>>А описание без координат вообще лишено смысла?


Z>нет, почему же? если абстрагироваться, то это можно рассматривать как атрибут, который может быть применен к любым другим сущностям.


AA>>То что дискриминаторы идут друг под другом не значит, что они наследуют вышестоящих, они наследуют только базовый Point.


Z>я это прекрасно понимаю. дискриминанты можно в какой то мере сравнить с объединениями из С++.


AA>>До F# на чем писали?


Z>Swift/C#, и до сих пор пишу.


Собственно, ФП позволяет усложнить (сложность сверх сложности самой задачи) код не хуже ООП.
Пишите о прогрессе в реальном проекте. А то, я пока не вижу особого смысла в F# окромя скриптинга,
хотя и в скриптинге полно хороших альтернатив — начиная от нативных lua, DLang, кончая всякими python, ruby, groovy.

Сила F#, что можно не покидая среды (.Net) C#-разработчику изучать новые приемы.
Настоящая сила F#, кроме красивого синтаксиса:
1. необходимость иметь объявление типа перед использованием, т.е. реализация строго последовательна — автоматически избавляет от проблемы циклических ссылок,
что является признаком плохого дизайна.
2. хвостовая рекурсия и куча функций вместо классов. Сахар, но очень приятный. Когда узнал, что в C# до сих пор нет хвостовой был в шоке.
3. Некоторые вещи красивые из коробки, на вскидку могу вспомнить async и MailboxProcessor — реализация неблокирующего асинхронного доступа к общему ресурсу.
4. слабоватая но все же возможность работать в REPL-режиме. Иногда доставляет удовольствие.

Есть и минусы:
1. нет частичного применения, хоть и пишут что есть, по мне это просто каррирование, т.к. каррировать можно только строго слева направо,
в отличие от Nemerle где частное реализовано полностью, т.е. можно def f1 (a, b, c) {} использовать как def f (a,c) = f1 (_ , 10, _)
и это будет работать, проверьте в F# такое возможно?
2. Пробовал перевести код из книги Дона Сайма на Nemerle — в местах где были указаны типв в F# в Nemerle указывать не пришлось. Кол-во примерно одинаковое.
3. Жестко зашита реализация, например, в записях — в Nemerle это опция.
4. Нельзя квотирование скомпилить в IL средствами стандартной библиотеки.
5. слишком много операторов утомляют, например:
1 |> (+) <| 2

— каков порядок вычислений?
тоже, что —
(+) 1 2

тоже, что —
1 + 2


Можно долго об этом рассуждать конечно, держите в курсе реализации своего проекта.
Re[5]: F#, вычисление дистанции между узлами дерева
Здравствуйте, zverjuga, Вы писали:

Z>Здравствуйте, varenikAA, Вы писали:


AA>>А описание без координат вообще лишено смысла?


Z>нет, почему же? если абстрагироваться, то это можно рассматривать как атрибут, который может быть применен к любым другим сущностям.


AA>>То что дискриминаторы идут друг под другом не значит, что они наследуют вышестоящих, они наследуют только базовый Point.


Z>я это прекрасно понимаю. дискриминанты можно в какой то мере сравнить с объединениями из С++.


AA>>До F# на чем писали?


Z>Swift/C#, и до сих пор пишу.


Собственно, ФП позволяет усложнить (сложность сверх сложности самой задачи) код не хуже ООП.
Пишите о прогрессе в реальном проекте. А то, я пока не вижу особого смысла в F# окромя скриптинга,
хотя и в скриптинге полно хороших альтернатив — начиная от нативных lua, DLang, кончая всякими python, ruby, groovy.

Сила F#, что можно не покидая среды (.Net) C#-разработчику изучать новые приемы.
Настоящая сила F#, кроме красивого синтаксиса:
1. необходимость иметь объявление типа перед использованием, т.е. реализация строго последовательна — автоматически избавляет от проблемы циклических ссылок,
что является признаком плохого дизайна.
2. хвостовая рекурсия и куча функций вместо классов. Сахар, но очень приятный. Когда узнал, что в C# до сих пор нет хвостовой был в шоке.
3. Некоторые вещи красивые из коробки, на вскидку могу вспомнить async и MailboxProcessor — реализация неблокирующего асинхронного доступа к общему ресурсу.
4. слабоватая но все же возможность работать в REPL-режиме. Иногда доставляет удовольствие.

Есть и минусы:
1. нет частичного применения, хоть и пишут что есть, по мне это просто каррирование, т.к. каррировать можно только строго слева направо,
в отличие от Nemerle где частное реализовано полностью, т.е. можно def f1 (a, b, c) {} использовать как def f = f1 (_ , 10, _)
и это будет работать, проверьте в F# такое возможно?
2. Пробовал перевести код из книги Дона Сайма на Nemerle — в местах где были указаны типв в F# в Nemerle указывать не пришлось. Кол-во примерно одинаковое.
3. Жестко зашита реализация, например, в записях — в Nemerle это опция.
4. Нельзя квотирование скомпилить в IL средствами стандартной библиотеки.
5. слишком много операторов утомляют, например:
1 |> (+) <| 2

— каков порядок вычислений?
тоже, что —
(+) 1 2

тоже, что —
1 + 2


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