F# - A Functional Programming Language
От: G2 Ниоткуда  
Дата: 18.10.07 07:03
Оценка:
This is one of the best things that has happened at Microsoft ever since we created Microsoft Research over 15 years ago. Here is another great example of technology transfer at work. We will be partnering with Don Syme and others in Microsoft Research to fully integrate the F# language into Visual Studio and continue innovating and evolving F#. In my mind, F# is another first-class programming language on the CLR.
Улыбаемся и машем :-)
Re: F# - A Functional Programming Language
От: Кодёнок  
Дата: 18.10.07 08:13
Оценка:
Кто-нить объяснит, зачем ml требует писать «let rec». Неужели и так не ясно, rec или не rec.
Re: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.10.07 09:13
Оценка: -2
Здравствуйте, G2, Вы писали:

G2>This is one of the best things that has happened at Microsoft ever since we created Microsoft Research over 15 years ago. Here is another great example of technology transfer at work. We will be partnering with Don Syme and others in Microsoft Research to fully integrate the F# language into Visual Studio and continue innovating and evolving F#. In my mind, F# is another first-class programming language on the CLR.


Проснулся милок?

Это новости уже лет пять.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 18.10.07 09:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это новости уже лет пять.


Эта как раз-таки свежая. Раньше развитием языка занимался фактически один человек, теперь MS решила повернуться к нему если не лицом, то уж хотя бы не задом, и предоставить больше ресурсов для развития (хотя, конечно, в мэйнстрим ему не попасть).

Кстати, F# здорово изменился за последнее время.
Re[2]: F# - A Functional Programming Language
От: G2 Ниоткуда  
Дата: 18.10.07 09:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это новости уже лет пять.


Что — то тогда долго они его интегрировали в VS.
Улыбаемся и машем :-)
Re[2]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 11:47
Оценка:
Здравствуйте, Кодёнок, Вы писали:


Кё>Кто-нить объяснит, зачем ml требует писать «let rec». Неужели и так не ясно, rec или не rec.

В ML следующий код создает 3 разные переменные foo:
let foo = 1
let _ = print_int foo (* печатает 1 *)

let foo = foo + 1
let _ = print_int foo (* печатает 2 *)

let foo = foo + 2
let _ = print_int foo (* печатает 4 *)
Re[3]: F# - A Functional Programming Language
От: Кодёнок  
Дата: 18.10.07 12:33
Оценка:
Здравствуйте, palm mute, Вы писали:

Кё>>Кто-нить объяснит, зачем ml требует писать «let rec». Неужели и так не ясно, rec или не rec.


я про рекурсивные функции
Re[4]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 13:17
Оценка: 12 (2)
Здравствуйте, Кодёнок, Вы писали:

Кё>Здравствуйте, palm mute, Вы писали:


Кё>>>Кто-нить объяснит, зачем ml требует писать «let rec». Неужели и так не ясно, rec или не rec.


Кё>я про рекурсивные функции

А что меняется? Функции — не функции — это неважно, все дело в видимости имен. Хорошо, изменим пример.

Теперь у нас будут 3 разных функции foo:
let foo () = 1
let _ = print_int (foo ())

let foo () = foo () + 1
let _ = print_int (foo ())

let foo () = foo () + 2
let _ = print_int (foo ())

Вывод этого кода такой же, как и в предыдущем случае.
Функция let foo () = foo () + 1 вызывает одноименную функцию foo, определенную выше. Функция let rec foo () = foo () + 1 вызывает сама себя.
Re[2]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 18.10.07 14:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Проснулся милок?

Ты как обычно по ссылкам не ходишь, милок? Вся соль в этом:

Somasegar, the head of the Developer Division at Microsoft, has announced the productization of F#.

Re[5]: F# - A Functional Programming Language
От: no4  
Дата: 18.10.07 14:41
Оценка:
Здравствуйте, palm mute, Вы писали:

Кё>>я про рекурсивные функции

PM>А что меняется? Функции — не функции — это неважно, все дело в видимости имен. Хорошо, изменим пример.

А в форте для этого было спецслово RECURSE — оно не декларировалось рекурсивным, а просто для того, чтобы позвать себя надо было писать RECURSE. Кстати, интересно, что в ML надо сделать, чтоб звать как себя так и предыдущий вариант одноименной функции?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 14:49
Оценка:
Здравствуйте, no4, Вы писали:

no4>Кстати, интересно, что в ML надо сделать, чтоб звать как себя так и предыдущий вариант одноименной функции?

перед определением рекурсивной функции старую переименовать:
let foo _ = ...
let foo_old = foo
let rec foo = ... (foo_old x) ... (foo y)


Хотя обычно такой проблемы не возникает, обычно все функции имеют различные имена. Потому Хаскелевский подход — все определения верхнего уровня обернуть в неявный letrec — вызывает меньше вопросов.
Re[2]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 15:14
Оценка: 7 (1)
Здравствуйте, Кодёнок, Вы писали:

Кё>Кто-нить объяснит, зачем ml требует писать «let rec». Неужели и так не ясно, rec или не rec.

Вот игрушечный интерпретатор ML-подобного языка. Обратите внимание, насколько по-разному обрабатываются конструкции let и letrec в энергичном языке.
В ленивом языке гораздо проще выбросить let и оставить только letrec, т.к. бОльшие классы рекурсивных значений имеют смысл. Если же компилятор будет автоматически выбирать между let и letrec, это усложнит и сделает непоследовательными правила поиска имен для обычных и функциональных значений.
type varname = string
type expr =
    Int of int                      |
    Bool of bool                    |
    Var of varname                  |
    Plus of expr * expr             |
    Mult of expr * expr             |
    Eq of expr * expr               |
    If of expr * expr * expr        |
    Lambda of varname * expr        |
    Application of expr * expr      |
    Let of varname *expr * expr     |
    LetRec of varname * expr * expr

type value = VInt of int | VBool of bool | VClosure of (value -> value)
type binding = varname * value
type environment = binding list

exception EvalError of string

let error msg = raise (EvalError msg)
let internal_error () = failwith "The world is upside down"

let lookup_var (var : varname) (env : environment) : value =
  try
    List.assoc var env
  with Not_found -> error ("Unbound variable " ^ var)


let rec eval (e : expr) (env : environment) : value = match e with
  | Int x    -> VInt x
  | Bool x   -> VBool x
  | Var name -> lookup_var name env
  | Plus (e1, e2) ->
        (match (eval e1 env, eval e2 env) with
           | (VInt x, VInt y) -> VInt (x+y)
           | _                -> error "Non-int in addition")
  | Mult (e1, e2) ->
        (match (eval e1 env, eval e2 env) with
           | (VInt x, VInt y) -> VInt (x*y)
           | _                -> error "Non-int in multiplication")
  | Eq (e1, e2) ->
        (match (eval e1 env, eval e2 env) with
           | (VInt x, VInt y) -> VBool (x==y)
           | _                -> error "Non-int in comparision")
  | If (cond, thenExpr, elseExpr) ->
        (match eval cond env with
           | VBool x   -> if x then eval thenExpr env
                               else eval elseExpr env
           | _         -> error "Non-boolean in conditional")
  | Lambda (var, body) ->
        VClosure (fun x -> eval body ((var, x)::env))
  | Application (func, arg) ->
        (match eval func env with
          | VClosure f -> f (eval arg env)
          | _          -> error "Non-function in application")
  | Let (var, value, body) ->
        eval body ((var, eval value env)::env)
  | LetRec (var, value, body) ->
        (match value with
           | Lambda _ ->
                 let rec new_env =
                   let rec func x = 
                     match eval value new_env with
                       | VClosure f -> f x
                       | _ -> internal_error ()
                   in ((var, VClosure func)::env)
                 in eval body new_env
           | _ -> error "Only functions are allowed on the right-hand side of letrec")

(*** tests *********************************)

(* fun n -> if n==0 then 1 else n * fact (n + (-1)) *)
let (factorial_body : expr) =
  (Lambda ("n",
           If (Eq (Var "n", Int 0),
               Int 1,
               (Mult (Var "n",
                      Application (Var "fact",
                                   Plus (Var "n", Int (-1))))))))


let tests =
  [
      (* let x = 5 in x + 4 *)
      Let ("x", Int 5, Plus (Var "x", Int 4));

      (* non-recursive function: let f = fun x -> x*2 in f 4 *)
      Let ("f", Lambda ("x", Mult (Var "x", Int 2)), Application (Var "f", Int 4));

      (* incorrect factorial *)
      Let ("fact", factorial_body, (Application (Var "fact", Int 5)));

      (* correct factorial *)
      LetRec ("fact", factorial_body, (Application (Var "fact", Int 5)));
  ]

let print_val = function
  | VInt n     -> print_int n
  | VBool b    -> print_string (if b then "true" else "false")
  | VClosure _ -> print_string "<function>"


let run_eval expr =
  try
    (print_val (eval expr []);
     print_endline "")
  with EvalError msg -> print_endline msg


let main () =  List.iter run_eval tests

let _ = main ()
Re[3]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 15:32
Оценка: :)
Здравствуйте, palm mute, Вы при обсуждении вопроса "зачем нужен rec" вставили в код лишний rec — иронично, не правда ли?:


PM>  | LetRec (var, value, body) ->
PM>        (match value with
PM>           | Lambda _ ->
PM>                 let rec new_env =
PM>                   let (* rec *) func x = (* здесь rec ни к чему *)
PM>                     match eval value new_env with
PM>                       | VClosure f -> f x
PM>                       | _ -> internal_error ()
PM>                   in ((var, VClosure func)::env)
PM>                 in eval body new_env
PM>           | _ -> error "Only functions are allowed on the right-hand side of letrec")
Re[3]: F# - A Functional Programming Language
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 18.10.07 16:55
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Вот игрушечный интерпретатор ML-подобного языка. Обратите внимание, насколько по-разному обрабатываются конструкции let и letrec в энергичном языке.

PM>В ленивом языке гораздо проще выбросить let и оставить только letrec, т.к. бОльшие классы рекурсивных значений имеют смысл. Если же компилятор будет автоматически выбирать между let и letrec, это усложнит и сделает непоследовательными правила поиска имен для обычных и функциональных значений.

Вот неужели трудно было сделать примитивнейшую оптимизацию, посчитав любой let за let rec, а потом автоматически выбросив rec у нерекурсивных (или у не взаимно рекурсивных) функций?
... << RSDN@Home 1.2.0 alpha rev. 710>>
Re[4]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 17:50
Оценка:
Здравствуйте, konsoletyper, Вы писали:

K>Вот неужели трудно было сделать примитивнейшую оптимизацию, посчитав любой let за let rec, а потом автоматически выбросив rec у нерекурсивных (или у не взаимно рекурсивных) функций?


let rec не имеет смысла для значений других типов (ОКамл позволяет создавать циклические структуры данных, но с жесткими ограничениями, справа от знака "=" не может быть вызовов функций, только конструкторы и значения, в SML, насколько я знаю, рекурсивными могут быть только функции).

Поэтому, если делать все функции автоматически рекурсивными, мы получаем разные правила поиска имен для функций и для "простых" значений:
let x = 1
let x = x + 5 (* здесь x справа от '=' ссылается на переменную x 
                 в области видимости, результат = 6 *)

let foo x = x 
let foo x = if x > 0 then x * foo (x-1) (* а здесь, по-твоему, должен быть рекурсивный вызов - 
                                           с какой стати? функции - это те же переменные,
                                           поиск имен должен работать однообразно независимо от типа *)
Re[5]: F# - A Functional Programming Language
От: palm mute  
Дата: 18.10.07 18:16
Оценка: 2 (1)
Здравствуйте, palm mute, Вы писали:

K>>Вот неужели трудно было сделать примитивнейшую оптимизацию, посчитав любой let за let rec, а потом автоматически выбросив rec у нерекурсивных (или у не взаимно рекурсивных) функций?


PM>let rec не имеет смысла для значений других типов (ОКамл позволяет создавать циклические структуры данных, но с жесткими ограничениями, справа от знака "=" не может быть вызовов функций, только конструкторы и значения, в SML, насколько я знаю, рекурсивными могут быть только функции).


Кроме того, не все функции являются синтаксическими функциями.
(* понять, что sum - это функция, можно только после вывода типов,
   который, естественно, делается уже при построенном AST. 
   различие между let и letrec - синтаксическое.
 *)
let sum = List.fold_left (+) 0 

(* а теперь представим себе следующую ситуацию *)
let foo f y z = ...

let bar = ...

let bar = foo bar (* какой bar здесь имеется в виду? bar - функция, но на основании 
                     одного лишь синтаксиса это определить невозможно *)


Таких проблем нет в C#, Java (или даже Nemerle), но там и конструкции let .. in нет.
В Хаскеле let .. in есть (а также есть where), но Haskell — ленивый.
Re[2]: F# - A Functional Programming Language
От: geniepro http://geniepro.livejournal.com/
Дата: 18.10.07 19:01
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Кто-нить объяснит, зачем ml требует писать «let rec». Неужели и так не ясно, rec или не rec.


Видимо, это традиция, пошедшая ещё с лиспов, где тоже есть let и letrec ...
Re[3]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.07 20:33
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Ты как обычно по ссылкам не ходишь, милок? Вся соль в этом:


Может быть. Просто интеграция у него была очень давно. Фиговая, првда.

EC>

EC>Somasegar, the head of the Developer Division at Microsoft, has announced the productization of F#.


Значение слоава "productization" от меня ускальзает. Это значит, что интеграция войдет в поставку студии? Или речь идет о том, что им банально дадут больше бабок?

В общем, в чем новость я так и не могу понять.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.10.07 07:34
Оценка:
Здравствуйте, G2, Вы писали:

G2>Что — то тогда долго они его интегрировали в VS.


Интеграция есть давно. Просто она... ну, говоря скромно, не очень хорошего качества.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.10.07 07:34
Оценка:
Здравствуйте, Schade, Вы писали:

S>Эта как раз-таки свежая. Раньше развитием языка занимался фактически один человек, теперь MS решила повернуться к нему если не лицом, то уж хотя бы не задом, и предоставить больше ресурсов для развития (хотя, конечно, в мэйнстрим ему не попасть).


Им и раньше не один человек занимался. К тому же эти люди были очень близки с реальными разработчиками из МС, напиример, с разработчиками из команды Шарпа. Вот только из тройки языков: Scala, Nemerle и F# последний является самым не проходным.

S>Кстати, F# здорово изменился за последнее время.


Что конкретно изменилось? И хорошо ли это?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.10.07 09:30
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Таких проблем нет в C#, Java (или даже Nemerle), но там и конструкции let .. in нет.


А нужна она? Она кроме всего прочего еще и не очень понятна простым смертным. Я не раз наблюдал как у людей заворачивались мозги когда они пытались разобраться в том, что значит этот let/in. Запись же в виде привычных переменных понятна всем и сразу.

То что фунции плохо отличимы от просто переменных тоже не здорово.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 20.10.07 15:45
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Может быть. Просто интеграция у него была очень давно. Фиговая, првда.

Что с ней не так? Или фиговей чем у чего?

VD>Значение слоава "productization" от меня ускальзает. Это значит, что интеграция войдет в поставку студии? Или речь идет о том, что им банально дадут больше бабок?

Станет таким же продуктом как VB, VC#, VC++ насколько я понял.
Официальную поддержку обещают точно.
Интеграция войдет в поставку студии, но уже после релиза 2008.

P.S. Какой статус интеграции Nemerle? Не хуже, чем у F#?
now playing: Submerged — Gutter (feat. Corrupt Souls)
Re[4]: F# - A Functional Programming Language
От: dotneter  
Дата: 22.10.07 06:26
Оценка: 3 (1) +2
Здравствуйте, VladD2, Вы писали:

VD>Им и раньше не один человек занимался. К тому же эти люди были очень близки с реальными разработчиками из МС, напиример, с разработчиками из команды Шарпа. Вот только из тройки языков: Scala, Nemerle и F# последний является самым не проходным.


Не проходным куда? На амазоне по нему можно например две книги найти в отличии от двух проходных.
Talk is cheap. Show me the code.
Re[5]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 10:16
Оценка:
Здравствуйте, dotneter, Вы писали:

VD>>Им и раньше не один человек занимался. К тому же эти люди были очень близки с реальными разработчиками из МС, напиример, с разработчиками из команды Шарпа. Вот только из тройки языков: Scala, Nemerle и F# последний является самым не проходным.


D>Не проходным куда? На амазоне по нему можно например две книги найти в отличии от двух проходных.


В мэйнстрим. Синтаксис и семантика ОКамла — это приговор для языка пытающегося стать популярным. Не будут (в массе своей) люди привыкшие к С/Паскале-подобному синтаксису ломать свое сознание и привыкать к МЛ-е подобному.

F# — это довольно прямолинейная адаптация ОКамла на дотнет, когда как Скала и Немерле — это новые языки взаимствовашие из МЛ-е подобных языков идеологию. В них все функциональные фичи адаптированны к ОО-миру дотнета/явы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 10:16
Оценка:
Здравствуйте, EvilChild, Вы писали:

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


VD>>Может быть. Просто интеграция у него была очень давно. Фиговая, првда.

EC>Что с ней не так?

Очень ограниченная по фунциональности (например, не было навигации по коду). И довольно глючная. Чуть-чуть код изменил... в нем появилась мелкая ошибка, и интеграция уже не работает.

EC>Или фиговей чем у чего?


В идеале, чем у C#/VB. Ну, а на худой конец чем у того же Немерле.

VD>>Значение слоава "productization" от меня ускальзает. Это значит, что интеграция войдет в поставку студии? Или речь идет о том, что им банально дадут больше бабок?

EC>Станет таким же продуктом как VB, VC#, VC++ насколько я понял.

А что в это понятие входит? Скажем интеграция для анменеджед C++ столь убогая, что ее пользователям не позавидуешь. Но с другой стороны VC++ входмт в коробку со студией и поддерживается (официально, за деньги) МС.

Судя по коментариям из этого блога в коробку F# точно не попадет. Официальной поддержки точже похоже не будет. Так что судьба его (похоже) будет срадни судьбе IronPithon-а, то есть МС к нему какое-то отношение имеет, но официально не поддерживает. По жизни это превращается в то, что IronPithon стал полегоном для груп разработки (например, менеджед обертки над VS SDK). Качество IronPithon низкое, интеграции для него еще ниже. Этого уровня F# уже достиг (его качество выше чем у IronPithon).

Так о чем тогда речь?

EC>Официальную поддержку обещают точно.


Где? Ни слова об этом не услышал.
Напмню, что официально поддерживать в МС означет, что ты можешь обратиться в сапорт МС и получить консультацию.

EC>Интеграция войдет в поставку студии, но уже после релиза 2008.


Не выдумавай. В коментах ниже четко и явно сказано, что этого не будет.

EC>P.S. Какой статус интеграции Nemerle? Не хуже, чем у F#?


Значительно лучше. Если бы у нас были деньги как у автора F#-а, и связи с группами разработчиков в МС, то мы достигли бы куда большего.

ЗЫ

У меня создалось устойчивое ощущение, что это удавшаяся пиар-акция. В жизни F# мало что изменяется, но благодаря громким расплывчатым фразам создается ощущение, что грядет масса изменений.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 11:02
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Станет таким же продуктом как VB, VC#, VC++ насколько я понял.

EC>Официальную поддержку обещают точно.

Вот, собственно, ответ на подобный вопрос:

# re: F# — A Functional Programming Language
Wednesday, October 17, 2007 5:03 PM by LukeH
Jordan —

No, F# won't be included in the box with Visual Studio 2008.

We have not finalized how or when we will ship the productized version of F#. We will, however, want to get community feedback during the development phase with CTPs and Beta releases that developers can try out along the way. You can watch Don Syme’s blog for updates as we have them.

Note that in the meantime, the Microsoft Research download of F# is available from http://research.microsoft.com/fsharp, and provides everything you need to learn more about F#.

Thanks,

Luke Hoban

... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: F# - A Functional Programming Language
От: G2 Ниоткуда  
Дата: 22.10.07 11:31
Оценка:
VD>No, F# won't be included in the box with Visual Studio 2008.

VD>We have not finalized how or when we will ship the productized version of F#. We will, however, want to get community feedback during the development phase with CTPs and Beta releases that developers can try out along the way. You can watch Don Syme’s blog for updates as we have them.


Тогда непонятно о каких

CTPs and Beta releases

идет речь.
Улыбаемся и машем :-)
Re[7]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 12:28
Оценка: +1
Здравствуйте, G2, Вы писали:

G2> Тогда непонятно о каких

CTPs and Beta releases

идет речь.


Как раз все очевидно. Все как было так и осталось. Релиза нет. Все используют CTP (т.е. Comunity Test Previw) и бэты которые качаются с сайта проекта.

Еще раз говорю, что лично мне пока что кажется, что это просто грамотный пиар. Из сказанного я могу сделать вывод, что вроде как к этой команде подключили несолько фултайм-девелоперов (профиссиональных, возможно индусов) которые будут развивать проект за зарплату. Ранее над проектом работал только один фултайм полу-ученый и несколько форфанов.

В принцпе для развития проекта — это очень полезно. Для Немерла такой вариант был бы идеален, так как идеологически язык закончен. F# же как раз технологически хорошо, а вот идеологически он никакой. Это ОКамл чуть-чуть адаптированный к дотнету. И никакие армии фултайм-девелоперов это не в состоянии изменить.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: F# - A Functional Programming Language
От: dotneter  
Дата: 22.10.07 12:56
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>В мэйнстрим.


Имхо если какой то NET язык станет мэйнстримом без поддержки MS это будет чудом. Поэтому шансы F# в разы выше чем у Nemerle.
Talk is cheap. Show me the code.
Re[8]: F# - A Functional Programming Language
От: nikov США http://www.linkedin.com/in/nikov
Дата: 22.10.07 13:09
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Еще раз говорю, что лично мне пока что кажется, что это просто грамотный пиар. Из сказанного я могу сделать вывод, что вроде как к этой команде подключили несолько фултайм-девелоперов (профиссиональных, возможно индусов) которые будут развивать проект за зарплату.


Мне кажется, что это не просто пиар. Нескольких моих знакомых (не индусов ) сейчас перебросили из C# compiler team на F#.
Re[8]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 22.10.07 13:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В принцпе для развития проекта — это очень полезно. Для Немерла такой вариант был бы идеален, так как идеологически язык закончен. F# же как раз технологически хорошо, а вот идеологически он никакой. Это ОКамл чуть-чуть адаптированный к дотнету. И никакие армии фултайм-девелоперов это не в состоянии изменить.


Да, в нынешнем своем состоянии F# представляет собой некоторую идеологическую кашу. Частично из-за того, что его модель не самым лучшим образом ложится на насквозь ООП-ную .NET VM. Частично — потому что пока что в порядке эксперимента в среде коммьюнити отрабатывается практичность и применимость многих новых фич. Если не передумают, то в процессе productisation эту кашу основательно побреют оккамовым бритвенным набором. Вполне возможно, что итоговый продукт будет разительно отличаться то того, что есть сейчас.

Что касается Nemerle, то тут наверное имеет смысл все-таки рассмотреть отдельно сам язык, отдельно его макросистему. Просто в силу того, что макросистема, при всех ее достоинствах, не прибита гвоздями к языку, и при желании ее можно как шапку натянуть хоть на Visual Basic (с соответствующей адаптацией, конечно). Ты же не сомневаешься, что MS, если сочтет целесообразным, не постесняется позаимствовать ее у Nemerle? Так вот, сам по себе Nemerle, без этой самой макросистемы, как мне кажется, представляет собой довольно осторожный шаг в сторону ФП. Возможно, соизмеримый с тем, чего планируется достигнуть в рамках эволюции C#, пусть даже и с заимствованием немерловых идей. F# все-таки более ориентирован на функциональный стиль программирования, пусть и ценой существенного отличия от мэйнстрима в синтаксисе, и, видимо, поэтому стал "более проходным" с точки зрения MS, поскольку в случае Nemerle получается некоторое дублирование.

И вообще, не так страшен OCaml, как он выглядит
Re[7]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 16:09
Оценка: -1
Здравствуйте, dotneter, Вы писали:

D>Имхо если какой то NET язык станет мэйнстримом без поддержки MS это будет чудом.


Это другой разговор.

D>Поэтому шансы F# в разы выше чем у Nemerle.


У F# шансов 0. Меньше уже быть не может.

Собственно о том и речь, что тратить деньги на заранее лузерский проект просто гулпо (как бы не было приятно квасить с его ватором по вечерам).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 16:09
Оценка:
Здравствуйте, nikov, Вы писали:

N>Мне кажется, что это не просто пиар. Нескольких моих знакомых (не индусов ) сейчас перебросили из C# compiler team на F#.


Вот так бы и написали. Зачем огород городить. Сказали бы, что команде дали бабки (и добро) на дополнительных фулайм-девелоперов. Это несомненно здорово для любого академического проекта. Вот только для F# — это как мертвому припарка. Язык приципиально академический. Ну, не будут писать на нем орды привыкших писать на С-подобных языках программистогв. Да и без реальной поддержки (пакладки в студию, подключения к МСДН) все эти потуги мало эффективны. А реакция на форуме как раз показывает, что народ ожидает именно этого.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.10.07 16:09
Оценка: -3
Здравствуйте, Schade, Вы писали:

S>Да, в нынешнем своем состоянии F# представляет собой некоторую идеологическую кашу. Частично из-за того, что его модель не самым лучшим образом ложится на насквозь ООП-ную .NET VM.


+1

S> Частично — потому что пока что в порядке эксперимента в среде коммьюнити отрабатывается практичность и применимость многих новых фич. Если не передумают, то в процессе productisation эту кашу основательно побреют оккамовым бритвенным набором.


+1

S> Вполне возможно, что итоговый продукт будет разительно отличаться то того, что есть сейчас.


А с чего должно получиться что-то хорошее? Ведь ОКамловские уши не убрать. А то что эти "продуктизайдеры" могут отрезать еще больше убьет язык, так как кастрированность в купе с явной врождебностью мэйнстриму не лучшее сочетание для языка претендующего на попрулярность.

S>Что касается Nemerle, то тут наверное имеет смысл все-таки рассмотреть отдельно сам язык, отдельно его макросистему. Просто в силу того, что макросистема, при всех ее достоинствах, не прибита гвоздями к языку, и при желании ее можно как шапку натянуть хоть на Visual Basic (с соответствующей адаптацией, конечно).


Это довольно делетанские рассуждения. Уж извини за резкость. Нельзя прикрутить систему макросов Немерле ни к Васику, ни к Шарпу. Вот к F#-му можно. Но тоже пол языка прийдется переделать. Уж точно всю реализацию компилятора прийдется поменять.

1. Немерле изначально проектировлася как язык поддерживающий расширяемость. В нем были задействованы все самые сильные фичи из МЛ-подобных языко и Лиспа. Немерле == целостное/интегрированное проектное решение нацеленное на решение задач входящих в его ТЗ (гибридного языка безшевно поддерживающего OOP, FP, GP и MP). Все решения принимавшиеся при развитии языка проходили анализ на соответствие исходным условиям. Так что прикрутить систему макросов к другому языку просто невозможно. Или в итоге получится другой язык который будет намного ближе к Немерле нежели к исходному.
2. Немерле — это не одна макросистема. Сам язык является очень большим шагом вперед в области бесшевной интеграции ООП и ФП. Nemerle не ОКамл или Хаскель который попытались с помощью автогена пришпандорить к дотнету. Немерле — это язык спроектированный под дотнет с учетом ФП. C#-программисты воспринимают Nemerle в сто раз проще нежели F#. Последний просто враждебен для них, а первый является эдаким суперсетом.

S>Ты же не сомневаешься, что MS, если сочтет целесообразным, не постесняется позаимствовать ее у Nemerle?


Пока что я не сомневаюсь, что среди тех кто принимает хоть какие-то решения в МС прос нет ни одного человека который бы всерьез разобрался бы в вопросе "что такое Немерле". Денег им на начальном этапе дали (как ротор-проекту) и на этом все и закончилось. Хейльсберг "не нашел документации на их сайте". Остальные просто не смотрели.

Так что я не сомневаюсь, что в МС просто не понимают, что такое Nemerle.

S> Так вот, сам по себе Nemerle, без этой самой макросистемы, как мне кажется, представляет собой довольно осторожный шаг в сторону ФП. Возможно, соизмеримый с тем, чего планируется достигнуть в рамках эволюции C#, пусть даже и с заимствованием немерловых идей.


В C# уже явно мло что може будет достигнуть. Сделано столько ошибок и столько не сделано (видимо из-за боязни), что эвалюционный путь уже фактически закрыт. По крайней мере репзультат будет сильно хуже специально спроектированного языка.

S> F# все-таки более ориентирован на функциональный стиль программирования, пусть и ценой существенного отличия от мэйнстрима в синтаксисе,


Это уже чистейшая инсинуация. F# не имеет ни одного приемущества перед Nemerle в области ФП.

S>и, видимо, поэтому стал "более проходным" с точки зрения MS, поскольку в случае Nemerle получается некоторое дублирование.


Он попросту не стал более проходным. Он вообще не проходной. Он — это тупик. Его заслугой может стать только то, что на него могут польститься люди из академических кругов которые уже сейчас используют ОКамл и им захочется иметь более-менее человеческую поддержку со стороны IDE или просто по каким-то соображениям нужно испоьзовать дотнет.

S>И вообще, не так страшен OCaml, как он выглядит


Он вообще не страшен. Он просто не пригоден для мэйнстрим-языка. Его синтаксис и сематика выглядят для большинства из мэйнстрима как некое недоразумение.

Проблем в том, что именно его разработчик имеет доступ к тем орлам из МС, что принимают решения. Вот и смог выбить бабок. Дайте мне бабок на 4-5 фултайм-разработчиков и через год про F# будут говорить как про недоразумение.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 22.10.07 20:06
Оценка: 2 (1) +1 -1 :))
Здравствуйте, VladD2, Вы писали:

VD>А с чего должно получиться что-то хорошее? Ведь ОКамловские уши не убрать. А то что эти "продуктизайдеры" могут отрезать еще больше убьет язык, так как кастрированность в купе с явной врождебностью мэйнстриму не лучшее сочетание для языка претендующего на попрулярность.


[offtop]И за что такая враждебность к Камлу? Правда, мсье Леруа принципиально забил на полноценную поддержку многопоточности (форкайте и будет вам щастье, а вне юникса щастья не бывает — это краткое обобщение его ответов), и тем, кажется, совсем добил свое детище. Жаль.[/offtop]
А вообще да, не удивлюсь, если в итоге все урежут до минимального набора "чтоб достать данные из базы да на формочку положить".

VD>Это довольно делетанские рассуждения. Уж извини за резкость. Нельзя прикрутить систему макросов Немерле ни к Васику, ни к Шарпу. Вот к F#-му можно. Но тоже пол языка прийдется переделать. Уж точно всю реализацию компилятора прийдется поменять.


VD>1. Немерле изначально проектировлася как язык поддерживающий расширяемость. В нем были задействованы все самые сильные фичи из МЛ-подобных языко и Лиспа. Немерле == целостное/интегрированное проектное решение нацеленное на решение задач входящих в его ТЗ (гибридного языка безшевно поддерживающего OOP, FP, GP и MP). Все решения принимавшиеся при развитии языка проходили анализ на соответствие исходным условиям. Так что прикрутить систему макросов к другому языку просто невозможно. Или в итоге получится другой язык который будет намного ближе к Немерле нежели к исходному.


Ну, я же не говорю про перенос модели макросов один-в-один. Хотя, надо бы посмотреть, что там поменялось в Немерле за последний год. Освежить, так сказать, вкус устриц, чтобы спорить о нем.

VD>2. Немерле — это не одна макросистема. Сам язык является очень большим шагом вперед в области бесшевной интеграции ООП и ФП. Nemerle не ОКамл или Хаскель который попытались с помощью автогена пришпандорить к дотнету. Немерле — это язык спроектированный под дотнет с учетом ФП. C#-программисты воспринимают Nemerle в сто раз проще нежели F#. Последний просто враждебен для них, а первый является эдаким суперсетом.


Ну, C# в самом начале тоже оказался враждебен для сиплюсплюсников (самый что ни на есть мэйнстрим для 2002 года), несмотря на близкий синтаксис. Многие вон до сих пор плюются и возмущаются. Зато дельфисты прыгали от радости. Те, для кого привычный синтаксис так уж важен, и писать будут как на C# (иногда с макросами).

VD>Пока что я не сомневаюсь, что среди тех кто принимает хоть какие-то решения в МС прос нет ни одного человека который бы всерьез разобрался бы в вопросе "что такое Немерле". Денег им на начальном этапе дали (как ротор-проекту) и на этом все и закончилось.


То-то я смотрю, с тех пор как братья-поляки съездили в MS Research, развитие языка продолжается силами RSDN-энтузиастов

VD>Хейльсберг "не нашел документации на их сайте". Остальные просто не смотрели.


Ну, этого старого дельфиста давно пора на пенсию. Чтобы не мешал. Чего стоят одни только анонимные делегаты в C# 2.0 — это больше похоже на диверсию, чем на прогресс. Дискредитация, так сказать, светлой идеи лямбды

VD>Так что я не сомневаюсь, что в МС просто не понимают, что такое Nemerle.


VD>В C# уже явно мло что може будет достигнуть. Сделано столько ошибок и столько не сделано (видимо из-за боязни), что эвалюционный путь уже фактически закрыт. По крайней мере репзультат будет сильно хуже специально спроектированного языка.


Да, Хейлсберга — однозначно на пенсию. Без права переписки. Кстати, могу ошибаться, но, по-моему, те же генерики в .NET 2.0 — это в немалой степени заслуга D.Syme, автора F#, а не этого редиски.

VD>Это уже чистейшая инсинуация. F# не имеет ни одного приемущества перед Nemerle в области ФП.


Ой, холиваров Nemerle vs. F# тут еще не было. И не хочется как-то. Ничего если я просто выскажу пару соображений? Шапками закидывать будут?
Лично мне как-то не совсем понравился подход Nemerle к выводу типов — все ограничивается локальными функциями, причем по первому использованию. И если функция вызвана с аргументом типа 'a, то к типу 'b ее уже не применить — будьте добры, выносите отдельно, да еще и с обязательными type constraints. F# пытается вывести типы для всего, причем идет по пути выведения most generic type.
Или вот, макросами можно расширить механизм pattern matching, чтобы получить что-то типа active patterns из F#?
Композицию функций ( ('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) ) можно использовать (типа хаскелевой точки) ?
Ну и так далее по мелочам (специально не цепляюсь за ФП-шные традиции типа карринга)
Вот таких мелочей толи не нашел в Немерле, толи нет их там. А как-то без них грустно (прошу не считать блабописцем )

VD>Он попросту не стал более проходным. Он вообще не проходной. Он — это тупик. Его заслугой может стать только то, что на него могут польститься люди из академических кругов которые уже сейчас используют ОКамл и им захочется иметь более-менее человеческую поддержку со стороны IDE или просто по каким-то соображениям нужно испоьзовать дотнет.


Ой, блин. А я вот чего-то польстился, правда после первых провальных попыток подружиться с Хаскелем. Доктор, я буду жить?
Ээ, excusez moi, не удержался

VD>Он вообще не страшен. Он просто не пригоден для мэйнстрим-языка. Его синтаксис и сематика выглядят для большинства из мэйнстрима как некое недоразумение.


Нет, ну посмотри тут в соседних форумах, каким недоразумением до сих пор кажется .NET многим плюсовикам (собственно, почему посмотри — сам еще не устал их переубеждать?). А для большинства, судя по всему, так и остается уготована участь писать на C#/VB. Ну подумай сам, если взять в оборот Nemerle, это же, понимаешь, еще и Хейлсберга увольнять придется — кому тогда C# нужен будет? И Хейлсберг, наверное, это понимает (если таки сумел найти документацию на сайте Nemerle)

VD>Проблем в том, что именно его разработчик имеет доступ к тем орлам из МС, что принимают решения. Вот и смог выбить бабок. Дайте мне бабок на 4-5 фултайм-разработчиков и через год про F# будут говорить как про недоразумение.

Nemerle по своей сути претендует скорее на замещение C#, чем на дополнение линейки языков. Потому и не дают. Слишком хорошо — тоже плохо
Re[11]: F# - A Functional Programming Language
От: Klapaucius  
Дата: 23.10.07 07:55
Оценка: 1 (1)
Здравствуйте, Schade, Вы писали:

S>Композицию функций ( ('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) ) можно использовать (типа хаскелевой точки) ?


Можно. Оператор >>.
... << RSDN@Home 1.2.0 alpha rev. 774>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[11]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.10.07 10:09
Оценка: 1 (1) +1 -2
S>[offtop]И за что такая враждебность к Камлу? Правда, мсье Леруа принципиально забил на полноценную поддержку многопоточности (форкайте и будет вам щастье, а вне юникса щастья не бывает — это краткое обобщение его ответов), и тем, кажется, совсем добил свое детище. Жаль.[/offtop]

ОКамл не плохой язык... для тех кто учился писать на нем или хотя бы на Лиспе. А для тех кто 5-6 лет в институте С++ и Дельфи изучал, а потом на работе писал на C++/Java/C# его синтаксис, да и семантика просто не приемлема. Тут будет уже не недолюбливание отдельных фич. Тут будет полное неприятие на концептуальном уровне. До объяснения таких тонких вещей как алгеброические типы дело прсото не дойдет.

S>А вообще да, не удивлюсь, если в итоге все урежут до минимального набора "чтоб достать данные из базы да на формочку положить".


Его и так уже урезали по сравнению с оригинальным ОКамлом. В оригинале он просто не лег бы на дотнет.

S>Ну, я же не говорю про перенос модели макросов один-в-один. Хотя, надо бы посмотреть, что там поменялось в Немерле за последний год. Освежить, так сказать, вкус устриц, чтобы спорить о нем.


За год в языке ничего существенно не изменилось. Просто ты его никогда не занал по серьезному. А его макрос систему вообще даже не понимашь.

До того как заняться Nemerle я работал над проектом R#. Так вот это как раз был проект цель которого привнести мощьную мета-подсистему в C#. Когда я увидил Nemerle, я задумался над тем, что же я делал не так. Позже когда я разабрался в Nemerle, я понял, что результат моих усилий никогда не достигне того, что уже есть в Nemerle, так как этот язык банально спроектирован под эту мета-систему. Он является ее частью. Внем все на это заточено. Даже грамматика языка имеет огромное значение. Язык LL(1), вто повзяоляет относительно легко реализовать ситаксические расширения. C# же копирует ошибки С/С++. Решение бросить "любимую игрушку", которая ндо сказать была уже очень близка к завершению, и заняться чужим языком было для меня не простым. Но сейчас я ни сколички не жалею.

S>Ну, C# в самом начале тоже оказался враждебен для сиплюсплюсников (самый что ни на есть мэйнстрим для 2002 года), несмотря на близкий синтаксис.


Ты понимашь о чем говоришь? Ты говоришь о том, что C++-ники плохо принимаю язык которы основывается на тех же принципах и имеет крайне похожий синтаксис, и утверждашь, что мол на этом основании эти же люди примут совсем другой (идеологически, синтаксически, мемантически) язык! Как же должна работать голова, чтобы прийти к таким парадоксальным выводам? Не понимаю.

S> Многие вон до сих пор плюются и возмущаются. Зато дельфисты прыгали от радости. Те, для кого привычный синтаксис так уж важен, и писать будут как на C# (иногда с макросами).


Да дельфисты тоже проплевались, но идеологически язык был для них родным.

Что касается неприятия, то оно обычно сводится к двум тезисам:
1. Мне не нарвистя вон та финтифлюшка. Что в переводе с ханжеского означает я не хочу чуть изменить привычки.
2. Мне не хватает некоторой фунциональности.

Первое — это конечно полный лам, но от этого не легче. И чем ближе будет язык к тем которые уже изучены, тем проще он будет восприниматься. Так же не маловажно объяснение того, почему подход из любимого языка был заменен на другой. Например, некоторые кто столкнулся с Nemerle спрашивают почему в Nemerle описание типов переменных "имеет синтаксис Паскаля"... "мне не нравится...". Объяснять, что это синтаксис МЛ-я довольно бесполезно. Но зато когда объясняешь зачем это было сделано, то люди таки воспринимают (большинство), так как объяснение логично.

Второе — это уже серьезное неприятие. Многие С++-ники которые не приняли C# как раз говорили о нехватке тех или иных возможностей. Объективно С++ имеет ряд фич (порой не официальных, вроде метапрограммирования на шаблонах) которые ценятся программистами очень высого. Конечно C# дает свои приемущества, но чтобы их понять нужно серьезно попрограммировать на этом языке, а по началу человек пытается программировать в старых идеомах и испльзовать старые концепции (в общем не пытается переучиться). Отсуствие привычных возможнсотей вызвает нешуточную ломку. В результате многие просто бросают это занятие так и не поняв как программирвать на новом языке и какие у него приемущества.

Дельфисты потому и принимают язык проще, так как нонцептуально языки очень близки (особенно с C# 1.х). Синтаксис у языков конечно не очень похожий, но терпимый. За то отсуствующих конструкций почти нет. Разве что метаклассы и виртуальные конструкторы.

С++-ник же сталкивается с отсуствием метапрограммирования на шаблонах. Ограниченности дженериков по сравнению с шаблонами. Шаблоны работают во время компиляции и тем самым позволяют некоторые вольности. Конечно у дженериков есть свои приемущества, но они лежа за гранью привычек программиста и попросту не вопсринимаются по началу как приемещества.

С ОКамлом будет все еще хуже. Новых (и откровенно не очень нужных) концепций масса. Синтаксис языка не просто не похо, а фатально другой. Семантика языка крайне не привычна (хотя тут F# кое что исправил). С++-ник будет испытывать всю ту же ломку в следствии отсуствия возможностей к которым он привык в плюсах, но при этом он еже к тому же будет испытывать ступор своязанный с совершенно другой средой.

Напротив, программист по программировавший на C# начинает писать код на Немерле совершенно свободно. По началу ему нужно запомнить совершенно простые правила (в овсновном связанные с указанием типов). Да, немного будет коробить вывод типов по началу, но он появится и в C# 3.0, к тому же типы можно все же указывать, так что ломки практически не будет. Далее человек может осваивать расширенные возможности по одной. Скачала осваивает вывод типов. Потом локальны функции. Потом паттерн-матчинг. Потом еще что-то. Все это воремя он может писать на языке. Причем писать почти с той же скоростью, что и на C#, так как он практически пользуется суперсетом (если забыть о отсуствии ансэйфа, который в общем-то и так не часто используется). В итоге через пару месяцев человек втягивается и уже может оценить приемущества языка. Но пока он еще не осознает, что в его жизни что-то изменилось. А осознает он это когода после некоторого периода программирования на Nemerle вдруг вынужден плотно программировать на C# (писать новый код, поддержка старого не всчет). И тут, о чудо! Начинается ломка. Да какая?! По круче чем у С++-ника перешедшего с С++ на C#. Причем сильно по круче. Создается ощущение, что у тебя ампутировали руки.

Если на Nemerle начинает программировать С++-никт, то картина несколько другая. Непривычность еще больше чем при переходе на Шарпм, но когда у плюсовика возникает ощущение, что в языке нехватает, скажем, шаблонного метапрограммирования, то он понимает (точнее ему объясняют), что есть куда более удобное и мощьное средство — макросы. Макросы подкупают очень многих С++-ников (даже тех, кто по тем или иным причинам не может выбрать Nemerle в качестве своего интсрумента). На, а дальше все точно так же как в случае шапрщиков. При обратоном переходе начинается ломка. Пара доз Nemerle после этого и ты на долго подсел на этот язык .

В общем, у Nemerle есть четки план перетягивания программистов под свои знамена. А ОКамло-подобному языку этого попросту не сделать. Пропость между С-подобными языками и МЛ-подобными слишком велика.

S>То-то я смотрю, с тех пор как братья-поляки съездили в MS Research, развитие языка продолжается силами RSDN-энтузиастов


В какой еще Research кто-то там ездил? Москаль периодически ездиет просто в МС. Вот давича сказал, что общался с командой CLR-а и довел до них сведения о багах в CLR (видимо свой баг-трекер они не читают).

Что до разработки, то баги фиксятся. Сам язык уже стал довольно зрелым и менять каждый день его нет смысла. Сейчас работа в основном идет над Интеграцией со студией. А ею мы как раз и занимаемся. Москаль работает над автоматизированной проверкой доказательства теорем.

VD>>Хейльсберг "не нашел документации на их сайте". Остальные просто не смотрели.


S>Ну, этого старого дельфиста давно пора на пенсию. Чтобы не мешал.


Другого нет и не предвидится.

S> Чего стоят одни только анонимные делегаты в C# 2.0 — это больше похоже на диверсию, чем на прогресс. Дискредитация, так сказать, светлой идеи лямбды


Не анонимные делегаты, а анонимные методы. Согласен, что синтаксис поганый. Но сама возможность очень и очень полезная. Ошибкой как раз было введение делегатов еще в первой версии шарпа. Нужно было вводить концепцию фунционального типа. Это как раз и есть эволюционные изменения которые кривы из-за плохой исходной наследственности языка. А синтаксис и не мог быть другим если не менять концепции. В третьем шарпе концепции притерпели изменения. Разработчики Шарпа решились на введение вывода типов (примитивного, правда) и отказе от некоторых концепций С. В итоге синтаксис лямбд действительно оказался очень удачным. Более удачным, на мой взгляд, чем МЛ-ный. Но это тоже работа Хейльсберга. Так что не все так трагично. Тграгично другое... язык не проектировался в расчете на ФП. А уж макросы вообще считаются автором языка "слишком большой пушкой".

S>Да, Хейлсберга — однозначно на пенсию. Без права переписки. Кстати, могу ошибаться, но, по-моему, те же генерики в .NET 2.0 — это в немалой степени заслуга D.Syme, автора F#, а не этого редиски.


Да тут ты прав. Ты ошибся. Над дженериками работала отдельная команда в одном из универов Шататов. Вся работа была сделана на базе Ротора (на котором F# никогда не работал). В МС только малость подрихтовали готовый код и пустили в производство.

VD>>Это уже чистейшая инсинуация. F# не имеет ни одного приемущества перед Nemerle в области ФП.


S>Ой, холиваров Nemerle vs. F# тут еще не было.


Да, дейсвительно. Какой смысл сравнивать языки которые никто не использует.

S> И не хочется как-то. Ничего если я просто выскажу пару соображений? Шапками закидывать будут?


Чего, чего. Для высказывания своего мнения нужно еще иметь базовые знания по предмету. У тебя его явно нет. Но уж раз открыл рот, то не обижайся на то что твои высказывания будут не лестно оценены. ОК?

S>Лично мне как-то не совсем понравился подход Nemerle к выводу типов — все ограничивается локальными функциями, причем по первому использованию.


Замечатльно. То есть ты не разобрался не только в Nemerle, но и в F#? Как иначе оценить, то что ты не знаешь, что в F# вывод итпов для членов тпов оченьс ильно ограничен и своидтся к выводу типов из инициализации? Вывод типов из использования не поддерживается. Это приводит к тому что в типы параметров методов и полей описываются почти всегда. Другими словами вывод типов там тоже весьма ограниченый. Это не ОКамл в чистом виде.

Ну, и насколько я понял как раз обобщенные фунции не выводятся. Выводятся конкретные типы.

К тому же большой вопрос является ли добром вывод типов для конструкций верхнего уровня (типов и их членов).

Реально ввывод типов F# значительно слабее его аналога в немерле.

S> И если функция вызвана с аргументом типа 'a, то к типу 'b ее уже не применить — будьте добры, выносите отдельно, да еще и с обязательными type constraints. F# пытается вывести типы для всего, причем идет по пути выведения most generic type.


Примеры, плиз в студию, где F# дает что-то больше чем Nemerle. Тогда обсудим. Пока что это похоже на домыслы.

S>Или вот, макросами можно расширить механизм pattern matching, чтобы получить что-то типа active patterns из F#?


Можно. Но прямые решения (использованные в F# и Scala) приводят к серьзным потяерям производительности и мало чем отличаются от тупого перемапливания на алгеброические типы. Меж тем пока что не ясно даст ли это повышение удобства использования языка. Пусть F# и Scala побалуются. Если будут сообщения о том, что это очень удобно, то и мы добавим. Темболее, что технология будет уже отработана и можно будет сделать тесты.

S>Композицию функций ( ('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) ) можно использовать (типа хаскелевой точки)?


Это вообще сахар. Давно маньяки вроде тебя добавили оператор >> полностью аналогичный этой самой точке. Только синтаксис получился чище чем в Хаскеле.
Кстати, для этого даже макросы не понадобились. Это делается банальными средствами ООП:
http://nemerle.org/svn/nemerle/trunk/lib/internal-numbered.n
...
public abstract class Function ['p1, 'r]
{
  public static @>>[B] (fab : 'p1 -> B, fbc : B -> 'r) : 'p1 -> 'r
  {
    a => fbc(fab(a))
  }

  public static @>>[B] (fab : void -> B, fbc : B -> 'r) : void -> 'r
  {
    () => fbc(fab())
  }
...


Жаль, что это фича из разняда "как у других". На практике я ее так в коде компилятора и не увидил.

S>Ну и так далее по мелочам (специально не цепляюсь за ФП-шные традиции типа карринга)


Ага. Так и далее. Языком как помелом. Давай уж свое так далее.

Хотя конму оно нужно? Ему про Фому, а он про Ерему. Ему о том, что язык настолько враждебен тем кто привык к С-подобному синтаксису, что его попросту не примут. А он про какие-то там мелочевки о которых сам-то по наслишке знает.

Это назвается спор ради спора, или отсуствие конструктива.

S>Вот таких мелочей толи не нашел в Немерле, толи нет их там. А как-то без них грустно (прошу не считать блабописцем )


Можно пару слов о проектах написанных тобой на F#-е?

VD>>Он попросту не стал более проходным. Он вообще не проходной. Он — это тупик. Его заслугой может стать только то, что на него могут польститься люди из академических кругов которые уже сейчас используют ОКамл и им захочется иметь более-менее человеческую поддержку со стороны IDE или просто по каким-то соображениям нужно испоьзовать дотнет.


S>Ой, блин. А я вот чего-то польстился, правда после первых провальных попыток подружиться с Хаскелем. Доктор, я буду жить?


Вряд ли.

VD>>Он вообще не страшен. Он просто не пригоден для мэйнстрим-языка. Его синтаксис и сематика выглядят для большинства из мэйнстрима как некое недоразумение.


S>Нет, ну посмотри тут в соседних форумах, каким недоразумением до сих пор кажется .NET многим плюсовикам (собственно, почему посмотри — сам еще не устал их переубеждать?).


Посмотрел форум .NET. Трафик больше чем у плюсового. Значит таки больше половины приняли. У других может задачи на совместимые. И что? Мы ведем речь о языке для конкретной платформы. Принимать его будут имено те кто сейчас программирует на C#. И у меня нет сомнения, что процент тех кто сможет перебороть свой мозг и принять ОКамло-подобный язык будет еденицы.

S> А для большинства, судя по всему, так и остается уготована участь писать на C#/VB. Ну подумай сам, если взять в оборот Nemerle, это же, понимаешь, еще и Хейлсберга увольнять придется — кому тогда C# нужен будет? И Хейлсберг, наверное, это понимает (если таки сумел найти документацию на сайте Nemerle)


Мне и думать нечего. Я пробовал и видел как пробуют другие. Nemerle прекрасным образом занял бы свое место в .NET-сообществе. Это та замена С++ которой многие так ждали. Это язык более мощьный и одновременно более простой и понятный. Шарпщики на него переходят на ура. Было бы желание и месяц другой времени. Далее их уже обратно пушкой не загонишь.

Так что вопрос только в бабле. А МС вкладывает деньги в принципиально непроходное решение.

S>Nemerle по своей сути претендует скорее на замещение C#, чем на дополнение линейки языков. Потому и не дают. Слишком хорошо — тоже плохо


С чего бы это? C# же не заменил Васик хотя технически языки почти клоны? А Немерле отличается от Шарпа довольно сильно. Он сложнее и мащьнее. Индусам может не подойти.

Да и какая разница, на замену или рядом? Главное чтобы он был. А чтобы он был нужны вливания денег и поддержка. В прочем, велика вероятность, что он таки будет во преки всему.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: F# - A Functional Programming Language
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 23.10.07 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>No, F# won't be included in the box with Visual Studio 2008.


Ключевой момент — 2008. В нее он, разумеется, не будет включен, потому что она уже сейчас на стадии подготовки RTM билда. А вот что будет в следующей студии —

VD>Luke Hoban


Хм. А он какое отношение к F# имеет? Потому как это не последний человек в C# compiler team.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[7]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 23.10.07 18:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Luke Hoban

AVK>Хм. А он какое отношение к F# имеет? Потому как это не последний человек в C# compiler team.

Теперь, похоже, он не последний человек в F# compiler team: здесь
Re[12]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 23.10.07 22:20
Оценка: 9 (1) +1
Здравствуйте, VladD2, Вы писали:

Мда, придется начать с дисклеймера.
1. Я вообще не имею ничего против Nemerle. Замечательный язык, а система метапрограммирования достойна отдельного решпекта.
2. Мне собственно все равно, на какую букву будет начинаться название языка — F, N, Z или X, если он удобен и продуктивен. Если выбор больше — это всяко кошернее, чем одна генеральная линия.
3. C Nemerle, похоже, все и так получится, "вопреки всему". Если за счет MS-овских бабок линейка дополнится еще и вылизанным F# — см. п.2 про богатство выбора. Бешеной популярности, судя по всему, не снискать не тому, ни другому — среднечеловеческая консервативность не знает границ, а вот получить в свои руки еще один инструмент — почему бы и нет?

[... спорить с поскипанным не вижу причин ...]

VD>В общем, у Nemerle есть четки план перетягивания программистов под свои знамена. А ОКамло-подобному языку этого попросту не сделать. Пропость между С-подобными языками и МЛ-подобными слишком велика.


>>>


VD>Да тут ты прав. Ты ошибся. Над дженериками работала отдельная команда в одном из универов Шататов. Вся работа была сделана на базе Ротора (на котором F# никогда не работал). В МС только малость подрихтовали готовый код и пустили в производство.


Таки врет товарисч Syme?

From 1999 to 2004 I worked extensively with the .NET Common Language Runtime Team, both on the design and implementation of generics and on other issues related to the .NET Common IL's type system. During 2002 and 2003 Andrew Kennedy and I were working essentially full-time as as an adjunct members of the CLR team in a mix of architectural, development, testing and program management roles (thankfully our workload has eased off...) Some of those who I had the pleasure of working with were Dario Russi, Vance Morrison, Sean Trowbridge, Simon Hall, Shri Borde, Ian Bearman, Chris Brumme and Patrick Dussud.
From 1999 to 2003 I was involved with the design of C#, authoring the first draft of the C# language design for generics. I also prototyped the initial support for generics in the Microsoft C# compiler. During this time I had the pleasure of working with Anders Hejlsberg, Peter Golde, Peter Hallam and others.

отсель

VD>>>Это уже чистейшая инсинуация. F# не имеет ни одного приемущества перед Nemerle в области ФП.

VD>Замечатльно. То есть ты не разобрался не только в Nemerle, но и в F#? Как иначе оценить, то что ты не знаешь, что в F# вывод итпов для членов тпов оченьс ильно ограничен и своидтся к выводу типов из инициализации? Вывод типов из использования не поддерживается. Это приводит к тому что в типы параметров методов и полей описываются почти всегда. Другими словами вывод типов там тоже весьма ограниченый. Это не ОКамл в чистом виде.

Действительно, странно было бы выводить тип топ-левел конструкций исходя из первого использования, как это сделано в Немерле для локальных функций. Но если тело функции/метода содержит достаточно информации для вывода типа — зачем тогда type annotations? Вот например:
let FileContents fname =
    try
        use stream = new IO.FileStream(fname, IO.FileMode.Open)
        (* конструкция use аналогична let, но обеспечивает реализацию Dispose-паттерна *)
        use reader = new IO.StreamReader(stream)
        Some (reader.ReadToEnd())
    with _ -> None

Тут компилятор сам в состоянии разобраться, что функция имеет тип string -> string option, и подсказки ему не нужны. Нет, конечно, совсем без указания типов не обойтись, но механизм вывода здорово снижает их количество.

VD>Ну, и насколько я понял как раз обобщенные фунции не выводятся. Выводятся конкретные типы.

Мы об одном и том же говорим? Вот, извиняюсь за банальный и надуманный пример, но для иллюстрации механизма сойдет: выразим фильтр списка через свертку:
def my_filter (f, l)  { List.Rev (List.FoldLeft(l, [], (elem, acc) => if (f (elem)) elem::acc else acc)) }
def x = my_filter( (x) => x>0, [1,2,3,-5,-9,7] )

// оффтоп - во прикол: подсветка для ML на RSDN есть, а для Nemerle нету.

---
let my_filter f = List.fold_left (fun acc elem -> if f elem then elem::acc else acc) [] >> List.rev
let x = my_filter (fun x -> x > 0 ) [1; 2; -9; 14; -5; 7]


F# определяет тип функции my_filter как ('a -> bool) -> 'a list -> 'a list, а Nemerle — по факту первого использования, как int -> bool, list[int], list[int]

И если дальше продолжим:
def my_filter (f, l)  { List.Rev (List.FoldLeft(l, [], (elem, acc) => if (f (elem)) elem::acc else acc)) }
def x = my_filter( (x) => x>0, [1,2,3,-5,-9,7] )

def longEnough(str:string) {str.Length > 5}
def x2 = my_filter ( longEnough , ["String1", "Str2"] )

let my_filter f = List.fold_left (fun acc elem -> if f elem then elem::acc else acc) [] >> List.rev
let x = my_filter (fun x -> x > 0 ) [1; 2; -9; 14; -5; 7]

let longEnough (s:string) = s.Length > 5
let x2 = my_filter longEnough ["String1"; "Str2"; "String4"]

То F# нормально скомпилирует, а Nemerle пошлет. Нет, понятно, что многократно используемые функции надо выносить за локальные пределы, но там type inference не работает. Как окажется в списке параметров пара-тройка функций — задолбишься выписывать типы.

VD>К тому же большой вопрос является ли добром вывод типов для конструкций верхнего уровня (типов и их членов).


А чего в этом злого?

VD>Реально ввывод типов F# значительно слабее его аналога в немерле.


Ну, скажем так, реализация местами еще халтурненькая. Есть, например, в зачатке вывод типов лямбд из использования:
(* вот так работает *)
let x = "SomeString" |> (fun s -> s.Length) 
(* вот так, увы, нет *)
let x = (fun s -> s.Length) "SomeString"

Но все-таки это скорее проблема текущей сырой реализации.

VD>Примеры, плиз в студию, где F# дает что-то больше чем Nemerle. Тогда обсудим. Пока что это похоже на домыслы.


VD>Можно. Но прямые решения (использованные в F# и Scala) приводят к серьзным потяерям производительности и мало чем отличаются от тупого перемапливания на алгеброические типы. Меж тем пока что не ясно даст ли это повышение удобства использования языка. Пусть F# и Scala побалуются. Если будут сообщения о том, что это очень удобно, то и мы добавим. Темболее, что технология будет уже отработана и можно будет сделать тесты.


Так это же замечательно, что балуются, а не объявляют себя законченным решением. А то так можно и до уровня Оберона закостенеть.

VD>Это вообще сахар. Давно маньяки вроде тебя добавили оператор >> полностью аналогичный этой самой точке. Только синтаксис получился чище чем в Хаскеле.


Да, сахар. Мелочь, а приятно.

VD>Ага. Так и далее. Языком как помелом. Давай уж свое так далее.

VD>Хотя конму оно нужно? Ему про Фому, а он про Ерему. Ему о том, что язык настолько враждебен тем кто привык к С-подобному синтаксису, что его попросту не примут. А он про какие-то там мелочевки о которых сам-то по наслишке знает.
Ууууу. Про мелочевки-то и распинаться не охота.

VD>Это назвается спор ради спора, или отсуствие конструктива.

Да это собственно даже не спор. Просто попытка донести мысль, что и в F# есть на что посмотреть.

VD>Можно пару слов о проектах написанных тобой на F#-е?

Ай, поймал. Нет, публичного предъявить нечего. Из действующего — только скромненький анализатор статистики работы одной специфической промышленной железяки с PC внутри. Специфика работы, понимаешь, не программистской, и даже не админской.

VD>>>Он попросту не стал более проходным. Он вообще не проходной. Он — это тупик. Его заслугой может стать только то, что на него могут польститься люди из академических кругов которые уже сейчас используют ОКамл и им захочется иметь более-менее человеческую поддержку со стороны IDE или просто по каким-то соображениям нужно испоьзовать дотнет.


Да я и не надеялся, что он пойдет прям таки в массы.

VD>С чего бы это? C# же не заменил Васик хотя технически языки почти клоны? А Немерле отличается от Шарпа довольно сильно. Он сложнее и мащьнее. Индусам может не подойти.


Васик-шмасик. Васик — это блин традиция, а то местами и диагноз (помнишь, как некоторые ВБ-шники взывыли, когда увидели, что им подсунули под видом VB7?). Надо же было как-то ВБ-шников пересаживать на .NET, не пугая страшной буквой C?

VD>Да и какая разница, на замену или рядом? Главное чтобы он был. А чтобы он был нужны вливания денег и поддержка. В прочем, велика вероятность, что он таки будет во преки всему.

Дык я ж разве против? Опять-же см. п.2 дисклеймера про богатство выбора. Вот.
Re[13]: F# - A Functional Programming Language
От: Vermicious Knid  
Дата: 24.10.07 01:51
Оценка: 92 (6) +1
Здравствуйте, Schade, Вы писали:

S>Действительно, странно было бы выводить тип топ-левел конструкций исходя из первого использования, как это сделано в Немерле для локальных функций.

Ну для приватных методов не так уж и странно, и кстати не раз уже предлагалось. Просто это не настолько важно, чтобы все кинулись это немедленно реализовывать.

S>Тут компилятор сам в состоянии разобраться, что функция имеет тип string -> string option, и подсказки ему не нужны. Нет, конечно, совсем без указания типов не обойтись, но механизм вывода здорово снижает их количество.

Компилятор то разберется, а вот сразу ли разберется человек? Предположим, что ты ничего не знаешь про StreamReader. ReadToEnd на первый взгляд вполне может возвращать массив байтов.

Кроме того этот конкретный пример хорошо показывает, что экономия на аннотации типов зачастую настолько мизерна, что даже элементарное знание библиотек, с которыми работаешь, помогает гораздо больше. Вместо самодельной функции в данном случае проще использовать IO.File.ReadAllText. Я уже не говорю о менее приземленных вещах типа грамотного дизайна или макросов.
S>// какой страшный ужас :), для начала можно переписать так
S>//                      l.FoldLeft([], (elem, acc) => if (f(elem)) elem::acc else acc).Rev()
S>def my_filter (f, l)  { List.Rev (List.FoldLeft(l, [], (elem, acc) => if (f (elem)) elem::acc else acc)) }
S>//                 лишние скобки
S>def x = my_filter( (x) => x>0, [1,2,3,-5,-9,7] )
S>//          Nemerle это уточнение типа не нужно
S>def longEnough(str:string) {str.Length > 5}
S>def x2 = my_filter ( longEnough , ["String1", "Str2"] )
S>


Кстати, в отличие от OCaml/F# в Nemerle есть такая штука как list comprehensions:
def my_filter(f, l) { $[x | x in l, f(x)] }
def x = my_filter(_ > 0, [1, 2, 3, -5, -9, 7]);
def longEnough = str => str.Length > 5;


Если ее использовать, то оказывается описания типов не так уж и страшны:
// нормальный обобщенный метод расширения, как раз такой есть в ст. библиотеке под названием Filter ;)
public static MyFilter[T](this l : list[T], f : T->bool) : list[T] { $[x | x in l, f(x)] }
// ocaml
let my_filter f = List.fold_left (fun acc elem -> if f elem then elem::acc else acc) [] >> List.rev


Плюс ко всему человек, который понятия не имеет об одном или более следующих пунктов:
1) композиции функций
2) карринге
3) свертке
4) устройстве односвязных списков
сможет хотя бы в общих чертах понять что делает функция и как ее вызвать. list comprehensions это не rocket science, это очень просто, встречается даже в языках для школьников младших классов, типа питона.

VD>>К тому же большой вопрос является ли добром вывод типов для конструкций верхнего уровня (типов и их членов).

S>А чего в этом злого?
Попробуй посмотреть и исходники F#, а еще лучше добавь туда фичу-другую. Или хотя бы баг исправь.
Компилятор F# писал в основном один человек, PhD из Кембриджа. Всего за время его жизненного цикла там было максимум человек пять контрибуторов, в основном профессиональные разработчики или исследователи из MS и MSR. Комментариев и аннотаций типов там почти нет. Зато есть громадные не только в высоту, но и ширину(до 300 с лишним символов) функции, а написан он вообще на Caml, совместимость с F# для бутстрапинга там в виде вставок и условной компиляции. Всем желаю приятного просмотра и редактирования его исходников.

Компилятор Nemerle тоже написан не идеально, академические проекты редко когда могут похвастаться действительно хорошим кодом, но достаточно понятно и вменяемо для того, чтобы тем или иным образом, в то или иное время, в компилятор влезло больше двадцати человек народу, в основной массе значительно меньшей квалификации(по крайней мере номинально ). Некоторые помнится даже отправляли патчи после недели знакомства с Nemerle и функциональными языками вообще. С комментариями в коде тоже местами туговато, а адекватной текущему состоянию дел документации вообще нет, но зато есть аннотации типов и они неплохо помогают ориентироваться по коду.

Если посмотреть на опыт еще более сложных проектов, то вообще становится интересно. GHC написан в литературном стиле(в основном одни комментарии с вкраплениями кода), на первый взгляд все аннотации типов на месте. Большинство вменяемых библиотек на функциональных языках, которые я видел, тоже с аннотациями. Так пишут профессионалы от ФП, почему для любителей возможность не указывать типы является такой важной мне не совсем понятно. Наверное потому, что ничего кроме небольших игрушечных проектиков на ФЯ они не пишут, да и не собираются, так как еще не дошли нужного состояния ума или безумия. В принципе для вышеоговоренных проектов написание write-only кода вполне оправданно, сложно запутаться в собственном коде, тем более когда его кот наплакал.

S>Ну, скажем так, реализация местами еще халтурненькая. Есть, например, в зачатке вывод типов лямбд из использования:

Здесь проблема скорее не с лямбдами, а с вызовом метода. В OCaml объекты были структурированными типами, таких проблем быть не могло, так как просто добавлялся констрейн по названию и типу метода в выводимый обобщенный тип. В F# тоже кажется есть похожие констрейны, но видимо в таких случаях они не помогают или не используются(тем более, что CLR это безобразие не поддерживает).

S>Но все-таки это скорее проблема текущей сырой реализации.

Про сырую реализацию не нужно. F# разрабатывается чуть ли не с 2002-го года. В начале 2005-го уже была версия 1.0. Don Syme пользовался наработками, которые он сделал в процессе реализации дженериков и переноса академических языков на .NET(Project 7, 1999-2002). Это то, что возможно в F# без серьезной потери совместимости с Caml. Это как раз последствия использования алгоритма Хиндли-Милнера, выводящего наиболее общие типы. Просто чудо, что он местами смог его побороть. В Nemerle кардинально сменили алгоритм, выбрав более подходящую для .NET модель.

Например перегрузкой в F# все очень плохо, ни определить, ни нормально использовать нельзя (у Nemerle естественно подобных проблем нет как класса). Тривиальные примеры, от которых у F# сносит крышу:
Console.WriteLine 1
let f = System.Console.WriteLine in f "test"


Кроме того в F# нет такой банальной вещи как авто-боксинг, предлагается использовать функции box и unbox. Поддержка операторов преобразования из внешнего кода тоже под вопросом, определять их в F# понятное дело тоже нельзя.

При большом желании, которого у меня нет, можно еще много накопать, так как идеология интеграции Nemerle и F# с .NET совершенно иная.
1) Nemerle обязан позволять программисту воспроизвести почти любой код на безопасном диалекте C# 2.0, так чтобы он для внешнего кода выглядел неотличимо от C# варианта
2) Использовать код из внешних библиотек на других языках CLR, причем с аналогичным или большим удобством, чем это позволяет делать C# (вот в этом аспекте у F# вообще плохо, он пытается частично решить проблему своей громадной стандартной библиотекой).

У F# задача совсем другая. Некое подмножество F#(функции + основные типы данных) обязано работать в точности как OCaml и F# обязан уметь компилировать OCaml код, написанный на этом подмножестве, с вставками F# и условной компиляцией. Такая извращенская схема видимо была задумана для упрощения бутстрапинга компилятора F# и достижения других личных целей вроде портирования большой существующей базы кода с OCaml, но интеграцию с .NET это естественно усложняет. Поэтому, на мой взгляд, F# никогда не стать действительно "first-class .NET language".

VD>>Можно. Но прямые решения (использованные в F# и Scala) приводят к серьзным потяерям производительности и мало чем отличаются от тупого перемапливания на алгеброические типы. Меж тем пока что не ясно даст ли это повышение удобства использования языка. Пусть F# и Scala побалуются. Если будут сообщения о том, что это очень удобно, то и мы добавим. Темболее, что технология будет уже отработана и можно будет сделать тесты.

S>Так это же замечательно, что балуются, а не объявляют себя законченным решением. А то так можно и до уровня Оберона закостенеть.
В Nemerle другая схема. Балуются в основном сторонние контрибуторы или вообще посторонние люди типа меня. Если конечный результат хорош, то это добавляется в "законченное решение". Активные паттерны пока никого особо не заинтересовали. А вообще примерно в том виде в каком они сделаны в F#, можно добавить в компилятор(через макросы это будет сложнее) за пару дней, а кода это добавит сотню строчек, максимум две(скорее всего это даже преувеличенные цифры). Квазицитирование и паттерн-мэтчинг кода между прочим активно используется не только в макросах, но и в компиляторе. Такие элементарные фичи, связанные с генерацией кода добавляются поэтому достаточно легко и просто.

VD>>Это назвается спор ради спора, или отсуствие конструктива.

S>Да это собственно даже не спор. Просто попытка донести мысль, что и в F# есть на что посмотреть.
Везде есть на что посмотреть, но это не значит что нужно реализовывать все увиденное у других, тем более точно по образу и подобию. Когда Nemerle создавался, на OCaml смотрели самым пристальным образом, так как на нем писали первую версию компилятора и видимо позаимствовали то, что показалось нужным позаимствовать. А что касается F#, то есть серьезные подозрения, что многие вещи в нем появились после того как Don Syme как-раз посмотрел на Nemerle.
Re[7]: F# - A Functional Programming Language
От: nikov США http://www.linkedin.com/in/nikov
Дата: 24.10.07 04:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

VD>>Luke Hoban


AVK>Хм. А он какое отношение к F# имеет? Потому как это не последний человек в C# compiler team.


Теперь он занимается F#.
Re[14]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 24.10.07 07:52
Оценка:
Здравствуйте, Vermicious Knid, Вы писали:

VK>Компилятор то разберется, а вот сразу ли разберется человек? Предположим, что ты ничего не знаешь про StreamReader. ReadToEnd на первый взгляд вполне может возвращать массив байтов.


С поддержкой IDE, пусть и такой слабой как у F#, все становится не так страшно.

VK>Кроме того этот конкретный пример хорошо показывает, что экономия на аннотации типов зачастую настолько мизерна, что даже элементарное знание библиотек, с которыми работаешь, помогает гораздо больше. Вместо самодельной функции в данном случае проще использовать IO.File.ReadAllText. Я уже не говорю о менее приземленных вещах типа грамотного дизайна или макросов.

Ну, не совсем так. Поведение ReadAllText несколько иное.

VK>
S>>// какой страшный ужас :), для начала можно переписать так
S>>//                      l.FoldLeft([], (elem, acc) => if (f(elem)) elem::acc else acc).Rev()
S>>def my_filter (f, l)  { List.Rev (List.FoldLeft(l, [], (elem, acc) => if (f (elem)) elem::acc else acc)) }
S>>//                 лишние скобки
S>>def x = my_filter( (x) => x>0, [1,2,3,-5,-9,7] )
S>>//          Nemerle это уточнение типа не нужно
S>>def longEnough(str:string) {str.Length > 5}
S>>def x2 = my_filter ( longEnough , ["String1", "Str2"] )
S>>
VK>


VK>Кстати, в отличие от OCaml/F# в Nemerle есть такая штука как list comprehensions:

VK>
VK>def my_filter(f, l) { $[x | x in l, f(x)] }
VK>def x = my_filter(_ > 0, [1, 2, 3, -5, -9, 7]);
VK>def longEnough = str => str.Length > 5;
VK>


В отличие от OCaml, не от F#.
(* вот list comprehension  *)
[ for e in l when f e -> e ]
(* а вот array comprehension  *)
[| for e in l when f e -> e |]
(* а вот так - IEnumerable comprehension  *)
{ for e in l when f e -> e }


VK>Если ее использовать, то оказывается описания типов не так уж и страшны:

VK>
VK>// нормальный обобщенный метод расширения, как раз такой есть в ст. библиотеке под названием Filter ;)
VK>public static MyFilter[T](this l : list[T], f : T->bool) : list[T] { $[x | x in l, f(x)] }
VK>// ocaml
VK>let my_filter f = List.fold_left (fun acc elem -> if f elem then elem::acc else acc) [] >> List.rev
VK>

Длину строки сравниваем ?
let my_filter f l = [for e in l when f e -> e]


Кстати, было бы очень странно, если бы такой стандартной функции не было. Но проиллюстрировать свои слова хотелось небольшим примером, без лишних деталей.

VK>Плюс ко всему человек, который понятия не имеет об одном или более следующих пунктов:

VK>1) композиции функций
VK>2) карринге
VK>3) свертке
VK>4) устройстве односвязных списков
VK>сможет хотя бы в общих чертах понять что делает функция и как ее вызвать. list comprehensions это не rocket science, это очень просто, встречается даже в языках для школьников младших классов, типа питона.

Дружественность к человеку с C/C#/Java/Delphi бэкграундом — такой цели просто не ставилось. Ок, это минус.

VK>Попробуй посмотреть и исходники F#, а еще лучше добавь туда фичу-другую. Или хотя бы баг исправь.

VK>Компилятор F# писал в основном один человек, PhD из Кембриджа. Всего за время его жизненного цикла там было максимум человек пять контрибуторов, в основном профессиональные разработчики или исследователи из MS и MSR. Комментариев и аннотаций типов там почти нет. Зато есть громадные не только в высоту, но и ширину(до 300 с лишним символов) функции, а написан он вообще на Caml, совместимость с F# для бутстрапинга там в виде вставок и условной компиляции. Всем желаю приятного просмотра и редактирования его исходников.
Ну, теперь этим есть кому заняться

VK>Если посмотреть на опыт еще более сложных проектов, то вообще становится интересно. GHC написан в литературном стиле(в основном одни комментарии с вкраплениями кода), на первый взгляд все аннотации типов на месте. Большинство вменяемых библиотек на функциональных языках, которые я видел, тоже с аннотациями. Так пишут профессионалы от ФП, почему для любителей возможность не указывать типы является такой важной мне не совсем понятно.

Аннотации типов — bon tone, там где они нужны для понимания. Да и выводимые хаскелем типы (если нет аннотаций) часто просто страшно выглядят

(forall t_a20T (m:: * -> *) . (Monad m) => (t_a20T -> Bool) -> ([t_a20T], [t_a20T]) -> m ([t_a20T], [t_a20T])) — жуть.

Тут волей-неволей будешь писать аннотации, даже если они и не обязательны.

VK>[...]


VK>У F# задача совсем другая. Некое подмножество F#(функции + основные типы данных) обязано работать в точности как OCaml и F# обязан уметь компилировать OCaml код, написанный на этом подмножестве, с вставками F# и условной компиляцией. Такая извращенская схема видимо была задумана для упрощения бутстрапинга компилятора F# и достижения других личных целей вроде портирования большой существующей базы кода с OCaml, но интеграцию с .NET это естественно усложняет. Поэтому, на мой взгляд, F# никогда не стать действительно "first-class .NET language".


Тут он конечно наступает на те же грабли, на которые наступил C++ — совместимость со старым кодом. Причем зря, бо Caml-ового кода, который можно скомпилировать на F# без переписывания — не так уж много. Куда ни глянь, везде используются конструкции, не реализованые в F# (да и вряд ли они будут реализованы под CLR в ее нынешнем варианте). Поскольку переписывать CLR под F# никто не будет, я надеюсь, у разработчиков хватит решимости забить на совместимость с Caml.

VK>Везде есть на что посмотреть, но это не значит что нужно реализовывать все увиденное у других, тем более точно по образу и подобию. Когда Nemerle создавался, на OCaml смотрели самым пристальным образом, так как на нем писали первую версию компилятора и видимо позаимствовали то, что показалось нужным позаимствовать. А что касается F#, то есть серьезные подозрения, что многие вещи в нем появились после того как Don Syme как-раз посмотрел на Nemerle.
Re[8]: F# - A Functional Programming Language
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 24.10.07 08:20
Оценка:
Здравствуйте, Schade, Вы писали:

S>Теперь, похоже, он не последний человек в F# compiler team: здесь


Тогда это очень серьезно.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re[8]: F# - A Functional Programming Language
От: IB Австрия http://rsdn.ru
Дата: 24.10.07 10:14
Оценка:
Здравствуйте, Schade, Вы писали:

S>Теперь, похоже, он не последний человек в F# compiler team:

Жаль.. C# его будет не хватать... )
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[13]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.10.07 17:20
Оценка:
Здравствуйте, Schade, Вы писали:

S>3. C Nemerle, похоже, все и так получится, "вопреки всему". Если за счет MS-овских бабок линейка дополнится еще и вылизанным F# — см. п.2 про богатство выбора. Бешеной популярности, судя по всему, не снискать не тому, ни другому — среднечеловеческая консервативность не знает границ, а вот получить в свои руки еще один инструмент — почему бы и нет?


Дык, я не против ОКамла на дотнете. Я тоже только за. Как-грисъя — пусть цветут все цветы.
Проблема в другом. Если уж поддерживать F#, то разумно было бы поддержать и Немерле, а то и Скалу с Буу.

Это все очень перспективные языки. Причем F# среди них самый консервативный.

Потом лично у меня нет даже сомнения, что если бы МС вбухал относительно микроскопические бабки в развитие Немреле и хоть немного помог ему морально (объявил бы о поддержке и малость пропиарил), то Немерле легко сошел бы за очередную псевдо-рпеволюцию созданную МС и навел бы немало шороха. В общем, я уверен, что караз этот язык пропер бы. Пусть он не заменил бы Шарп и темболее Васик, но то что он мог бы занять достойное место в линейке языков и смог бы преманить на свою сторону нехилую часть C#-щиков и C++-ников — это точно.

S>Таки врет товарисч Syme?

S>

S>From 1999 to 2004 I worked extensively with the .NET Common Language Runtime Team, both on the design and implementation of generics and on other issues related to the .NET Common IL's type system. During 2002 and 2003 Andrew Kennedy and I were working essentially full-time as as an adjunct members of the CLR team in a mix of architectural, development, testing and program management roles (thankfully our workload has eased off...) Some of those who I had the pleasure of working with were Dario Russi, Vance Morrison, Sean Trowbridge, Simon Hall, Shri Borde, Ian Bearman, Chris Brumme and Patrick Dussud.
S>From 1999 to 2003 I was involved with the design of C#, authoring the first draft of the C# language design for generics. I also prototyped the initial support for generics in the Microsoft C# compiler. During this time I had the pleasure of working with Anders Hejlsberg, Peter Golde, Peter Hallam and others.

S>отсель

Может и не врет. Вот только это никак не отрицает того, что не он их разработал.
Вот http://research.microsoft.com/projects/clrgen реальная страница в которой он (вроде бы) упоминается как "You may also contact dsyme@microsoft.com, akenn@microsoft.com or the C# team."
Так что или в то время он работал в "The PPG group at MSR Cambridge" (см. предыдущую ссылку), или он работал над интеграцией полученного прототипа для Ротора в исходный компилятор МС. А может он просто курировал ту группу. Вот только факт, что дженерики сначала появились в Роторе и то что разработаны они были в Кембридже.

S>Действительно, странно было бы выводить тип топ-левел конструкций исходя из первого использования, как это сделано в Немерле для локальных функций.


В ОКамле вывод типов работает глобально. В нем ожно вообще не указывать типы. Ну, или делать это очень редко.

S> Но если тело функции/метода содержит достаточно информации для вывода типа — зачем тогда type annotations?


В простых случаях и в Немерле можно не указывать типы полей (если у них есть простые инициализаторы).

А надо это для:
1. Документирования кода.
2. Для нужд IDE. Без этого скорость работы IDE будет зависить от объема кода, что не приемлемо.

S> Вот например:

S>
S>let FileContents fname =
S>    try
S>        use stream = new IO.FileStream(fname, IO.FileMode.Open)
S>        (* конструкция use аналогична let, но обеспечивает реализацию Dispose-паттерна *)
S>        use reader = new IO.StreamReader(stream)
S>        Some (reader.ReadToEnd())
S>    with _ -> None
S>

S>Тут компилятор сам в состоянии разобраться, что функция имеет тип string -> string option, и подсказки ему не нужны. Нет, конечно, совсем без указания типов не обойтись, но механизм вывода здорово снижает их количество.

Вот ОКамл обходится. Но ценой тому совсем хреновые сообщения об ошибках и очень плохая поддержка в IDE.

Ты ведь не занимался данной проблемой и не понимшь, что многие вещи в коде завязаны друг на друга. Скажем в коде метода может появиться использование другого метода. Это приводит к тому, что по одному метду уже нельзя точно вычислить тип. И таких проблем много.

S>F# определяет тип функции my_filter как ('a -> bool) -> 'a list -> 'a list, а Nemerle — по факту первого использования, как int -> bool, list[int], list[int]


Скромный вопрос. F# делает это для методов или локальных функций ака let-ов?

Как показала практика для локальных фунций вывод дженерик-типов смысла не имеет. Мы мишем реальный код и обобщать его нет смысла. Такая задача встает только когда люди играются с языком. Это из серии "а что если?". На практике или обобщается сам метод и тогда все локальные фунции автоматом получаются обобщенными, или этого попросту не требуется.

Более того. Вывод обобщений может завуалировать ошибку. Вывод конкретных типов выявляет больше ошбок.

Ну, а если уж вдруг потребуетс создать обобщенную локальную фунцию, то не грех описать это явно. Там ведь особо напрягаться не приходится.

S>И если дальше продолжим:

S>
S>def my_filter (f, l)  { List.Rev (List.FoldLeft(l, [], (elem, acc) => if (f (elem)) elem::acc else acc)) }
S>def x = my_filter( (x) => x>0, [1,2,3,-5,-9,7] )

S>def longEnough(str:string) {str.Length > 5}
S>def x2 = my_filter ( longEnough , ["String1", "Str2"] )
S>

S>
S>let my_filter f = List.fold_left (fun acc elem -> if f elem then elem::acc else acc) [] >> List.rev
S>let x = my_filter (fun x -> x > 0 ) [1; 2; -9; 14; -5; 7]

S>let longEnough (s:string) = s.Length > 5
S>let x2 = my_filter longEnough ["String1"; "Str2"; "String4"] 
S>

S>То F# нормально скомпилирует, а Nemerle пошлет. Нет, понятно, что многократно используемые функции надо выносить за локальные пределы, но там type inference не работает. Как окажется в списке параметров пара-тройка функций — задолбишься выписывать типы.

Ой, настолько надуманный пример, что просто противно. Обобщенные методы должны быть в библиотеках. А там им сам бог велел быть явно аннотированными. Так твой фильт уже давно лежит в станартной библиотеке. Да и такие анохранизмы как использование статических методов тоже давно канули в лету. Есть же методы расширения. Продемонстрированный тобой код даже без применения лист-компрехеншона можно записать так:
def result = [1, 2, 3, -5, -9, 7].Filter(_ > 0);
def result = ["String1", "Str2", "String4"].Filter(str => str.Length > 5);

Блин, такой интуитивности F#-пу не видать как своих ушей. Тут разве что LINQ может что-то предложить.

VD>>К тому же большой вопрос является ли добром вывод типов для конструкций верхнего уровня (типов и их членов).


S>А чего в этом злого?


Я уже говорил. Это плохо для человека. И это плохо для поддержки IDE.

VD>>Реально ввывод типов F# значительно слабее его аналога в немерле.


S>Ну, скажем так, реализация местами еще халтурненькая. Есть, например, в зачатке вывод типов лямбд из использования:

S>
S>(* вот так работает *)
S>let x = "SomeString" |> (fun s -> s.Length) 
S>(* вот так, увы, нет *)
S>let x = (fun s -> s.Length) "SomeString" 
S>

S>Но все-таки это скорее проблема текущей сырой реализации.

Боюсь, что это все проблемы адаптации Хиндли-Милера к дотнетной системе типов. Скрещивание ужа с ежом всегда было занятием не благодарным.

В Немерле изначально тоже использовался такой полход. Но где-то по пути своего развния была разработана уникальная система типов и я как пользователь могу сказать, что она удалась на славу. Единствный серьзный недостатко — она довольно тормозная. Но потенциально она позволяет параллельную типизацию, так что есть куда масштабироваться.

VD>>Примеры, плиз в студию, где F# дает что-то больше чем Nemerle. Тогда обсудим. Пока что это похоже на домыслы.


Что-то ответ я так и не увидел?

S>Так это же замечательно, что балуются, а не объявляют себя законченным решением. А то так можно и до уровня Оберона закостенеть.


Просто замечательно. Более того. Тройка Скала/Немерле/Шарп много выигрывают от того, что ведут исследования параллельно и пользуются результатами оных сообщя.

Я же не говорю, что F# маст дай и т.п. Я просто говорю, что МС пытается вкладыват деньги в язык который будет априори чужд большинству ее аудитории и даже не замечает языки которые действительно могли бы выстрелить.

Пойми, что бесмысленно заниматься пенисометрией. F# не плохой язык. Его проблемы не в том, что у него фича-лист меньше чем у Немерле. Его проблема в том, что это на 99% ОКамл который уже не принят индустрией. Ну, сложный он для понимания простых смертных. Нельзя его рассматривать как на расширение того что было. А вот Немерле отлично прокатывает за C#++ на первой стадии. Когда еще там люди освоют паттерн-матчинг, алгеброические типы и разные компрешеншоны, но приемущества они получат сразу. И работать они смогут сразу. Этого у F# не будет никогда.

Посему уж если давать бабки на F#, то глупо не дать их и на Немреле. Более того. Разумно было бы объеденить или хотя бы скоординировать усилия двух направлений. Вместе разультат мог бы оказаться куда лучше. Скажем F# и Немерле могли бы использовать одни и те же общие ФП-библиотеки. Код между ними стал бы переносим. А там уже не загорами фунциональные оптимизации в CLR (Нью-Васюки, значич ).

VD>>Это вообще сахар. Давно маньяки вроде тебя добавили оператор >> полностью аналогичный этой самой точке. Только синтаксис получился чище чем в Хаскеле.


S>Да, сахар. Мелочь, а приятно.


Хорошо, что тебе приятно. Только за приемущество это не катит.

Скажем, сахар в частичном применении у Немерла куда по приятнее.

S>Ууууу. Про мелочевки-то и распинаться не охота.


Так что из этого приемущества пытаться своять? Нет никаких приемуществ. Или скажем так. На каждый выверт в F# можно найти 2 в Немерле.

С точки зрения поддержки ФП оба языка прекрасны. И поиск среди них более идеального не большее чем попытка выдвать свои субъективные предпочтения за реальность.

А вот то, что скажем Немерле лучше воспринимается C#-пщиками. И то что Немерле обладает законченной и мощьной макро-подсистемой — это факт неоспоримый. И эти приемущества перевесят очень многое.

S>Да это собственно даже не спор. Просто попытка донести мысль, что и в F# есть на что посмотреть.


А с этим кто-то спорил? Это я что ли заявил, что F# плохо ФП поддерживает? Это ты заявил обратное о Немреле.

VD>>Можно пару слов о проектах написанных тобой на F#-е?

S>Ай, поймал. Нет, публичного предъявить нечего. Из действующего — только скромненький анализатор статистики работы одной специфической промышленной железяки с PC внутри. Специфика работы, понимаешь, не программистской, и даже не админской.

Вот, о том и речь.

S>Да я и не надеялся, что он пойдет прям таки в массы.


И я не надеюсь. А вот Немерле мог бы пойти если его поддержать. Причем, я не против поддержки и F#-а. Я против поддержки именно F# в ущерб остальным, да еще и в привычном для МС закрытом режиме. F# и так самый закрытый язык из тройки.

VD>>С чего бы это? C# же не заменил Васик хотя технически языки почти клоны? А Немерле отличается от Шарпа довольно сильно. Он сложнее и мащьнее. Индусам может не подойти.


S>Васик-шмасик. Васик — это блин традиция, а то местами и диагноз (помнишь, как некоторые ВБ-шники взывыли, когда увидели, что им подсунули под видом VB7?). Надо же было как-то ВБ-шников пересаживать на .NET, не пугая страшной буквой C?


Дык точно так же Немерел и темболее F# не замена Шарпу. Но F# может в лучшем случае привлечь к платформе тех кто не ровно дышитк к ОКамлу. А Немерле двинуть в массы лучшие фичи из ФП. Хороший шарпщик спокойно перейдет на Немреле, а вот на F# — нет.

VD>>Да и какая разница, на замену или рядом? Главное чтобы он был. А чтобы он был нужны вливания денег и поддержка. В прочем, велика вероятность, что он таки будет во преки всему.

S>Дык я ж разве против? Опять-же см. п.2 дисклеймера про богатство выбора. Вот.

Проблема в том, что компилятор и темболее разработка и развите языка — это довольно затратное дело. Вести его на голом энтузиазме очень не просто. И если будут поддерживать скажем F#, а не Немерле забьют, то в результате более перспективный Немрле может сдохнуть, а F# будет прозибать. Другими словами мы получим собаку на сене. Вроде что-то есть и это что-то забьет другое, но вот воспринято это будет очень узким кругом лиц.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.10.07 17:20
Оценка:
Здравствуйте, Schade, Вы писали:

S>В отличие от OCaml, не от F#.

S>
S>(* вот list comprehension  *)
S>[ for e in l when f e -> e ]
S>(* а вот array comprehension  *)
S>[| for e in l when f e -> e |]
S>(* а вот так - IEnumerable comprehension  *)
S>{ for e in l when f e -> e }
S>


Кстати, о приемуществах макросов. Если в коде на Немерле изменить исходный формат, то он все равно будет работать. Например, прокатят и таки варианты:
def my_filter(f, l) { $[x | x in l, f(x)] }
def x = my_filter(_ > 0, array[1, 2, 3, -5, -9, 7]);

или
def my_filter(f, l) { $[x | x in l, f(x)] }
def x = my_filter(_ > 0, array[1, 2, 3, -5, -9, 7] : Collections.Generic.IEnumerable[int]);

более того, если лист-компрехэншон подставить в foreach, то на выходе будет не список, а код итерации. Другими словами макросы позволяют добиться офигительной гибкости. И я почит уверен, что объем кода в них меньше чем тот хардкод что заложен в F#.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 24.10.07 20:07
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Дык, я не против ОКамла на дотнете. Я тоже только за. Как-грисъя — пусть цветут все цветы.

VD>Проблема в другом. Если уж поддерживать F#, то разумно было бы поддержать и Немерле, а то и Скалу с Буу.
Разумно. Почему не стали — . Может, Москаль не так уж и стремился к тому, чтобы далее плотно работать с Немерле? Раз он там так плотно засел за систему доказательства теорем. Кстати, если им там все-таки на первом этапе выделили какое-то финансирование, что-нибудь в плане развития Немерле за этим последовало? Может, просто МС решил, что от этой команды отдачи не будет?

VD>Это все очень перспективные языки. Причем F# среди них самый консервативный.

Его консервативность заключается в Камловом наследии? Не факт, что эта цель (частичная совместимость с Камлом) будет преследоваться в дальнейшей работе.

VD>Потом лично у меня нет даже сомнения, что если бы МС вбухал относительно микроскопические бабки в развитие Немреле и хоть немного помог ему морально (объявил бы о поддержке и малость пропиарил), то Немерле легко сошел бы за очередную псевдо-рпеволюцию созданную МС и навел бы немало шороха. В общем, я уверен, что караз этот язык пропер бы. Пусть он не заменил бы Шарп и темболее Васик, но то что он мог бы занять достойное место в линейке языков и смог бы преманить на свою сторону нехилую часть C#-щиков и C++-ников — это точно.

Как мне кажется, чтобы монстр заметил интересный проект, этому проекту мало быть интересным. Надо еще достаточно громко кричать про себя, чтобы до нужных ушей долетело. И не только на RSDN — здесь нужных ушей МС-а увы нет. Так вот, представь себе, что ты ничего не знаешь про Немерле, и заходишь на nemerle.org. Какое первое впечатление? Что проект давно и успешно скончался. Вот так и Хейлсберг зашел, посмотрел, и, облегчив совесть, ушел. "Ничего не нашел".

VD>В ОКамле вывод типов работает глобально. В нем ожно вообще не указывать типы. Ну, или делать это очень редко.

VD>В простых случаях и в Немерле можно не указывать типы полей (если у них есть простые инициализаторы).

VD>А надо это для:

VD>1. Документирования кода.
VD>2. Для нужд IDE. Без этого скорость работы IDE будет зависить от объема кода, что не приемлемо.

1. Никто не запрещает аннотировать явно, там где это нужно
2. Что есть то есть, IDE подтормаживает (хотя по субъективным впечатлениям просто что-то где-то очень криво написано)

VD>Вот ОКамл обходится. Но ценой тому совсем хреновые сообщения об ошибках и очень плохая поддержка в IDE.

Кстати, сообщения об ошибках, кроме совсем уж клинических случаев, вполне внятные.

VD>Ты ведь не занимался данной проблемой и не понимшь, что многие вещи в коде завязаны друг на друга. Скажем в коде метода может появиться использование другого метода. Это приводит к тому, что по одному метду уже нельзя точно вычислить тип. И таких проблем много.


VD>Скромный вопрос. F# делает это для методов или локальных функций ака let-ов?

let-ы — это не только и не столько локальные функции, функции уровня модуля тоже объявляются let-синтаксисом. Методы классов — по другому. Вывод типов работает и там, и там.

VD>Как показала практика для локальных фунций вывод дженерик-типов смысла не имеет. Мы мишем реальный код и обобщать его нет смысла. Такая задача встает только когда люди играются с языком. Это из серии "а что если?". На практике или обобщается сам метод и тогда все локальные фунции автоматом получаются обобщенными, или этого попросту не требуется.

Для локальных — конечно не имеет, они ведь как правило и вызываются из кода по 1-2 раза.

VD>Более того. Вывод обобщений может завуалировать ошибку. Вывод конкретных типов выявляет больше ошбок.


VD>Ну, а если уж вдруг потребуетс создать обобщенную локальную фунцию, то не грех описать это явно. Там ведь особо напрягаться не приходится.


VD>Ой, настолько надуманный пример, что просто противно. Обобщенные методы должны быть в библиотеках. А там им сам бог велел быть явно аннотированными. Так твой фильт уже давно лежит в станартной библиотеке.

Ой, да шо ви таки с Vermicious Knid'ом прикопались к этому несчастному примеру? Неужели для того, чтобы проиллюстрировать сказанное на словах кодом нужно этот код брать из реального проекта, да еще и так, чтоб без изъяна? Я же сразу сказал — пример банальный и надуманный — всего лишь указать на различие в принципах type inference.
Да и что это была бы за ФП-библиотека без filter, в конце-то концов.

VD>Да и такие анохранизмы как использование статических методов тоже давно канули в лету. Есть же методы расширения.

VD>Продемонстрированный тобой код даже без применения лист-компрехеншона можно записать так:
VD>
VD>def result = [1, 2, 3, -5, -9, 7].Filter(_ > 0);
VD>def result = ["String1", "Str2", "String4"].Filter(str => str.Length > 5);
VD>

VD>Блин, такой интуитивности F#-пу не видать как своих ушей. Тут разве что LINQ может что-то предложить.
Неправда твоя:
let result = ["String1";"String2";"Str3"].Filter (fun x -> x.Length > 5)

Называется, найдите 10 отличий
Кстати, что случилось с нотацией _.Member?
Почему вот так не работает?
def result = ["String1", "Str2", "String4"].Filter(_.Length > 5);


VD>Боюсь, что это все проблемы адаптации Хиндли-Милера к дотнетной системе типов. Скрещивание ужа с ежом всегда было занятием не благодарным.

Но всегда есть надежда, что от ежа и ужа родится корова, несущая золотые страусиные яйца в промышленных масштабах.

VD>В Немерле изначально тоже использовался такой полход. Но где-то по пути своего развния была разработана уникальная система типов и я как пользователь могу сказать, что она удалась на славу. Единствный серьзный недостатко — она довольно тормозная. Но потенциально она позволяет параллельную типизацию, так что есть куда масштабироваться.

Вот пусть и развиваются параллельно. А там, глядишь, и из Хиндли-Милнера, натянутого на .NET что приличное получится.

VD>>>Примеры, плиз в студию, где F# дает что-то больше чем Nemerle. Тогда обсудим. Пока что это похоже на домыслы.

VD>Что-то ответ я так и не увидел?
Да тут все будет спорным получаться. Хотя бы в силу того, что если на мой взгляд, F#-вый вывод типов это преимущество, то на твой — это недостаток.

VD>Просто замечательно. Более того. Тройка Скала/Немерле/Шарп много выигрывают от того, что ведут исследования параллельно и пользуются результатами оных сообщя.

VD>Я же не говорю, что F# маст дай и т.п. Я просто говорю, что МС пытается вкладыват деньги в язык который будет априори чужд большинству ее аудитории и даже не замечает языки которые действительно могли бы выстрелить.

VD>Пойми, что бесмысленно заниматься пенисометрией. F# не плохой язык. Его проблемы не в том, что у него фича-лист меньше чем у Немерле. Его проблема в том, что это на 99% ОКамл который уже не принят индустрией. Ну, сложный он для понимания простых смертных. Нельзя его рассматривать как на расширение того что было. А вот Немерле отлично прокатывает за C#++ на первой стадии. Когда еще там люди освоют паттерн-матчинг, алгеброические типы и разные компрешеншоны, но приемущества они получат сразу. И работать они смогут сразу. Этого у F# не будет никогда.


VD>Посему уж если давать бабки на F#, то глупо не дать их и на Немреле. Более того. Разумно было бы объеденить или хотя бы скоординировать усилия двух направлений. Вместе разультат мог бы оказаться куда лучше. Скажем F# и Немерле могли бы использовать одни и те же общие ФП-библиотеки. Код между ними стал бы переносим. А там уже не загорами фунциональные оптимизации в CLR (Нью-Васюки, значич ).

Сдается мне, что все-таки плохо убеждали. Или они прям надеялись, что добрый дядя из МС сам их заметит, придет, отсыпет бабла — резвитесь, мол, мужики?
Кстати, то что МС таки заметил существование ФП как такового, это уже повод для оптимизма. Если все-таки решатся подрихтовать под это дело CLR (эх, мечты-мечты), то и Немерле от этого выиграет.

VD>С точки зрения поддержки ФП оба языка прекрасны. И поиск среди них более идеального не большее чем попытка выдвать свои субъективные предпочтения за реальность.

О! На том и остановимся.

VD>Проблема в том, что компилятор и темболее разработка и развите языка — это довольно затратное дело. Вести его на голом энтузиазме очень не просто. И если будут поддерживать скажем F#, а не Немерле забьют, то в результате более перспективный Немрле может сдохнуть, а F# будет прозибать. Другими словами мы получим собаку на сене. Вроде что-то есть и это что-то забьет другое, но вот воспринято это будет очень узким кругом лиц.

Ну, в общем, поглядим. Не исключено, что из F# в итоге вылепят что-то очень похожее на Немерле.
Re[15]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.10.07 09:59
Оценка:
Здравствуйте, Schade, Вы писали:

S>Разумно. Почему не стали — . Может, Москаль не так уж и стремился к тому, чтобы далее плотно работать с Немерле? Раз он там так плотно засел за систему доказательства теорем. Кстати, если им там все-таки на первом этапе выделили какое-то финансирование, что-нибудь в плане развития Немерле за этим последовало? Может, просто МС решил, что от этой команды отдачи не будет?


МС решил? О чем ты? Я же теб цитировал Хейльсберга "не нашел документации на сайте". Это при том, что весь сайт — это дукументация. В общем, всем просто все по барабану. Вот Симон был близок к "телу" и прорвался.

S>Его консервативность заключается в Камловом наследии? Не факт, что эта цель (частичная совместимость с Камлом) будет преследоваться в дальнейшей работе.


Как не крути — это факт. Не буду повторяться. Тут уже много было сказано по этому поводу.

S>Как мне кажется, чтобы монстр заметил интересный проект, этому проекту мало быть интересным. Надо еще достаточно громко кричать про себя, чтобы до нужных ушей долетело. И не только на RSDN — здесь нужных ушей МС-а увы нет. Так вот, представь себе, что ты ничего не знаешь про Немерле, и заходишь на nemerle.org. Какое первое впечатление? Что проект давно и успешно скончался. Вот так и Хейлсберг зашел, посмотрел, и, облегчив совесть, ушел. "Ничего не нашел".


Ага нужно кричать прямо в ухо причем тем кто деньги распределяет. Жаль я с ними лично не занаком .

S>1. Никто не запрещает аннотировать явно, там где это нужно


Дык заставляет или нет — это лирика. По жизни это приводит к выбору весьма неэффективных алгоритмов. Если в пакетном режиме, во время компиляции, это прокатывает, то в IDE уже нет.

S>2. Что есть то есть, IDE подтормаживает (хотя по субъективным впечатлениям просто что-то где-то очень криво написано)


Тут все уперается в алгоритмы и оптимизации.

VD>>Вот ОКамл обходится. Но ценой тому совсем хреновые сообщения об ошибках и очень плохая поддержка в IDE.

S>Кстати, сообщения об ошибках, кроме совсем уж клинических случаев, вполне внятные.

Где? В ОКамле? Не смешите мои пятки. А в ФШарпе у членов типов надо специфицировать типы. Это и спасает.

VD>>Скромный вопрос. F# делает это для методов или локальных функций ака let-ов?

S>let-ы — это не только и не столько локальные функции, функции уровня модуля тоже объявляются let-синтаксисом. Методы классов — по другому. Вывод типов работает и там, и там.

В дотнете не бывает ни модулей ни "функций уровня модуля". У него бывают методы.
Что-то не видел кода на F# чтобы в котором был объявлен метод без инлайн-тела и при этом он бы не содержал аннотаций типов.

S>Для локальных — конечно не имеет, они ведь как правило и вызываются из кода по 1-2 раза.


Дык а на уровне методов, типы нужно указывать явно. Так зачем тогда выводить обобщения? Чтобы программист не мог разобраться с тем что происходит?

S>Ой, да шо ви таки с Vermicious Knid'ом прикопались к этому несчастному примеру?


Дык потому прикопались, что пробовали писать на расхваливаемом тобой F#-е и постоянно и много пишем на Немерле. И выводы были однозначными. Писать на Немерле удивительно просто и ненапряжно. А вот когда пытаешся что-то изобразить на F#, то постоянно натыкашся на какие-то проблемы. Интеграция к F# вообще вырубается при наличии малейших ошибок в коде. Не скажу что Немерловая стабильна, но на ней хоть можно писть реальный код.

S> Неужели для того, чтобы проиллюстрировать сказанное на словах кодом нужно этот код брать из реального проекта, да еще и так, чтоб без изъяна?


Желательно. А то вот такие теоретики доказывают все что угодно, а по жизни все совсем наоборот. Это очень похоже на подход Вират. Докапается до какой-то фигни вроде того как должен оператор выглядить, и на основании этого делает вывод, что Оберон это круто, а остальное не достойно созерцания.

Напомню, что разговор начался с того, что ты тут стал утверждать, что писать в ФП стиле на F# значительно проще (или лучше, не помню), чем на Немерле.

S>Неправда твоя:

S>
S>let result = ["String1";"String2";"Str3"].Filter (fun x -> x.Length > 5)
S>

S>Называется, найдите 10 отличий

А Filter — это фунция расширение или просто метод? В моем случае — это фунция расширение, то есть ты сам можешь добавить такие к любому типу. Например, в библиотеке есть фнкция FilterLazy которая работает в отложеном режиме.


S>Кстати, что случилось с нотацией _.Member?


Ничего. Работает как работал.

S>Почему вот так не работает?

S>
S>def result = ["String1", "Str2", "String4"].Filter(_.Length > 5);
S>


А ты подумашь, что ты написал. Перевожу в форму лямбд:
def result = ["String1", "Str2", "String4"].Filter((x => x.Length) > 5);

Естествнно компилятор офигивает. Ты ведь пытаешься сравить функцию с целым, да еще передать результат туда где ожидается функция.
Констркция "_.Length" — это получение фунции из свойства некоторого объекта. Собственно не вижу особой проблемы в подобных случаях воспользоваться полноценной лямбдой. Оверхэд не вилик. Темболее что синтаксис лмябды с одним параметром в Немерле и C# 3.0 очень компактный:
def result = ["String1", "Str2", "String4"].Filter(x => x.Length > 5);


VD>>Боюсь, что это все проблемы адаптации Хиндли-Милера к дотнетной системе типов. Скрещивание ужа с ежом всегда было занятием не благодарным.

S>Но всегда есть надежда, что от ежа и ужа родится корова, несущая золотые страусиные яйца в промышленных масштабах.

Ага. Всегда есть надежда, что завтра умрет неизвестный тебе дальний родственник-миллиардер и оставит тебе пару миллирдов в наследство.

S>Вот пусть и развиваются параллельно. А там, глядишь, и из Хиндли-Милнера, натянутого на .NET что приличное получится.


Не может там ничего приличного получиться. Система типов дотнета не совместима с ней. Это все припарки.

VD>>>>Примеры, плиз в студию, где F# дает что-то больше чем Nemerle. Тогда обсудим. Пока что это похоже на домыслы.

VD>>Что-то ответ я так и не увидел?
S>Да тут все будет спорным получаться. Хотя бы в силу того, что если на мой взгляд, F#-вый вывод типов это преимущество, то на твой — это недостаток.

А... Ну, ясно. В общем, это по русски называется — треп. Сказал бы често, что опыта в Немерле почти не имеешь и F# знаешь тоже не крепко, а заявления основаны на личных предубеждениях.

Приемуществ у F# никаких нет. Из недостатков — отсуствие макросистемы и плохая интеграция с дотнетом. Если вернуться в начало, то не думю, что надо быть семи пядий во лбу, чтобы понять, что код на Немерле будет понятен куда большему числу программистов просто потому, что он С-подобный и использует привычные идиомы и синтаксис.

S>Сдается мне, что все-таки плохо убеждали. Или они прям надеялись, что добрый дядя из МС сам их заметит, придет, отсыпет бабла — резвитесь, мол, мужики?


А кого убеждать то? Такое ощущение что тут везде бродят казначеи из МС.

S>Кстати, то что МС таки заметил существование ФП как такового, это уже повод для оптимизма. Если все-таки решатся подрихтовать под это дело CLR (эх, мечты-мечты), то и Немерле от этого выиграет.


Это да. Но хотелось бы на нем писать и проблем не занть, а не мучиться и вкалывать на то чтобы его до ума довести.

VD>>С точки зрения поддержки ФП оба языка прекрасны. И поиск среди них более идеального не большее чем попытка выдвать свои субъективные предпочтения за реальность.

S>О! На том и остановимся.

Дык тебя за язык никто не тянул. Утверждения надо обосновывать...

S>Ну, в общем, поглядим. Не исключено, что из F# в итоге вылепят что-то очень похожее на Немерле.


Вряд ли. ОКамл там слишком глубоко сидит.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 25.10.07 19:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>МС решил? О чем ты? Я же теб цитировал Хейльсберга "не нашел документации на сайте". Это при том, что весь сайт — это дукументация. В общем, всем просто все по барабану. Вот Симон был близок к "телу" и прорвался.

Просто сайтом никто не занимается. И гляда на фасад проекта создается впечатление, что проект помер. А чтобы убедиться, что это на самом деле не так, нужно приложить хоть какие-то минимальные, но усилия. Никто не захотел — итак неплохо кормят.
У того же F# — немалое коммьюнити. Сайт проекта не замер на месте, Дон регулярно сообщает о новостях. Есть несколько фанских блогов (Robert Pickering, Jon Harrop), издаются книги, есть шарашка Flying Frog Consultancy, которая издает журнал и оказывает консультационные услуги. О нем банально знает больше народу.

VD>Где? В ОКамле? Не смешите мои пятки. А в ФШарпе у членов типов надо специфицировать типы. Это и спасает.

Да не требует F# аннотирования типов для членов класса. Не требует.

VD>В дотнете не бывает ни модулей ни "функций уровня модуля". У него бывают методы.

VD>Что-то не видел кода на F# чтобы в котором был объявлен метод без инлайн-тела и при этом он бы не содержал аннотаций типов.
Это издежки межвидового спаривания
Модуль в переводе на терминологию дотнета модуль — это static class, а функции уровня модуля — соответственно статические мемберы.
Метод без инлайн-тела — это только в interface-файлах. Кстати за это наследие Камла сам повбывав бы. Там это хоть смысл имело, а тут — опять таки зацепились за legacy код.

VD>Дык а на уровне методов, типы нужно указывать явно. Так зачем тогда выводить обобщения? Чтобы программист не мог разобраться с тем что происходит?

И все-таки она вертится! Тьфу, в смысле не требуется указывать типы явно для методов.

VD>Желательно. А то вот такие теоретики доказывают все что угодно, а по жизни все совсем наоборот. Это очень похоже на подход Вират. Докапается до какой-то фигни вроде того как должен оператор выглядить, и на основании этого делает вывод, что Оберон это круто, а остальное не достойно созерцания.

О как. Вирт у нас уже почти матерное слово . Не, это сам знаешь по чьей части (СГ). Я вроде никак не пытался заявить, что F# суть единственно верный и непокобелимый путь.

VD>Напомню, что разговор начался с того, что ты тут стал утверждать, что писать в ФП стиле на F# значительно проще (или лучше, не помню), чем на Немерле.

Утрируешь. Он начался с того, что я сказал, что это интересный проект, который не стоит на месте. Ну да, обмолвился, что Немерле, мол, осторожный шаг в сторону ФП, дык ведь со всех сторон обложился оговорками, что это лишь мое личное мнение.

VD>А Filter — это фунция расширение или просто метод? В моем случае — это фунция расширение, то есть ты сам можешь добавить такие к любому типу. Например, в библиотеке есть фнкция FilterLazy которая работает в отложеном режиме.

Есть аналогичная фича — type augmentation
type 'a List with
    member x.FilterLazy f = Seq.filter f x
    
let result = [1;2;3;4;5;6].FilterLazy (fun x -> x>3)
(* result : int seq *)


Хотя, Немерловский FilterLazy, судя по всему, определен единожды для IEnumerable<T> и автоматом расширяет все типы, реализующие этот интерфейс? Тады +1. Хотя то же самое в F# выглядит не сложнее:
let result = [1;2;3;4;5;6] |> Seq.filter (fun x -> x>3)


VD>Не может там ничего приличного получиться. Система типов дотнета не совместима с ней. Это все припарки.

Ну, это сомнений не вызывает, думаю и у Syme, который как заправский зоотехник их скрещивал. Однако ж интересно, что попытаются сделать с этим дальше. Явно придется что-то под чего-то обрабатывать напильником.

VD>А... Ну, ясно. В общем, это по русски называется — треп. Сказал бы често, что опыта в Немерле почти не имеешь и F# знаешь тоже не крепко, а заявления основаны на личных предубеждениях.

Опыта в Немерле вообще не имею, а что, скрывал?

VD>А кого убеждать то? Такое ощущение что тут везде бродят казначеи из МС.

В том-то и дело, что здесь не бродят. А там, где этот зверь водится, RSDN особо не читают.

VD>Это да. Но хотелось бы на нем писать и проблем не занть, а не мучиться и вкалывать на то чтобы его до ума довести.

Да мучиться и вкалывать вообще мало кому хочется, однако ж...
Re[17]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.10.07 10:35
Оценка:
Здравствуйте, Schade, Вы писали:

S>Утрируешь. Он начался с того, что я сказал, что это интересный проект, который не стоит на месте. Ну да, обмолвился, что Немерле, мол, осторожный шаг в сторону ФП, дык ведь со всех сторон обложился оговорками, что это лишь мое личное мнение.


Так вот, сам по себе Nemerle, без этой самой макросистемы, как мне кажется, представляет собой довольно осторожный шаг в сторону ФП. Возможно, соизмеримый с тем, чего планируется достигнуть в рамках эволюции C#, пусть даже и с заимствованием немерловых идей. F# все-таки более ориентирован на функциональный стиль программирования, пусть и ценой существенного отличия от мэйнстрима в синтаксисе, и, видимо, поэтому стал "более проходным" с точки зрения MS, поскольку в случае Nemerle получается некоторое дублирование.


И напомню, что ты так и ни продемонстрировал ни одного приемущества F# в сфере функционального программирования. Собственно это просто невозможно сделать. Все что предлагает ФП в Немерле есть. Это тебе и пытались объяснить.

VD>>А Filter — это фунция расширение или просто метод? В моем случае — это фунция расширение, то есть ты сам можешь добавить такие к любому типу. Например, в библиотеке есть фнкция FilterLazy которая работает в отложеном режиме.

S>Есть аналогичная фича — type augmentation
S>
S>type 'a List with
S>    member x.FilterLazy f = Seq.filter f x
    
S>let result = [1;2;3;4;5;6].FilterLazy (fun x -> x>3)
S>(* result : int seq *)
S>


S>Хотя, Немерловский FilterLazy, судя по всему, определен единожды для IEnumerable<T> и автоматом расширяет все типы, реализующие этот интерфейс?


Да. А что нельзя сделать что-то вроде:
S>
type 'a IEnumerable with
    member x.FilterLazy f = ...


И вообще, что за за приколы? Выглядит как дописывание тела класса извне. Я что могу таким макаром и виртуальный метод залудить?

S> Тады +1. Хотя то же самое в F# выглядит не сложнее:

S>
S>let result = [1;2;3;4;5;6] |> Seq.filter (fun x -> x>3)
S>


Это совсем не то, и таки опять таки поддерживается в Немерле. Реализовано как и оператор >> в классе функции:
public static @|> (a : 'p1, fac : 'p1 -> 'r) : 'r
{
    fac(a)
}    

public static @|> (a : 'p1, fac : 'p1 -> void) : void
{
    fac(a)
}



VD>>Не может там ничего приличного получиться. Система типов дотнета не совместима с ней. Это все припарки.

S>Ну, это сомнений не вызывает, думаю и у Syme, который как заправский зоотехник их скрещивал. Однако ж интересно, что попытаются сделать с этим дальше. Явно придется что-то под чего-то обрабатывать напильником.

Ну, а если обработать, то будет что-то новое. Вот в Немерле как раз так и поступили отказавшись от вывода обобщений. Я по началу тоже "страдал", но потом понял, что на практике это проблем не вызвает. Обобщеный код должен быть исключительно в библиотеках и хэлпер-модулях, а там описания типов очень оплезны. Так что по жизни получился весьма удобный подход. Конечно если говорить о гибридном языке скрещивающем ООП с ФП. Для Хаскеля это было бы видимо не очень красиво. В прочем, лично меня коробят системы типов основанные на Хидли-Милере. Конкретно коробит то, что в них идентификаторы сатновятся уникальными. Мне стандарнтая С++-подобная схема больше нравится (когда есть типы и их методы имеют локальные (внутри типа) имена).

VD>>А... Ну, ясно. В общем, это по русски называется — треп. Сказал бы често, что опыта в Немерле почти не имеешь и F# знаешь тоже не крепко, а заявления основаны на личных предубеждениях.

S>Опыта в Немерле вообще не имею, а что, скрывал?

А тогда к чему было говорить процитированное выше? Собственно весь сыр бор из этого и пошел. Как можно заявлять о том что Х лучше преспособленно для Y чем Z если о Z только мельком слыхивал?

VD>>А кого убеждать то? Такое ощущение что тут везде бродят казначеи из МС.

S>В том-то и дело, что здесь не бродят. А там, где этот зверь водится, RSDN особо не читают.

Боюсь, что эти звери сводки с Вол-стрит читают.

VD>>Это да. Но хотелось бы на нем писать и проблем не занть, а не мучиться и вкалывать на то чтобы его до ума довести.

S>Да мучиться и вкалывать вообще мало кому хочется, однако ж...

Однако же на F# бабло дают, а не более перспективный в смысле популярности язык, нет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: F# - A Functional Programming Language
От: alvas  
Дата: 26.10.07 13:50
Оценка: 4 (1) +3
VD>Потом лично у меня нет даже сомнения, что если бы МС вбухал относительно микроскопические бабки в развитие Немреле и хоть немного помог ему морально (объявил бы о поддержке и малость пропиарил), то Немерле легко сошел бы за очередную псевдо-рпеволюцию созданную МС и навел бы немало шороха. В общем, я уверен, что караз этот язык пропер бы. Пусть он не заменил бы Шарп и темболее Васик, но то что он мог бы занять достойное место в линейке языков и смог бы преманить на свою сторону нехилую часть C#-щиков и C++-ников — это точно.

Мне кажется что спонсором может стать не только Майкрософт. Нужно лишь
1. Чаще обновлять главную страницу Nemerle.org. Чтобы мобилизировать интересующихся языком.
+ можно собрать ссылки в блогах про Nemerle и выложить их на Nemerle.org
+ завести свои блоги на сайте
+ ...

А то не понятно (особенно если ты не русскоговорящий)
а) где брать последнюю версию. Спасибо за ссылку http://nemerle.org/Download
б) куда задавать вопросы. Например в конфе мой вопрос по ASP.Net + Nemerle до сих пор лежит без ответа. Спасибо "Блудов Павел" помог.

2. Написать на главной странице или проспамить всяких там Mozilla или Apache Fundation на предмет спонсорской поддержки.

Есть еще предложение выложить проект на Codeplex или SourceForge...
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[15]: F# - A Functional Programming Language
От: alvas  
Дата: 26.10.07 13:55
Оценка: 7 (1)
A>Мне кажется что спонсором может стать не только Майкрософт. Нужно лишь
A>1. Чаще обновлять главную страницу Nemerle.org. Чтобы мобилизировать интересующихся языком.
A>+ можно собрать ссылки в блогах про Nemerle и выложить их на Nemerle.org
A>+ завести свои блоги на сайте
A>+ ...

A>А то не понятно (особенно если ты не русскоговорящий)

A>а) где брать последнюю версию. Спасибо за ссылку http://nemerle.org/Download
A>б) куда задавать вопросы. Например в конфе мой вопрос по ASP.Net + Nemerle до сих пор лежит без ответа. Спасибо "Блудов Павел" помог.

A>2. Написать на главной странице или проспамить всяких там Mozilla или Apache Fundation на предмет спонсорской поддержки.


A>Есть еще предложение выложить проект на Codeplex или SourceForge...


Еще вспомнил. Мой знакомый парень из Белоруссии сказал что они с другом используют Nemerle в коммерческих разработках. Всем довольны и если все выгорит то передадим 2000$ или Владу или IT. Так что можно пожертвования собирать с комьюнити в конце концов...
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[15]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 29.10.07 18:00
Оценка:
Здравствуйте, alvas, Вы писали:

A>Мне кажется что спонсором может стать не только Майкрософт. Нужно лишь

A>1. Чаще обновлять главную страницу Nemerle.org. Чтобы мобилизировать интересующихся языком.

Это мы постараемся делать. Уже получены права на ее редактирования русской частью комьюнити. Первые изменения уже сделаны.

A>+ можно собрать ссылки в блогах про Nemerle и выложить их на Nemerle.org


Вся информация идет в конференции. Блоги, что были (но их мало) и так лежат на nemerle.org.

A>+ завести свои блоги на сайте


Да, уж. Без модных прбамбасов, сколь бы бессмысленными они ни были, не обойтись.

A>+ ...


Что-то мне подсказывает, что все это мало что даст с точки зрения поддержки языка. Тут нужны контакты. Почт уверен, что если пойти официальным путем, то мало что получится. В прочем попробовать все же стоит.

A>А то не понятно (особенно если ты не русскоговорящий)

A>а) где брать последнюю версию. Спасибо за ссылку http://nemerle.org/Download

Вроде бы это мы уже поправили. Возможно надо сделать более заметнуд ссылку прямо сверху главной страницы.

A>б) куда задавать вопросы. Например в конфе мой вопрос по ASP.Net + Nemerle до сих пор лежит без ответа. Спасибо "Блудов Павел" помог.


Что за вопрос? В общем, то могу ответить "заочно". Ранее поддержка ASP.Net была реализована на минимальном уровне и по причине глюков не работала с ASP.Net 2.0. Однако о поддержке было напсано (и написано до сих пор) на сайте.

Будов реализовал (на сколько до конца не знаю) подержку ASP.Net 2.0 и Студии. Эта поддержка есть только в свежей CTP-версии. Она доступна на сайте языка (и у нас).

A>2. Написать на главной странице или проспамить всяких там Mozilla или Apache Fundation на предмет спонсорской поддержки.


Хм. Врдя ли это их проект. Но в принципе разумно. Надо бы подготовить бумажку и попробовать простучат все каналы что найдутся.

A>Есть еще предложение выложить проект на Codeplex или SourceForge...


Задолбаемся синхронизировать репозитории. Если только ссылку дать. В прочем, пиара в en-тете явно не хватает. Тут ты прва. Надо бы еще поговорить с Михалем, он вроде как сейчас общается с CLR team. Может через них можно закинуть удочку.

В обещм, согласен, что нужно бы подергаться на эту тему. А вось...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 01.11.07 14:45
Оценка: 18 (1)
Здравствуйте, nikov, Вы писали:

N>Мне кажется, что это не просто пиар. Нескольких моих знакомых (не индусов ) сейчас перебросили из C# compiler team на F#.

