Форум программистов, компьютерный форум, киберфорум
F# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Пора на C++?
 Аватар для TrickyBestia
370 / 264 / 99
Регистрация: 10.04.2020
Сообщений: 1,275

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

06.08.2020, 16:30. Показов 49288. Ответов 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
14727 / 9497 / 1362
Регистрация: 21.01.2016
Сообщений: 35,819
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
5164 / 3523 / 536
Регистрация: 01.06.2013
Сообщений: 7,674
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru