в чем соль F#?
Чем он принципиально отличается от имеющихся C# или VB#скажи мне кто я и скажу те кто ты
а чем принципиально отличаются C# и VB#?
а сейчас он разве не поддерживается официально?
Кстати, бемольные языки М-софт не планирует выпускать?
Кстати, бемольные языки М-софт не планирует выпускать?си-бемоль известен давно.
Не смотрел, что из себя представляет F# сейчас, но вообще это должен быть функциональный язык по типу SML или OCaml. Если ты не в курсе чем отличаются императивные (С#) и функциональные языки, почетай литературу.
F# круче C# или у него своя ниша? Формочки на нем писать удобнее или нет?
Формочки на нем писать удобнее или нет?В 2010той у F# проектов не будет дизайнера форм.
ну это как бы и есть окамль, только дотнет-стайл
http://a6systems.com/fsharpcheatsheet.pdf
Почти все фичи языка на 7 страницах.
Почти все фичи языка на 7 страницах.
F# круче C# или у него своя ниша?своя ниша.
всякие преобразования, логика и т.д.
а можно какой-нибудь утрированный и боянистый пример, по типу факториала?
а можно какой-нибудь утрированный и боянистый пример, по типу факториала?let rec factorial n =
if n=0 then 1 else n * factorial(n - 1);;
Да и я не про синтаксис языка спрашивал (в теме уже была ссылка на семь страниц хороших примеров а про его применение для решения логических штучек. Ну типа пример логической задачки и то как она легко и изящно в пять строк решается на F#. Какая-нибудь экспертная система? Или че-нить такое
let rec factorial n =По этому примеру не видно ни одного преимущества или недостатка F# перед C#. Все отличия - на уровне отличий фигурных скобок от паскалевских begin и end.
if n=0 then 1 else n * factorial(n - 1);;
спасибо, Капитан очевидность, что переписали еще раз мой пост
Пример красивой фичи - async workflows:
Помнится, на PDC был хороший рассказ про F# с убедительными и практичными примерами:
Пример красивой фичи - async workflows:ой
оно разными потоками выполняется
а зачем? чот не пойму смысла ...
и в каких местах может переключение потока произойти?
http://channel9.msdn.com/pdc2008/TL11/Круто!
а зачем? чот не пойму смысла ...Некоторые операции (тот же ввод-вывод, особенно сетевой) занимают много времени. Они доступны как в обычном синхронном виде (когда функция не возвращает управление, пока не выполнится так и в асинхронном - возвращают управление сразу, а когда операция будет выполнена, могут вызвать твою функцию. Так можно начать операцию и вернуть управление рантайму, не заставляя поток висеть в ожидании (количество потоков ограничено, и каждый жрет память). Поток вернется в пул свободных и может быть использован для других запросов. Так можно какбэ одновременно обрабатывать гораздо больше запросов, чем доступно потоков. Использовать асинхронные функции раньше было довольно неудобно, т.к. надо разбивать свой код на множество более мелких функций, которые будут вызываться по завершении асинхронных операций. Упомянутая фича F# позволяет писать код в простой последовательной манере, лишь помечая асинхронные вызовы, а компилятор сам превратит это в нужный набор функций с передачей всех необходимых данных.
там внутри тех функций тоже async что ли стоит?
типа эдакое дерево асинков получается?
или есть спец. команда типа yield которая переключение потока сделает?
Переключение произойдет неявно в месте с let!, например "let! rsp = req.GetResponseAsync".
В этом месте компилятор разобъет функцию на две - все, что до, и все, что после. Первая запустит асинхронную операцию и на этом завершится (тут поток может быть возвращен в пул вторая будет вызвана с результатом операции когда тот будет готов, возможно уже в другом потоке. Если у нас в исходной функции цепочка из N let!, то сгенерится N+1 функция, как я понял. Раньше надо было аккуратно писать все N+1 штук, поэтому этим мало кто заморачивался, поэтому аутлук в состоянии полного недеяния имеет полсотни активных потоков.
Я правильно понимаю, что мы без проблем тут можем писать однопоточный код, который делает все асинхронно и для этого не надо призывать злых духов?
Таков замысел, по крайней мере.
$.get("http://lala.com", function(data) {
alert(data);
$.post("http://lala.com/post", "some text", function(data2) {
alert(data2);
});
});
Ведь можно было бы довольно просто, не вылезая за рамки языка написать что-то типа
$.async(function {
data = $I.get("http://lala.com");
alert(data);
alert($I.post("http://lala.com/post", "some text";
})
Реализация этого будет не очень сложная и состоять в преобразовании текста функции из одного состояния в другое (благо js позволяет получить текст функции).
Оставить комментарий
NataNata
Вычитал, что в .net 4.0 микрософт добавляет еще один язык F#.Чем он принципиально отличается от имеющихся C# или VB#? Я что-то сходу, почитав доки, не сообразил.