Здесь приглашают поработать над проектом интеграции. Правда странно, что Product: Visual C#.
Re[10]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 02.11.07 07:52
Оценка: 6 (1)
EC>Здесь приглашают поработать над проектом интеграции. Правда странно, что Product: Visual C#.
А вот здесь объяснение почему в C# team.
Re[6]: F# - A Functional Programming Language
От: prVovik Россия  
Дата: 02.11.07 14:36
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>>>Им и раньше не один человек занимался. К тому же эти люди были очень близки с реальными разработчиками из МС, напиример, с разработчиками из команды Шарпа. Вот только из тройки языков: Scala, Nemerle и F# последний является самым не проходным.


D>>Не проходным куда? На амазоне по нему можно например две книги найти в отличии от двух проходных.


VD>В мэйнстрим. Синтаксис и семантика ОКамла — это приговор для языка пытающегося стать популярным. Не будут (в массе своей) люди привыкшие к С/Паскале-подобному синтаксису ломать свое сознание и привыкать к МЛ-е подобному.


Ничего, если приспичит, то сломают, никуда не денутся.

VD>F# — это довольно прямолинейная адаптация ОКамла на дотнет, когда как Скала и Немерле — это новые языки взаимствовашие из МЛ-е подобных языков идеологию. В них все функциональные фичи адаптированны к ОО-миру дотнета/явы.


И что с того? Какое это имеет отношение к "проходимости" языка в мире Майкрософт?
лэт ми спик фром май харт
Re: F# - A Functional Programming Language
От: Курилка Россия http://kirya.narod.ru/
Дата: 04.11.07 07:52
Оценка: 12 (2)
Здравствуйте, G2, Вы писали:

[cut]

В гугл-группе JVM languages Jon Harrop (автор OCaml/F# for Scientists и F# for Visualization, вроде как собирается написать подобную книгу по скале) описал аргументы, почему на его взгляд F# — более правильный функциональный язык, по сравнению со Скалой. Основные моменты — многословность, слабый вывод типов и слабая проверка полноты паттерн-матчинга, не очень убеждающе, но всёж...
P.S. Искать подходящее сообщение, куда можно было ответить лень, поэтому пишу в корень
Re[2]: F# - A Functional Programming Language
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.11.07 09:56
Оценка:
Здравствуйте, Курилка, Вы писали:

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


К>[cut]


К>В гугл-группе JVM languages Jon Harrop (автор OCaml/F# for Scientists и F# for Visualization, вроде как собирается написать подобную книгу по скале) описал аргументы, почему на его взгляд F# — более правильный функциональный язык, по сравнению со Скалой. Основные моменты — многословность, слабый вывод типов и слабая проверка полноты паттерн-матчинга, не очень убеждающе, но всёж...

К>P.S. Искать подходящее сообщение, куда можно было ответить лень, поэтому пишу в корень

А вот ещё он добавляет по поводу функциональных языков на .Net/JVM, приводится пример, что исключения в окамле в 6 раз быстрее чем в плюсах, но в F# они в 600 медленнее.
Re: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 16.11.07 08:47
Оценка:
Новые подробности.
Re[7]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.07 09:37
Оценка:
Здравствуйте, prVovik, Вы писали:

VD>>В мэйнстрим. Синтаксис и семантика ОКамла — это приговор для языка пытающегося стать популярным. Не будут (в массе своей) люди привыкшие к С/Паскале-подобному синтаксису ломать свое сознание и привыкать к МЛ-е подобному.


V>Ничего, если приспичит, то сломают, никуда не денутся.


Не приспичит. Любую программу можно написть на С или даже ассемблере. Чтобы понять, что дает язык его нужно сначала освоить. А в случае с F# этого попросту не лбудет.

VD>>F# — это довольно прямолинейная адаптация ОКамла на дотнет, когда как Скала и Немерле — это новые языки взаимствовашие из МЛ-е подобных языков идеологию. В них все функциональные фичи адаптированны к ОО-миру дотнета/явы.


V>И что с того? Какое это имеет отношение к "проходимости" языка в мире Майкрософт?


Читай выше (первая цитата).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.07 09:37
Оценка: 1 (1)
Здравствуйте, Курилка, Вы писали:

К>А вот ещё он добавляет по поводу функциональных языков на .Net/JVM, приводится пример, что исключения в окамле в 6 раз быстрее чем в плюсах, но в F# они в 600 медленнее.


По-моему он маньяк. Какая разница какая там скорость у исключений? У него программы из исключенй состоят что ли?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: F# - A Functional Programming Language
От: Курилка Россия http://kirya.narod.ru/
Дата: 19.11.07 10:57
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Курилка, Вы писали:


К>>А вот ещё он добавляет по поводу функциональных языков на .Net/JVM, приводится пример, что исключения в окамле в 6 раз быстрее чем в плюсах, но в F# они в 600 медленнее.


VD>По-моему он маньяк. Какая разница какая там скорость у исключений? У него программы из исключенй состоят что ли?


Ну... маньяки тоже имеют право на существование, пока они не ущемляют прав других людей
Re[4]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 19.11.07 19:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>По-моему он маньяк. Какая разница какая там скорость у исключений? У него программы из исключенй состоят что ли?

Некоторые с перепугу на return codes переходят. А вообще, если что-то работает быстрее, при прочих равных, то почему бы и нет?
now playing: Anthony Steele — Sugar
Re[5]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.11.07 13:42
Оценка:
Здравствуйте, EvilChild, Вы писали:

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


VD>>По-моему он маньяк. Какая разница какая там скорость у исключений? У него программы из исключенй состоят что ли?

EC>Некоторые с перепугу на return codes переходят. А вообще, если что-то работает быстрее, при прочих равных, то почему бы и нет?

Потому что сравнение несущественных факторов путь к профанации. Скажем если у одной марки машыны можно быстрее получить доступ к запаске ничего не говорит о приемуществе этой машины в целом. Ее надо доставать раз в год и даже если ради этого прийдется открыть багажник — это ни сколичко не напрягает.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 20.11.07 17:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>По-моему он маньяк. Какая разница какая там скорость у исключений? У него программы из исключенй состоят что ли?

EC>>Некоторые с перепугу на return codes переходят. А вообще, если что-то работает быстрее, при прочих равных, то почему бы и нет?

VD>Потому что сравнение несущественных факторов путь к профанации. Скажем если у одной марки машыны можно быстрее получить доступ к запаске ничего не говорит о приемуществе этой машины в целом. Ее надо доставать раз в год и даже если ради этого прийдется открыть багажник — это ни сколичко не напрягает.


Там шла речь о том насколько пригодны разные виртуальные машины для реализации функциональных языков. Перечислялись различия между ними. Одним из них была дороговизна исключений. Никаких глобальных выводов не делалось. Ты бы пост по ссылке прочёл прежде чем кого-то маньяком объявлять.
now playing: Anthony Steele — Cease Effect
Re[7]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.07 10:18
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Там шла речь о том насколько пригодны разные виртуальные машины для реализации функциональных языков. Перечислялись различия между ними. Одним из них была дороговизна исключений. Никаких глобальных выводов не делалось. Ты бы пост по ссылке прочёл прежде чем кого-то маньяком объявлять.


А зачем обсуждать какие-то не относящиеся к делу мелкие детали? Зачем нужно добиваться невероятных скоростей в обработке исключений?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: F# - A Functional Programming Language
От: Schade Россия  
Дата: 21.11.07 11:39
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>А зачем обсуждать какие-то не относящиеся к делу мелкие детали? Зачем нужно добиваться невероятных скоростей в обработке исключений?


Товарисч сетует на скорость обработки исключений постольку, поскольку, по его словам, в ML-подобных языках использование исключений в неисключительных ситуациях является нормой. Уж не знаю, так ли это, либо это просто его личная привычка, и вообще насколько разумно строить логику на исключениях — не в этом суть. Видимо, при портировании камлового кода столкнулся с существенным замедлением. Смысл его поста — в том, что ФП-языки существенно просаживаются в производительности при переходе на .NET платформу, и исключения — одна из частностей.
Re[9]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.07 13:22
Оценка:
Здравствуйте, Schade, Вы писали:

S>Товарисч сетует на скорость обработки исключений постольку, поскольку, по его словам, в ML-подобных языках использование исключений в неисключительных ситуациях является нормой. Уж не знаю, так ли это, либо это просто его личная привычка, и вообще насколько разумно строить логику на исключениях — не в этом суть. Видимо, при портировании камлового кода столкнулся с существенным замедлением. Смысл его поста — в том, что ФП-языки существенно просаживаются в производительности при переходе на .NET платформу, и исключения — одна из частностей.


Это его личные тараканы. Сам пишу на одном из ФЯ который не только не просаживается по производительности, но и вообще был создан под дотнет.

Ну, а то что кто-то там считает в порядке вещей использовать исключения для организации логики программ — это уже разговор отдельный. На мой взгляд — это отличный путь привести большой проект в неработоспособное состояние. Гогика на исключениях не чем не лучше логики на готу. Даже хуже, так как действует в глобальном контексте. Сам не раз страдал от этого.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: F# - A Functional Programming Language
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 21.11.07 13:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, а то что кто-то там считает в порядке вещей использовать исключения для организации логики программ — это уже разговор отдельный. На мой взгляд — это отличный путь привести большой проект в неработоспособное состояние. Гогика на исключениях не чем не лучше логики на готу. Даже хуже, так как действует в глобальном контексте. Сам не раз страдал от этого.


Каждый, кто ловит исключение организует на них логику Так что ты подумай, может ты не страждаешь, а наслаждаешся этим?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[10]: F# - A Functional Programming Language
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 21.11.07 13:49
Оценка: 8 (1)
Здравствуйте, VladD2, Вы писали:

VD>Ну, а то что кто-то там считает в порядке вещей использовать исключения для организации логики программ — это уже разговор отдельный. На мой взгляд — это отличный путь привести большой проект в неработоспособное состояние. Гогика на исключениях не чем не лучше логики на готу. Даже хуже, так как действует в глобальном контексте. Сам не раз страдал от этого.


Немного оффтопик, но, полагаю, будет интересно:
via thesz

От: Michael Nikolaev — просмотр профиля
Дата: Пн. 13 Янв. 2003 01:35
Электронная почта: Michael Nikolaev <michael.nikol...@p40.f58.n463.z2.fidonet.org>
Группы: fido7.su.softw


Hello Alexander!

Saturday January 11 2003 00:33, Anton Moscal wrote to you:

AM> From: "Anton Moscal" <m...@post.tepkom.ru>

AM> Fri Jan 10 2003 16:05, Alexander Krotov wrote to Vitaly Lugovsky:

AK>> From: a...@despammed.com (Alexander Krotov)

AK>> Vitaly Lugovsky <v...@ontil.ihep.su> wrote:

VL>>> А кто когда либо обещал возможность писать эффективно на
VL>>> ленивых чисто функциональных языках? Хочешь оптимизаций —
VL>>> используй императивные фичи, вроде тех же ексепшинов...

AK>> Hе флейма ради, а токма из любопытства:
AK>> исключения, как мне до сих пор кажется, являются скорее
AK>> порождением FP, чем императивщины. All, Так ли это ?

Hасколько я помню, это не совсем так. Исключения понадобились для выpажения
семантики GOTO пpи спецификации языков типа ПЛ/1 на языке спецификаций META-IV
Венского метода спецификаций. Основными pазpаботчиками там были
D. Bjorner, C.B, Jones. Это где-то 1977-1978 гг. Если я сильно поищy,
то, может быть, даже найдy y себя их "дpевние" статьи по этомy поводy.
Там было две основные констpyкции — неpекypсивная и pекypсивная:

1. trap exit(id) with F(id) in C(...)

Если пpи вычислении С(...) исключение, поpождённое опеpатоpом exit(v) не бyдет
пеpехвачено внyтpи этого блока, его значение связывается с идентификатоpом
id и вычисляется выpажение F(id), значение котоpого и бyдет тогда pезyльтатом
в?числения всего выpажения. Исключения в F(id) "пpоходят наpyжy", т.е. должны
пеpехватываться "охватывающими" выpажениями.

2. tixe [F(i) -> G(i) | P(i)] in C(...) Здесь значение исключения
2. tixe [F(i) -> сопоставляется с обpазцом F(j). Если для этого
обpазца выполняется yсловие, заданное пpедикатом P(j), то вычисляется
выpажение G(j). Если пpи вычислении этого выpажения возникнет исключение,
снова пpоизводится сопоставление с обpазцом и т.д., пока пpедикат не бyдет
выполняться для исключения, либо исключений не бyдет.

Исключения С++ весьма похожи на пеpвый ваpиант, не пpавда ли?
Это почти 20 лет спyстя!

C.B. Jones доказывал в каких-то своих pаботах эквивалентность этого
механихма и механизма "continuations" (не знаю даже, как это по-pyсски
сказать).

Я сам пpогpаммиpовал с использованием ваpианта этого механизма на C еще в
сеpедине 80-х. Помню, что многие тогда меня pyгали, потомy, что не могли
вpyбиться в смысл соответствyющих констpyкций.

Подpобнее об этом можно почитать в
Lecture Notes in Computer Science. #61. The Vienna Development Method:
Th Meta-Language. Springer-Verlag< 1978.

AM> Видимо нет. Исключения позволяют определить порядок вычисления
AM> подвыражений, а потому не являются "pure functional" (насколько я
AM> помню — в Java с исключениями связаны похожие проблемы с
AM> неоднозначностью семантики).

AM> "pure functional" решением проблемы является явный возврат состояния:
AM> то есть тип вроде:

AM> data Value a = Value a | Error String

AM> и операция последовательного исполнения (см. монады):

a >>> = b =
AM> case a of
AM> | Error msg -> Error msg
AM> | Value a -> b a

AM> Hо реально — это довольно нетривиальная тема. Монады imho — чуть ли не
AM> единственая нетривальная управляющая структура, которая была
AM> изобретена с времен структурного программирования. Тут на пальцах
AM> объяснить довольно трудно.

AK>> --
AK>> Успехов,
AK>> Саша.

AM> Антон

AM> -+- ifmail v.2.15dev5
AM> + Origin: FidoNet Online — http://www.fido-online.com (2:5020/175.2)

Всех благ,
Михаил

E-Mail: m...@gu.kiev.ua

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: F# - A Functional Programming Language
От: EvilChild Ниоткуда  
Дата: 21.11.07 15:34
Оценка: +2 :)
Здравствуйте, VladD2, Вы писали:

S>>Товарисч сетует на скорость обработки исключений постольку, поскольку, по его словам, в ML-подобных языках использование исключений в неисключительных ситуациях является нормой. Уж не знаю, так ли это, либо это просто его личная привычка, и вообще насколько разумно строить логику на исключениях — не в этом суть. Видимо, при портировании камлового кода столкнулся с существенным замедлением. Смысл его поста — в том, что ФП-языки существенно просаживаются в производительности при переходе на .NET платформу, и исключения — одна из частностей.


VD>Это его личные тараканы. Сам пишу на одном из ФЯ который не только не просаживается по производительности, но и вообще был создан под дотнет.

Мощный аргумент, особенно учитывая тот факт, что его ниоткуда не портировали и просесть у него возможности не было. Расскажи на основании чего сделан вывод об осутствии просаживания.
Re[11]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.07 16:14
Оценка: +1
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Каждый, кто ловит исключение организует на них логику


Ага. Только одни реализуют на них логику приложения, а другие логику обработки ошибок. Лично я принадлежу ко второй группе. Более того, стараюсь обрабатывать исключения по минимуму.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: F# - A Functional Programming Language
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.07 16:27
Оценка: :)
Здравствуйте, EvilChild, Вы писали:

EC>Расскажи на основании чего сделан вывод об осутствии просаживания.


На основании того, что код работает со скоростью аналогичного написанного на С++, а исключения используются только по их прямому предназначению.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: F# - A Functional Programming Language
От: BulatZiganshin  
Дата: 06.12.07 11:32
Оценка: 10 (2)
Здравствуйте, lomeo, Вы писали:

L>Hасколько я помню, это не совсем так. Исключения понадобились для выpажения

L>семантики GOTO пpи спецификации языков типа ПЛ/1 на языке спецификаций META-IV
L>Венского метода спецификаций. Основными pазpаботчиками там были
L>D. Bjorner, C.B, Jones. Это где-то 1977-1978 гг.

исключения были в клу (реализовано в 75-77г.), до этого в мезе и даже pl/1
Люди, я люблю вас! Будьте бдительны!!!
Re[12]: F# - A Functional Programming Language
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 06.12.07 11:45
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>исключения были в клу (реализовано в 75-77г.), до этого в мезе и даже pl/1


О! Интересно! Источник есть?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: F# - A Functional Programming Language
От: фдычун  
Дата: 17.11.08 21:08
Оценка:
Введение в F# на PDC2008
http://channel9.msdn.com/pdc2008/TL11/
прямая ссылка на видео
http://mschnlnine.vo.llnwd.net/d1/pdc08/WMV-HQ/TL11.wmv
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.