Синтаксис должен быть логичным, простым Мне нравятся многие функции и магия F #, но в нем нет макросов.
Целью F # является VS2010 и, возможно (возможно), большая команда разработчиков, и он похож на Haskell (с ним можно создавать легкие программы для Linux, и это весело)
Цель Nemerle - макросы, и я думаю, что мне больше нравится некоторый синтаксис Nemerle.
и большинству людей нравится C # ...
- Итак, язык должен быть перспективным.
- Синтаксис должен быть логичным, простым для понимания.
понять, аккуратно и мощно (меньше
code)
- Это должно быть легко использовать с .NET
- Итак, я уже закрыл себя с помощью
выбрал из этих 3.
- Я могу использовать их все, кроме одного. Для меня это не так просто.
например, мне нравится (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; }
C #:
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;
}
}
и вот код nemerle, который я уже не могу преобразовать в 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; }
Сравнение с C #:
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 #, C #, а также, если вы видите, что я делаю это неправильно, потому что я не уверен в других способы сделать одно и то же.