Dobrý článek, těším se na pokračování.
Chtěl jsem se zeptat na jinou věc.
Dlouhodobě uvažuji, že bych se pokusil pomoc vývoji OpenJDK, věřím, že zkušenosti bych na to měl.
Odrazují mne ale drobné věci, jako např.
...
After installing Mercurial, acquire and install the Forest Extension available at
http://www.selenic.com/mercurial/wiki/index.cgi/ForestExtension.
Forest:
/!\ This third-party extension does not appear to be actively maintained. Consider using subrepos instead.
Works with: Mercurial 1.x
(There's another version that should also work against post-1.0 releases.
Download site: public development repository. http://hg.akoha.org/hgforest/
http://hg.akoha.org/hgforest/ - Site does not exists
...
... se mi moc nechce něco takového instalovat, někdo by ty instrukce měl opravit a zpřehlednit ...
Nicméně - existuje na internetu nějaká skupina, která by mi pomohla s nastartováním ?
Dík
no ešte že som si miesto Javy vybral C# tam sú tieto "vychytávky" už 10 rokov. nedávno som bol nútený naprogramovať ničo v Jave, a bol som zhrozený koľko základných vecí v nej chýba, pričom v iných jazykoch ich berieme ako samozrejmosť. chcelo by to radšej sparviť kompiler C# ktorý by generoval bytecode pre JVM toto vyzerá celkom zaujímavo:
- porovnávat závislost C# na Microsoftu, jeho vývojových nástrojích a technologiích vs Java a Oracle fakt nejde, OpenJDK opravdu není Mono.
- pokud se nepletu, i SUN nabízel k Javě komerční licence
- nedostatečnost syntaxe jazyka není kritický bottleneck technologie ani není důvodem hrůzných chyb, které se občas do kódu dostanou
- nedovedu si představit úlohu, která by v Javě nešla dostatečně elegantně zpracovat, v případě nějakých extrémně dynamických záležitostí se "přinejhorším" dá použít nějaká scriptovací nástavba jako Groovy nebo JRuby
- teď nám tu chtějí prodat a nasadit nové verze MŠ FAŠŤ, ulízlej obchoďák se snaží, má averze vůči MS a dalším komerčním molochům zase roste, vyhozený milióny dolarů ...
- atd. atd. to už by ale byl flame ...
- blbý počasí a zima, coooo ? ;-)
Jenom taková drobnost: MŠ FAŠŤ má být "fulltext vyhledavač" tedy http://www.fastsearch.com/ ?
Tam ta averze vůči MS není (zatím) na místě, Microsoft to teprve před dvěma lety koupil (viz http://en.wikipedia.org/wiki/Fast_Search_%26_Transfer) a zatím ještě úplně nepředělal k obrazu svému. Aktuální verze tedy stále je prodávána a plně podporována pro Linux. Je otázkou jak ty další verze...
Praktické zkušenosti nejsou zcela pozitivní, ale zase nejsou vyloženě negativní.
já vím, děláme v tom poslední 3 roky.
ale moc nadšený z toho nejsem a teď nám pan v kravatě ukazoval prezentaci na
FSIS (Fast Search for Internet Sites), CTS (Content Transformation Services) a Interaction Management Services (IMS)
(všechno samozřejmě technologie za velmi lidovou cenu (ironie))
a hemžilo se to tam samými sprostými slovy jako Visual Studio, .NET komponenty, ASP ....
Je to zajimave (a mozna to spolu az tak nesouvisi, ale kdo vi), ale po akvizici firmy Sun Oraclem se najednou k OpenJDK pridava krome Red Hatu a dalsich spolecnosti i IBM a Apple, takze mozna se setrit na placenou JVM nebude muset :-) Myslim ted klasicke J2SE ne mobilni platformy...
http://blogs.computerworld.com/17139/oracle_and_ibm_join_together_on_openjdk
Jsou a nejsou. Scala je syntakticky daleko podobnější C# než F# a dá se v ní programovat v zásadě velice podobným stylem jako v Javě nebo C#. Ano, přináší funkcionální prvky, podobně jako ta microsoftí varianta OCaml, jenže nelze nevidět, že funkcionální prvky se dostaly už i do C# (LINQ a lambda "delegates") a razí si pomalu cestu i do Javy. Jenže ve Scale se s nimi počítalo už při návrhu a proto tam vypadají úsporně a elegantně, v C# mi třeba připadají ty lambdy jako přilepené žvýkačkou.
Podivnosti z F# (a OCaml) typu rec a těžkopádná implementace inference převzatá z Caml (operátory typu .+.) je Scale také naprosto vzdálená. Scala je IMO prostě jazyk poučený z chyb při návrhu Javy (konzistentní přetěžování "operátorů", parametrické typy - generika, které Java původně zavrhla, flexibilnější dědičnost...). Funkcionální prvky jsou bonus.
Tomuhle se říká podpásovka. Dobře, v F# jsem neprogramoval, ale OCaml jsem kdysi studoval a F# z něj vychází, to je holý fakt. Ukázkové programy v F# jsem viděl, takže můžu v klidu prohlásit, že je syntakticky daleko vzdálenější C# než Scala. To vyvrátit nemůžete. S těmi operátory jsem se zmýlil a chybu jsem přiznal.
Teď ke Scale - Scalu znám, troufnu si tvrdit, dost dobře. Vlastním a prostudoval jsem (papírovou) knihu Programming in Scala, dělal jsem ve Scale programy včetně kombinátorových parserů a programů založených na aktorech. Pracuji na stránkách ve frameworku Lift a studuji možnosti projektu Akka. Žádné dojmy, ale praktické zkušenosti.
Je fajn, že vztahujete to moje jediné pochybení na celý Root, to jsem ani nevěděl, že jsem taková hvězda a mustr. Pokud ale chcete nadále reagovat na moje příspěvky, dělejte to věcně, pokud máte v rukávu víc, než ty dojmy.
Jaka podpasovka, co nevecneho, psal jste o F# dojmy nebo ne? Navic "tezkopadna" inference, ktera je obecne (priznavaji i priznivci Scaly) v F# na vyssi urovni nez ve Scale. Ja se prozmenu ucim F# a to s temi operatory zjistite velmi zahy. No a co, ze to je syntakticky podobne, s vasi znalosti F# o semanticke vzdalenosti/blizkosti nemuzete rict ani ble napr., leda byste se na to ted podival. Scala je navic v nekterych kruzich propagovana jako funkcionalni jazyk s objektovymi rysy a ne zpusobem, ktery jste zvolil vy. Nejde o chybu, jde o to, ze kecate o necem, o cem v podstate nic moc nevite a rozhodne vubec nic z praxe. A nefandete si, zadna hvezda nejste, jen jsem do sveho dlouhodobeho obecneho dojmu z diskuzi (a nekdy nejen) na rootu zahrnul i vas prispevek.
Těch "10 let" doufám oba bereme jako nadsázku. Ale dobrá, buďme konkrétní, tedy příklady z praxe:
1. Traits - tedy něco, co je mezi klasickou násobnou dědičností a interface. Mám zkušenosti s projekty (například systém pro komunikaci v heterogenním prostředí, který musí spolupracovat s jinými systémy pomocí odlišných protokolů), kde hlavní hierarchie drží "obecný protokol" (třídy zastupují jednotlivé operace, které víceméně umí všechny komunikující systémy) a "lokální předek" definuje metody pro protokol konkrétního zařízení (např. připravuje data do formátu pro daný systém třetí strany a zpět). Tohle je samozřejmě možné řešit jinak, ale "násobná dědičnost" napomáhá kompaktnosti výsledného kódu v koncových třídách. Aplikací traits jsou mraky.
2. Embedded XML - velice užitečné pro webové frameworky. Konkrétní příklad z praxe - šablony v Liftu.
3. "Přetěžování operátorů" - operátor je metoda s "obrázkovým názvem", nejsme omezeni "klasickými" operátory jako v C++ nebo C#. Konkrétních aplikací je knihovna Scaly plná - jako příklad uvedu combinator parsers, kde jsou použity např. operátory ~, ~>, <~, ^^^ a ^^, výsledkem je kompaktní kód přímo ve Scale, který nahradí specializované nástroje typu yacc nebo antlr.
4. Implicitní konverze - umožňují rozšířit funkcionalitu instancí stávajících tříd, ale na lokální, tedy bezpečné bázi (co si naimportuju, to mám). Konkrétní příklad použití z praxe je objekt scala.collection.JavaConversions, který umožňuje pracovat s "chudými" javovskými kolekcemi jako s jejich bohatšími bratříčky, které nabízí knihovna Scaly.
5. Import členských metod objektu, zde mohu opět poukázat na implicitní konverze - klasická konstrukce je import scala.collection.JavaConversions._ samozřejmě s tím, že jako všude ve Scale můžu importovat jenom něco (výčet v {}) a importovat mohu přímo v metodě a nemusím to dělat na úrovni celého modulu. Tím si zajistím plnou kontrolu nad tím, jak a kde rozšířím možnosti objektů daného typu (bod 4).
cili velka nadsazka :-)
za sebe budu vdecny za jakykoli mainstreamovy jazyk (doufam v F#), ktery umozni programovat jinym zpusobem, nez je dnes v korporatnu pozadovano; z toho co pisete (a nebudu predstirat, ze vsemu rozumim, Javovy/C# objektovy system znam opravdu jen obecne/principielne - treba je to povrchni, ale rekl bych, ze jak clovek pochopi jeden single dispatch system, zna je vsechny) mi ony body prijdou jako radikalnejsi (nektere mi prijde, jak je popisujete, obchazi neobratnosti Javy, ktere pro me cynika jsou proste jen dusledkem trvani na jedne objektove pravde) krok stejnym smerem, kterym vykrocila Java spis nez jako jine (potencialne zabavnejsi) paradigma
No já jsem se taky držel dost při zemi a skoro úzkostlivě se držel OOP. A to jsem ještě například nezmínil, že ve Scale je možné říci, že metoda je "private" v rámci třídy nebo v rámci nějaké vyšší hierarchie (package) a to proto, že to nepovažuju za něco tak nezbytného. Jenomže Scala nabízí další věci:
1. Úspornější syntaxi - nepotřebuje v zásadě používat středníky, tedy pokud je z kontextu jasné, kde začíná další příkaz. Obejde se při volání bez závorek, pokud je metoda bez parametru. Obejde se v mnohých případech i bez tečky a tady se dostáváme k té implementaci "operátorů", k možnosti vytváření hezkých interních DSL (použito například v testovacích frameworcích pro Scalu.
2. Intuitivní a snadnou implementaci "singletonů" a zároveň oddělení statických metod od instančních v samostatné struktuře (companion object) - uznávám, že tohle je věc názoru, ale podle mě to napomáhá přehlednosti.
3. Funkcionální vlastnosti Scaly - pattern matching, který je u každého pravověrného scalisty často používaný, který umožňuje práci s regulárními výrazy, za pomoci "case classes", resp. "case objects" + parametrizovaný "Option" + list comprehensions + klasické metody typu fold, map, filter, to umožňuje programování dost podobné třeba Haskellu. Dále je tady (implementovaná pomocí "trampolíny") podpora "tail rekurze", takže není třeba se tolik bát přetečení zásobníku (a dá se ohlídat, zda tu optimalizaci kompilátor provede a zařídit se podle toho. Používám s chutí a často.
4. Neměnné kontejnery, které napomáhají snadnější implementaci konkurenčního zpracování. Používám, pokud to lze.
5. S tím souvisí podpora actorů (vypůjčeno z Erlangu) a velice slibný projekt Akka, na který jsem poukazoval. V současné době studuji.
Shrnuto a podtrženo: Scala je hybridní jazyk, který spojuje OOP a FP a pokud je nějaký jazyk blízký mainstreamu, ale dovoluje psát programy "zgruntu jinak", je Scala podle mě jeden z horkých kandidátů. Jeho (dle mého názoru) transparentní a logická struktura umožňuje dělat velké věci a znovu a znovu mě překvapuje, co s tím někteří lidé dokážou, ať už na úrovni nabízených knihoven nebo ukázkových příkladů. Další výhodou je možnost využití celé Java platformy (Scalu pro .NET jsem neviděl, ale existuje), tzn. například široce dostupný hosting v servlet containerech (udělám WAR, hodím ho do adresáře a webová aplikace běží). Netvrdím, že někomu nemůže být bližší třeba to F#, ale Scala IMO není žádné ořezávátko.
Zni to jako zajimavy jazyk, mne trochu (zda se, ze tomu tak je, ale pripoustim, ze to muze byt jen opticky problem) vadi to baleni vseho do trid - v tomhle se mi libi F#, pri komunikaci se zbytkem sveta je mate k dispozici (tam i zpet), ale pouzivat (= psat to) je nemusite, nektere veci jsou prirozenejsi bez toho (co jineho je singleton, nez ritual a ulitba na oltari OP)
Chtel bych se zeptat - jake vyvojove prostredi pouzivate, jak byste ho moznostmi srovnal s napr. Visual Studiem a existuje pro Scalu neco jako REPL?
Co se týče IDE, situace je ve Scale (pokud se v posledních pár měsících něco výrazně nezlepšilo) poměrně slabší; každý plugin umí dobře něco. Nejlepší debugging má asi plugin do Eclipse, nejstabilnější je plugin do IDEA a ErlyBird (plugin pro NetBeans) má nejlepší syntax highlighting (barevné odlišení val a var apod.) a já osobně mu fandím nejvíc. Osobně ale vesměs používám gvim+sbt, bez IDE se obejdu. Nejnovější verze Visual Studia jsem viděl z rychlíku, takže nedokážu posoudit. Na notebooku mám Visual Studio Express pro C# a oproti třeba Eclipse nebo NetBeans mi přijde, že třeba správa projektů je slabší. Ale plnotučnou verzi VisualStudia (Visual C++) jsem naposledy používal snad před 10 lety a v té době to bylo mnohem slabší než dnešní Eclipse atd. Tohle budete muset vyzkoušet případně sám.
Scala REPL má, stačí napsat "scala". Ale opět: víc mi pro experimentování sedí sbt (píšu v editoru a spustím pomocí sbt).
Scala má několik módů - klasický "javovský", kde se vstupuje do programu pomocí main() (jde to i jinak, ale výhody jsou sporné), interaktivní (REPL) a "skriptovací" (spouští se scala mujmodul.scala), kde není nutné psát třídy vůbec. Scala je každopádně hybridní jazyk a Odersky a spol. se zřejmě rozhodli splnit minimálně dva úkoly najednou: dát javistům silný nástroj a zpřístupnit příznivcům FP Java platformu. Z toho samozřejmě vyplývají určité kompromisy, které se nám nemusí občas líbit.