Получил новый проект в моем TODO и не может выбрать F # или Nemerle.
В настоящее время я изучаю F # и имею некоторые проекты на Nemerle.
Мне нравится F # way, мне нравится отступ по умолчанию (также я хочу отступать по умолчанию для nemerle2), мне нравятся многие функции и магия F #, но макросов нет.
Целью F # является VS2010 и, может быть, (возможно) более крупная команда разработчиков, и она выглядит как Haskell (может создавать легкие программы Linux с ней, и это весело).
Цель Nemerle - это макросы, и я думаю, что мне больше нравится синтаксис Nemerle.
и большинство людей просто как С#...
- Таким образом, язык должен быть перспективным.
- Синтаксис должен быть логичным, простым понимать, аккуратно и мощно (меньше код)
- Он должен быть простым в использовании с .NET
- Итак, я уже закрыл себя выбрал из этих трех.
- Я могу использовать их все, кроме как выбрать. Мне это не так легко.
просто, например, мне нравится (Nemerle)
match(STT)
| 1 with st= "Summ"
| 2 with st= "AVG" =>
$"$st : $(summbycol(counter,STT))"
намного больше (F #)
let (|Let|) v e = (v, e)
match stt with
| Let "Summ" (st, 1)
| Let "AVG" (st, 2) -> srintf "%s ..." st
F #:
["A"; "B"] |> List.iter (fun s -> printfn "%d" s.Length)
Nemerle:
["A", "B"].Iter(x => printf("%d", x.Length))
F # (надеюсь, что не ошибаюсь здесь):
let type X =
let mytable a = ""
let mytable b = ""
new(A, B) = {
a <- A
b <- B }
member X.A
with get = a
member X.B
with get = a
Nemerle:
[Record]
class X
public A : string { get; }
public B : string { get; }
С#:
class X
{
private readonly string _a;
public string A { get { return _a; } }
private readonly string _b;
public string B { get { return _b; } }
public X(string a, string b)
{
_a = a;
_b = b;
}
}
и вот код немерского я уже не могу преобразовать в F # (так что я только его изучаю)...
abstract class ABase
abstract public A : string { get; }
interface IB
B : string { get; }
[Record]
class My : ABase, IB
public override A : string { get; }
public virtual B : string { get; }
Сравнение с С#:
abstract class ABase
{
abstract public string A { get; }
}
interface IB
{
string B { get; }
}
class My : ABase, IB
{
private readonly string _a;
public override A : string { get { return _a; } }
private readonly string _b;
public virtual B : string { get { return _b; } }
public My(string a, string b)
{
_a = a;
_b = b;
}
}
Очевидно, что код Nemerle легче поддерживать и читать более легко.
@Brian Итак, почему я спрашиваю, покажите мне, действительно ли это сделать проще на F #, С#, также если вы видите, что я делаю это неправильно, потому что я не уверен в других способах чтобы сделать то же самое.