Portál AbcLinuxu, 30. dubna 2025 21:23
Dnes poněkud roztěkaně, na několik různých témat, jejichž společným jmenovatelem jsou slova uvedená v nadpisu. Čekají nás světlé zítřky? Kam zmizí světlé dnešky? Co na to Microsoft? Co na to Miguel de Icaza? A co na to Chuck Norris?
V mém prvním zápisu o closures v Javě jsem uvedl první příklad v JavaScriptu. Pro ten druhý už jsem musel použít Groovy – jednoduše proto, že to, co jsem chtěl předvést, jeho knihovna podporuje, zatímco v JavaScriptu byste hledali marně. Tedy do chvíle, než poznáte knihovnu Prototype (dokumentace, ta zajímavá část; ještě jiná dokumentace).
Pokud už jste o ní slyšeli, pak pravděpodobně v souvislosti s AJAXem. Prototype ovšem kromě toho dělá pár dalších zajímavých věcí, mimo jiné i rozšiřuje standardní JavaScriptové objekty o klasické iterátorové metody (each, collect atd.). Onen zmíněný příklad na vyhledání sudých čísel v seznamu lze tedy přepsat takto:
var cisla = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] var sudaCisla = cisla.findAll(function(c) { return c % 2 == 0; });
Není to tak hezké, jako v Groovy, ale… je to super!
Zásadní zjištění na začátek: closures jsou vlastně lexical closures, což už si klidně dovolím přeložit, protože zmatek nehrozí. Nuže: chci v Javě lexikální uzávěry!
Poslední návrh specifikace je nyní k nalezení na http://www.javac.info/ a je vcelku zajímavý. Funkční typy (s poměrně významně pozměněnou syntaxí) jsou nyní vlastně jenom trochu lepší syntaktický cukr pro deklaraci a/nebo implementaci anonymního rozhraní o jedné metodě. Spolu s trochou té překladačové magie to znamená velmi hezkou podporu lexikálních uzávěrů včetně nelokálního návratu (o tom možná jindy), která je zároveň zpětně kompatibilní.
Některé věci se mně osobně ještě moc nelíbí, ale je vidět, že celá věc se pohybuje velmi svižně přímo kupředu, do stran či zpátky ni jeden krok. Yup!
Bez jediného zaváhání věřím tomu, že Richard Stallman zešílel radostí, když se dozvěděl, že Sun vydá Javu pod GPL, a jeho tvrzení "Sun přispěl komunitě softwarem více než kdokoli jiný" (jen parafrázuju) je toho pouze malým odleskem. Já z toho zas tak nadšený nejsem.
Nejsem sice anál (IANAL), ale moc mne zajímá, jak to bude s odvozenými díly. Vezměme třeba třídy java.lang.String
nebo java.lang.Thread
. Překladač i běhové prostředí se k nim chová speciálním způsobem, proto jsou jejich odvozenými díly. Nějaký String
nebo potomka Thread
u (eventuelně implementaci rozhraní java.lang.Runnable
) najdete skoro v každém programu, proto jsou tyto také odvozenými díly. Obdobně na tom budou všechny třídy z tranzitivního uzávěru balíku java.lang
. Nebo ne?
Pravděpodobně se alespoň v jedné implikaci mýlím, pravděpodobně to všechno zachraňuje Classpath exception (kterou jsem pravděpodobně nepochopil), ale zkrátka se mi to nezdá. Proč chce Sun uvolnit Javu pod GPL?
Podle mne nejde ani náhodou o nějaký příspěvek jakési komunitě FSF (Free Software Fanaticism), okolo Javy je už dávno obrovská komunita autorů open-source software, který je povětšinou uvolněn pod Apache License 2. Je to odvážný krok v rámci konkurenčního boje, zejména s Microsoftem – stejně jako v reakci na Microsoftí podporu IronPythonu zaměstnal Sun klíčové vývojáře JRuby.
Když pomineme technická měřítka, jednou z často uváděných výhod platformy .NET je existence standardu. Microsoft nejprve nechal publikovat specifikaci C# a CLI organizací ECMA, posléze je dokonce standardizovala ISO. Že tento standard neobsahuje (tohle je pouze odhad založený na anotacích příslušných standardů) takové úhelné kameny .NETu, jako je ADO.NET, ASP.NET nebo WinForms, to asi nikomu nevadí. Sun dlouho odmítal Javu standardizovat, samozřejmě v obavě z forku. Tak dlouho, až jej ostatní klíčoví hráči na trhu začali přesvědčovat, aby namísto toho uvolnil Javu jako open source.
Sun reagoval očekávatelným způsobem, památný je například výrok Scotta McNealyho na adresu IBM: Go open-source with DB2 and then tell us about open-sourcing Java! (Vlastně to řekl trochu jinak, ale tohle se mi líbí víc ) Netrvalo ovšem dlouho a z otázky jestli se stala otázka kdy a jak. A že to bude zrovna GPL, to myslím řadu lidí přinejmenším překvapilo.
Jak už jsem napsal, je to zatraceně odvážný krok, který se ale může zatraceně vyplatit. Než se snažit o standardizaci něčeho, co se stejně musí neustále vyvíjet, dáme v plen kompletní, technicky vyspělou implementaci, ať si ji každý může přiohnout ke svému účelu. Být to o něco dřív, klidně by to mohlo mít podstatný vliv na další život projektu Mono a izolaci .NETu v prostředí Windows, kam bytostně patří a kde jedině se na něj lze spolehnout. O tom ale spekulovat nebudu. Každopádně Java by se teď mohla v linuxovém světě rozšířit podstatně více než doposavad je, však si to taky zaslouží.
Mimochodem, pokud to někdo neznáte: moc hezký katalog open-source software v Javě se nachází na java-source.net. A malý zrovna není.
Tiskni
Sdílej:
Nejsem sice anál (IANAL), ale moc mne zajímá, jak to bude s odvozenými díly. Vezměme třeba třídy java.lang.String nebo java.lang.Thread. Překladač i běhové prostředí se k nim chová speciálním způsobem, proto jsou jejich odvozenými díly. Nějaký String nebo potomka Threadu (eventuelně implementaci rozhraní java.lang.Runnable) najdete skoro v každém programu, proto jsou tyto také odvozenými díly. Obdobně na tom budou všechny třídy z tranzitivního uzávěru balíku java.lang. Nebo ne? Pravděpodobně se alespoň v jedné implikaci mýlím, pravděpodobně to všechno zachraňuje Classpath exception (kterou jsem pravděpodobně nepochopil), ale zkrátka se mi to nezdá. Proč chce Sun uvolnit Javu pod GPL?I když bych to neměl říkat, brzy vyjde článek, ve kterém to bude všechno česky vysvětleno. Kdyžtak je to přímo od Sunu popsáno tady. Každopádně obavy nejsou na místě.
Jen jeden fork se však bude jmenovat JavaJava se může jmenovat cokoli, co projde příslušnou sadou testů. Tedy i za současného stavu je implementace od IBM i od BEY Java.
linuxový (přídavné jméno)Ech, jsem prase. Uděluju si trest dvojnásobného přídělu knížek po následující měsíc
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.