Citat:
Uz potpunu svest da će ovo da ude iskra za vatru ...
Markom,
otkud ti ideja da bi to bilo iskra za vatru? Odluka da se blokovi
označavaju posebnom indentacijom koda, umesto sa parom begin/end, jeste
najkretenskija odluka u istoriji razvoja programskih jezika.
Dugo sam se pitao šta je autora ovog, inače fenomenalnog, jezika,
nagnalo da usvoji najgoru moguću od svih poznatih i nepoznatih
konvencija za strukturiranje koda. Da li bi sa dodatim parom begin/end
jezik bio suviše savršen pa je morao da se naruži nečim? Da li se neko
tajno dokopao specifikacije jezika i dopisao taj deo u šali ili zloj nameri?
I onda mi je sinulo: Guido van Rossum, autor jezika, verovatno je tog
dana, s obzirom da je u rečeno vreme obitavao u Amsterdamu, na posao
došao malko „veseliji“ i... eto.
S druge strane zahtev za indentacijom na neki, aj da kažem
nesvakidašnji, način tera programera da uvek nazubljuje kod, tako da u
krajnjoj liniji nije baš toliko katastrofalno loše. Ali da, moglo je to
mnogo bolje.
E sad pitanje je šta zapravo koristiti za programerske početke? Idealan
jezik po meni je, ako ćete verovati, Modula 3. Pre nego što me spalite
na lomači kao mistifikatora koji stalno izmišlja koješta kako bi lupao,
dozvolite da kažem da je Modula 3 naslednik Module 2, jezika kog je
dizajnirao Niklaus Wirth, a Modula 2 opet naslednik Pascala — sa svim
onim lepim stvarima koje Pascal nikada nije imao a strašno su potrebne
za moderno programiranje: moduli, interfejsi, objekti, niti (ugrađene u
sam jezik!), neprovidni tipovi, sve to čisto, lepo, jednostavno i
odlično dokumentovano (
http://www.m3w.org). Modula 3 ima sve ono što ste
poželeli da ima Paskal, što je Turbo Pascal naslutio, što je Delphi
pokušao i delimično uspeo jer na žalost nije novi jezik već samo
ekstenzija objektnog paskala. Modula 3 takođe već nekih 20-tak godina
ima sve ono što je početkom 90-tih prošlog veka JAVA ponudila kao
„otkrovenje“.
E sad naravno problem je što Modula 3 nije mainstream jezik i što niko
aj da kažem „normalan“ u tome ne radi. To je, ako ćete verovati mom
višegodišnjem iskustvu sa kojekakvim programskim jezicima, jedna teška i
neoprostiva greška što se uopšte dozvoljava da početnici u programiranju
tupe zube sa C-om, C++-om, JAVOM i sličnim užasima.
Jeste, tako je, pravi programeri treba da poseduju razumevanje
programskog koda na više nivoa apstrakcije (nisam to sam smislio,
parafraziram DEK-a), ali je teško zamislivo da početnik programiranje
nauči tako što od prvog dana mora forsirano da razmišlja o svim tim
nivoima. Ko se seti mallociranja memorije u Hello world programu u C-u
znaće na šta sam mislio.
Dodatni razlog više za Modulu 3 jeste što interpretiranu verziju M3
razvija ekipa HoNeta koja je samo malo s „onu stranu Drine“, u Zvorniku.
I napokon kako biste se uverili da je Modula 3 prava stvar, evo isečka
iz izvornog koda dotičnog interpretera
Code:
PROCEDURE Parse(t: T; p: XLParser.T): T RAISES { SyntaxError } =
BEGIN
t.name:=p.expectName();
IF p.curr() = Symbol.Colon THEN
p.next();
IF p.curr() # Symbol.Equal THEN
t.type:=NEW(XLType.T).parse(p);
IF (p.curr() = Symbol.Keyword) AND (p.valueKeyword() =
KW.Strict) THEN
p.matchKeyword(KW.Strict);
t.strict:=TRUE;
END;
IF p.curr() = Symbol.Keyword THEN
p.matchKeyword(KW.Const);
t.const:=TRUE;
END;
IF p.curr() = Symbol.Colon THEN
p.next();
p.expect(Symbol.Equal);
t.default:=NEW(XLExpr.T).parse(p);
END;
ELSE
p.expect(Symbol.Equal);
t.default:=NEW(XLExpr.T).parse(p);
END;
END;
IF NOT p.currScope().add(t.name, t, t.slot) THEN
p.error("Duplicated name '" & t.name & "'.");
END;
RETURN t;
END Parse;
f