J'ai un nouveau projet dans mon TODO et je ne peux pas choisir entre F# et Nemerle.
Je suis actuellement en train d'apprendre F# et j'ai quelques projets sur Nemerle.
J'aime la manière F#, j'aime l'indentation par défaut (je veux aussi l'indentation par défaut pour nemerle2), j'aime beaucoup de fonctionnalités et de magie de F# mais il n'y a pas de macros.
L'objectif de F# est VS2010 et peut-être (peut-être) une plus grande équipe de développeurs et il ressemble à Haskell (on peut créer des programmes Linux légers avec et c'est amusant).
Le but de Nemerle est les macros et je pense que j'aime plus certaines syntaxes de Nemerle.
et la plupart des gens aiment juste le C#...
- La langue doit donc être une perspective
- La syntaxe doit être logique, facile à comprendre, soignée et puissante (moins de code)
- Il doit être facile à utiliser avec .NET
- Donc je me suis déjà fermé avec le choix de ces 3 personnes.
- Je peux les utiliser tous, mais qu'en est-il du choix d'un seul. Ce n'est pas si facile pour moi.
juste par exemple j'aime bien (Nemerle)
match(STT)
| 1 with st= "Summ"
| 2 with st= "AVG" =>
$"$st : $(summbycol(counter,STT))"
beaucoup plus que (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# (j'espère ne pas me tromper ici) :
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;
}
}
et voici le code de Nemerle que je ne peux déjà pas convertir en F# (donc je ne fais que l'apprendre) ...
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; }
Comparaison avec 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;
}
}
Il est clair que le code Nemerle est plus facile à supporter et plus lisible.
@Brian C'est pourquoi je demande, montrez-moi si c'est réel pour rendre cela plus facile sur F#, C# aussi si vous voyez que je le fais mal parce que je ne suis pas sûr des autres façons de faire clairement la même chose.