Пора на C++?
 Аватар для TrickyBestia
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275

Зачем нужен F#?

06.08.2020, 16:30. Показов 49335. Ответов 131
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вы не подумайте, что я злодей. Просто зачем нужен F#, если есть C# или хотя-бы VB.NET, в которых возможностей больше?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.08.2020, 16:30
Ответы с готовыми решениями:

Зачем нужен using?
Пожалуйста подскажите зачем использовать слово using?например пот здесь: using (var reader = new StreamReader(filename))

Зачем нужен Path?
Для чего везде и всюду пихают Path в привязку свойств из DataContext? Вот славная цитатка Всё. Нафига везде пихают ...

Зачем нужен LINQ?
LINQ зачем нужен? Без него можно ли обойтись или вот обязательно понадобится базы данных писать:) Может кто и без этой примочки нормально...

131
Эксперт .NET
 Аватар для Usaga
14731 / 9507 / 1363
Регистрация: 21.01.2016
Сообщений: 35,857
19.09.2021, 09:34
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Curry Посмотреть сообщение
Тот же PS, по умолчанию, запрещён
Наверное имеется в виду именно исполнение скриптов. Сам PS не запрещён.
0
19.09.2021, 10:32

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
Наверное имеется в виду именно исполнение скриптов. Сам PS не запрещён.
Да. Из контекста разговора понятно.

0
 Аватар для sau
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
02.04.2022, 12:58
Как по мне . F# не может конкурировать с С# из-за отсутствия нативной поддержки основных технологий на базе NET , тот же WPF, грядущий MAUI , или новомодный Blazor , как бы есть костыли , или приходится писать часть на шарпах часть на F# , ну и ради чего эти страдания ? - сам язык то неплохой , но непрактичный.
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
02.04.2022, 23:21
Зачем нужен Блазор, если есть Болеро?
0
 Аватар для sau
2875 / 2080 / 386
Регистрация: 22.07.2011
Сообщений: 7,837
03.04.2022, 02:04
C#
1
2
3
4
5
6
7
8
9
override this.Render() =
        div [] [
            comp<MyComponent> [attr.ref myComponentRef] []
            button [
                on.click (fun _ -> myComponentRef.Value.Refresh())
            ] [
                text "Refresh my component!"
            ]
        ]
честно говоря . не знал про bolero , и , похоже . знать не хочу , ибо на это без слез не взглянешь )
0
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
03.04.2022, 13:37
Цитата Сообщение от sau Посмотреть сообщение
ибо на это без слез не взглянешь
Дело вкуса.

