[nem-pl] Uwagi różne
Marcin 'Qrczak' Kowalczyk
qrczak at knm.org.pl
Wed Feb 18 22:14:50 CET 2004
Witam. Na oko podoba mi się Nemerle - wygląda mniej więcej tak, jak
wyglądałby mój język, gdyby był statycznie typowany i .NET-owy.
Drobne błędy na <http://nemerle.org/csharp-diff.html>:
- zawiera link do nieistniejącego <http://nemerle.org/functional-values>,
- "begging" zamiast "beginning",
- ostatnia sekcja (7. The same) wygląda podejrzanie.
Chciałem sprawdzić szybkość pod linuksowym mono (i porównać z szybkością
mojego kompilatora). Przetłumaczyłem testowy program na Nemerle, robiąc
tylko dwa błędy ("if" zamiast "when" oraz nie zwróciłem uwagi, że
tablica jest inicjalizowana fałszem - w pozostałych językach, na które
to tłumaczyłem, tzn. w moim, w OCamlu, w Perlu i w Pythonie akurat można
było inicjalizować też prawdą, więc tam tablica była zanegowana):
--------
using System.Console;
class Primes {
static Main () : void
{
def d = 1000;
def n = 2 * d * d;
def isNotPrime = array (n);
Write ("2");
for (mutable i <- 0; i < d; i <- i + 1) {
unless (isNotPrime[i]) {
def p = 2 * i + 3;
Write (" {0}", p);
for (mutable j <- i + p; j < n; j <- j + p)
isNotPrime[j] <- true
}
};
for (mutable i <- d; i < n; i <- i + 1) {
unless (isNotPrime[i])
Write (" {0}", 2 * i + 3)
};
WriteLine ()
}
}
--------
$ ncc PrimesVectorN.n
____________________________________________________________
$ mono ./out.exe
2 3zsh: killed mono ./out.exe
Po zamianie 1000 na 100 działa - w programie chyba nie ma błędu?
To tylko u mnie się sypie czy nie?
Zakładając, że ta sprawa zostanie rozwiązana - jak skompilować program
tak, żeby najszybciej działał, żeby porównać szybkość z innymi językami?
W szczególności przy bardzo małej tablicy program wykonuje się przez
0.17s - zgaduję, że to JIT; można to jakoś wyeliminować i prekompiliwać
do natywnego kodu? Jeśli wąskim gardłem jest Write i interpretowanie
formatu, to jak to zapisać lepiej?
Z drobiazgów, które mi się nie podobają:
- ncc ma opcję -out:STRING a nie -o STRING jak "każdy" kompilator,
- trzeba opakowywać nawet krótkie programy w klasę i metodę,
- nie wiem, skąd wziąć dokumentację biblioteki .NET - moglibyście gdzieś
wspomnieć, żebym nie zgadywał, że jest Write obok WriteLine i że
WriteLine może być też bezparametrowe, tylko żebym to przeczytał :-)
- "Nemerle Language Reference" nie mówi nic o wyrażeniu "array (n)".
Więcej uwag będzie kiedyś indziej.
Macie konkurencję :-) Mój język nie jest co prawda całkiem gotowy, ale
kompilator już działa i niedługo będzie bootstrapowany samym sobą -
wtedy pokażę go światu. Dla porównania tak ten program wygląda po
mojemu; mamy podobne gusta w sprawach składni definicji zmiennych i
funkcji, średników, klamer, stopnia funkcyjności (też mam mutable i
immutable wiązania, domyślnie immutable), nawet konwencji wielkości
liter (u Was przez .NET, u mnie niezależnie):
--------
let D = 1000;
let N = 2*D*D;
let IsPrime = Vector (Fill N True);
Write 2;
Each (Range 0 D) ?i {
if IsPrime at i {
let p = 2*i+3;
Write " " p;
Each (Range (i+p) N p) (IsPrime at _ = False)
}
};
Each (Range D N) ?i {
if IsPrime at i {
Write " " (2*i+3)
}
};
WriteLine();
--------
--
__("< Marcin Kowalczyk
\__/ qrczak at knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
More information about the devel-pl
mailing list