Foggy Finder, посмотрел на тему с инкрементальными вычислениями, интересно. Так как я всё-таки ещё не могу сказать, что полностью уверенно чувствую себя в функциональном мире (специально изучать стал только 3 месяца назад), у меня всё же осталось ощущение, что я чего-то недопонял, хотя я уже начинаю привыкать к тому, что за всей кажущейся сложностью функциональных подходов всегда стоят до банальности простые вещи. Будьте любезны, поясните мне правильно ли я понял, что этот ишшуй, который вы скинули выше связан с реализацией эффективного виртуального DOM с помощью инкрементальных вычислений? И если так, то где можно получше ознакомиться с темой инкрементальных вычислений? Насколько сильно этот подход изменит для пользователя АПИ то, как он будет писать код? Правильно ли, что за их идеей стоит diff-инг простых структур данных и реализующийся с помощью него алгоритм поиска оптимального пути обновления структуры данных? Ограничен ли этот подход только мэпами или именованные кортежи (записи) тоже могут быть эффективно использованы в этом подходе? Вот я ещё нашёл реализацию Incremental для .NET https://github.com/fsprojects/Incremental.NET — я правильно понял, что этот подход можно использовать вообще для практически любых вычислений, а не только для виртуального DOM? В остальном я там ничего нового просто не увидел, обычные мэпы, байнды, как всегда много простых блоков, объединяющихся в очень изящные решения :)
Павел, есть два варианта:
1) Отдаёте HTML и JS в браузер, оттуда JS запрашивает данные — PHP отдаёт (например в формате JSON) не важно из кода, из базы данных или из текстового файла
2) PHP запрашивает данные, опять же, не важно откуда, и отдаёт уже сгенерированный HTML со всеми данными. В этом случае сортировку надо делать на стороне сервера и на каждое изменение селекта отсылать новый запрос.
Сергей Горностаев, согласен, конечно. Бездумное использование инструмента не несёт ничего хорошего. Но я сравнивал ФП с ООП, а не императивным подходом. Если перформанс — важный критерий, то естественным будет задуматься об использовании императивного языка. Но таких задач значительно меньше.
Евгений Ромашкан, я понимаю, что приведённая мною информация — это моё мнение. Я всё-таки не статью писал и не претендовал на истину в последней инстанции, так что могу позволить неточность. Есть, конечно, у классов и поведение, но в этом контексте расписывать всё это не имеет смысла, ведь спрашивалось мнение, а не точное описание.
Объект на каждый чих, вообще-то, считается хорошей практикой. А чрезмерное использование примитивных объектов называется «primitive obsession» и считается антипаттерном. Естественно, такой подход больше подходит для больших приложений, но суть от этого не меняется.
Foggy Finder, самое красивое на Xamarin.Forms для F#— это подход Elmish. Фреймворк Fabulous предоставляет эти функции. Это просто подкупило меня :) Сыровато, конечно, ещё, но очень элегантно и просто. Надеюсь, что люди поймут, что это гораздо более эффективный способ писать UI.
Foggy Finder, да, на Xamarin.Forms. Пока за мобилку не взялся, на этапе разработки АПИ, но не думаю, что будут какие-то проблемы. Всё-таки Xamarin существует давно и не завязан на F#. Ну и приложение не будет большим. Поддержка, конечно, не такая как у C#, но если не продвигать язык, то это и не изменится. Это ведь замкнутый круг. Ну и плюс, если нет библиотеки написанной специально для F#, всегда можно воспользоваться одной из ООП-библиотек для C# :)
sergeyiljin, есть классы. F# — объектно ориентированный. Но на первом месте функции, да. К нему применим термин functional-first. F# поощряет использование простых типов данных (кортежей, записей, списков, типов-сумм) и функций (точнее функциональное программирование это поощряет). Там где не нужны классы .NET вообще лучше обходиться без ОО стиля. Например, бизнес-логику можно очень красиво реализовать через записи (кортежи с названиями полей) и типы суммы (Discriminated Unions).
Вот очень классный блог, если хотите ознакомиться: https://fsharpforfunandprofit.com
Обратите внимание на Railway Oriented Programming — очень изящный подход к обработке ошибок, никаких try-catch-ей.
CapitanRoger, F# — майкрософтовский язык (хоть и опенсорс). По-сути функциональный брат C#. Так что ответ — несомненно. F# доступна вся инфраструктура .NET и .NET Core. На нём и мобильные приложения писать можно. Я вот сейчас реализую проект, состоящий из АПИ, мобильного приложения и сайта полностью на F#.