Цитата Сообщение от sau Посмотреть сообщение
честно говоря . не знал про bolero
Возможно, Вы и про SAFE не знаете?
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
29.05.2022, 16:47
Цитата Сообщение от sau Посмотреть сообщение
Как по мне . F# не может конкурировать с С# из-за отсутствия нативной поддержки основных технологий на базе NET
видимо именно изза отсуствия конкуреции в с# судрожно пытаются затащить все что только увидели в f#. пацаны стараются, но на их потуги с nullable и pattern-matching
без слез не взглянешь
а про чтото серезней так только в мечтах (эмуляция DU на c# вообще )
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
29.05.2022, 22:54
Цитата Сообщение от pycture Посмотреть сообщение
DU
Что это?
0
Модератор
 Аватар для Curry
5165 / 3527 / 536
Регистрация: 01.06.2013
Сообщений: 7,676
Записей в блоге: 9
29.05.2022, 23:04
Цитата Сообщение от korvin_ Посмотреть сообщение
Что это?
https://docs.microsoft.com/en-... ted-unions
1
8 / 8 / 0
Регистрация: 05.04.2025
Сообщений: 50
Записей в блоге: 6
06.04.2025, 16:01
Async в F# 1.x появился в 2007 году, в C# 4.5 в 2012 году.
Generics изначально были разработаны в F# с целью последующего переноса в C#.
C# изначально заточен под ООП, F# мультипарадигма.
Код на F# гораздо выразительней и корректней за счет явной строгой типизации.
Еще есть такая мелочь как требование объявления типов до их использования.
Отсюда автоматически запрещаются циклические ссылки между модулями и ускоряется компиляция.
Вывод типов, сообщения об ошибках. Ocaml синтаксис позволяет писать удобные DSL.
DSL позволяют писать код без необходимости в сложных инструментах наподопие xaml(вот например сейчас как раз столкнулся что превью авалонии(кроссплатформенный WPF) не работает под линуксом в vs code),html редакторов.
Вот в качестве примера реализация на F# алгоритма поиска из учебника Н. Вирта Алг и стр данных кажется.
Случайно заметил, что код получился заметно быстрее C# str.IndexOf (да у F# свой компилятор).

F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    module Text =
 
        /// поиск индекс первого вхождения образца в строке
        let findFirst (s: string) (p: string) =
            // предикат проверяющий совпадение части строки с образцом
            let eqSample i (s: string) (p: string) =
                let rec loop j =
                    if j < p.Length && p.[j] = s.[i + j] then
                        loop (j + 1)
                    else
                        j
                loop 0
 
            let rec loop i =
                if i <= s.Length - p.Length then
                    let dx = eqSample i s p
                    if dx = p.Length then i // нашли подстроку
                    else loop (i + dx + 1)
                else -1 // Возвращаем -1, если не найдено
            
            if p.Length > s.Length || p.Length = 0 
            then -1
            else loop 0
или вот этот код с C#(перестал работать в какой-то момент) был переписан на F# за полчаса и сразу заработал:
F#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
module TelegramWebApp =
 
    open System.Security.Cryptography
    open System.Text
    open System.Web
 
    let validateInitData botToken (initData: string) =
 
        let items =
            initData.Split "&" |> Array.map (fun x -> let p = x.Split("=") in (p[0], p[1]))
 
        let hashData = items |> Array.find (fun x -> fst x = "hash")
        let decode = HttpUtility.UrlDecode
 
        let xs =
            items
            |> Array.filter (fun x -> x <> hashData)
            |> Array.map (fun (k, v) -> $"{k}={(decode v)}")
            |> Array.sort
            |> String.concat "\n"
 
        let bytes (str: string) = Encoding.Default.GetBytes str
        let secret = HMACSHA256.HashData(bytes "WebAppData", bytes botToken)
 
        let hash (secret_key: byte array) (data: byte array) =
            HMACSHA256.HashData(secret_key, data)
            |> Array.map (fun b -> b.ToString("x2"))
            |> String.concat ""
 
        let origin = snd hashData
        let computed = hash secret (bytes xs)
 
        origin = computed
 
 
 
(*
 
test data from https://docs.telegram-mini-apps.com/platform/init-data
 
let botToken = "5768337691:AAH5YkoiEuPk8-FZa32hStHTqXiLPtAEhx8"
 
let initData =
    "query_id=AAHdF6IQAAAAAN0XohDhrOrc&user=%7B%22id%22%3A279058397%2C%22first_name%22%3A%22Vladislav%22%2C%22last_name%22%3A%22Kibenko%22%2C%22username%22%3A%22vdkfrost%22%2C%22language_code%22%3A%22ru%22%2C%22is_premium%22%3Atrue%7D&auth_date=1662771648&hash=c501b71e775f74ce10e377dea85a7ea24ecd640b223ea86dfe453e0eaed2e2b2"
 
let checkData = TelegramWebApp.validateInitData botToken
 
let valid = checkData initData
 
assert valid (* only in debug mode! *)
*)
Ну и мега-фича в том что F# получился очень неплох в REPL-DD то есть я могу писать функцию тут же ее выполнять в открытой сессии. после отладки можно копировать код в исходники или наоборот загружать исходники в REPL и там отлаживать, тестировать без необходимости компилировать весь проект - дебажить. Ну много еще всего. Тот же async выполнен технически более корректно по сравнению с C#.
3
Модератор
Эксперт функциональных языков программирования
3140 / 2288 / 469
Регистрация: 26.03.2015
Сообщений: 8,900
11.04.2025, 14:46
Цитата Сообщение от DevAlt Посмотреть сообщение
Еще есть такая мелочь как требование объявления типов до их использования.
Отсюда автоматически запрещаются циклические ссылки между модулями и ускоряется компиляция.
Однопроходной компилятор. Поэтому F# можно использовать как скриптовый язык.
1
8 / 8 / 0
Регистрация: 05.04.2025
Сообщений: 50
Записей в блоге: 6
02.05.2025, 07:09
Преимущество данного подхода независимость от средств ide. Проблема решается языковыми возможностями.
Синтаксис идеально подходит для описания списков, которыми и является по-сути UI. Ваш пример конечно не очень красив, есть реализации более красивые.
Тут больше вопрос психологии. Нужно преодолеть барьер незнания.
Часто это воспринимается нами как сложность, но освоив инструмент можно оценить его изящество и простоту.
Уже писал выше, REPL Driven Design это совсем другой мир. Вы не дебажите код, а просто реализуете продукт функция за функцией. И render это просто функция. Достаточно редактора исходного кода. Сравните это с подходом winforms/wpf/webforms.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.05.2025, 07:09

Зачем нужен EventHandler?
Дана задача добавить кнопку на форму только программным кодом Какую играет роль EventHandler в такой записи mnuExit.Click += new...

Зачем он нужен. ExecuteScalar();
Добрый всем. Может ли мне кто-нить обьяснить зачем нужна эта функция? Как я понял, она возвращает первое значение. Но ведь нужны...

Зачем нужен CancellationToken?
у CancellationTokenSource есть тот-же свойство IsCancellationRequested, и метод Cancel вызывается у CancellationTokenSource. Зачем они...

Зачем нужен кастинг?
Всем привет! Смотрю курсы c# для начинающих. Не могу понять, зачем нужен кастинг. Так зачем он нужен?

Зачем нужен модификатор out
Зачем нужен модификатор out, если можно подставить ref, присвоив переменным нули в начале... using System; class Decompose { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
132
Ответ Создать тему
Опции темы

Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru