Nemají ty screenshoty být takhle? ;-)
http://img24.imageshack.us/img24/252/worldrv.png
Pro udělání screenshotu stačí pravé tlačítko myši na ploše a vybrat export… > PNG file, zbavíš se dekorace okna.
Neuvažovals nad tím věnovat jeden díl tohoto seriálu i zmíněnému Selfu?
Ahoj, upravit třídu SmallInteger tak, aby vracela ‚správný‘ výsledek, je jednoduché, ale bohužel násobení optimalizuje přímo interpret, takže i potom je vracen ‚špatný‘ výsledek, protože se metoda pro násobení vůbec nevolá. Volá se jen pokud je kód simulovaný (např. při ladění nebo přímo pomocí ContextPart runSimulated: [6*9]). To by pak k dokonalému efektu vyžadovalo upravit metodu evaluateSelection ;-)
To bych snad ani nerikal nahlas, ze je nasobeni integeru ve Smalltalku optimalizovane :-) Vzdyt kdyz se v Jave zavadely primitivni datove typy (IMHO strasna blbost), tak se argumentovalo prave tim, ze kdyby se jednalo o objekty, ze by vse bylo pomalejsi a vice narocnejsi na pamet. Me to teda neprislo, proste by se treba 42 chovala jako konstanta tam, kde to ma smysl a objekt jinde.
A ne snad? Objektově orientované programování je z principu méně efektivní pro počítač. Čím více se vzdaluje programovací jazyk od stroje a blíží se k představám vnuceným člověkem, tím neefektivnější. Navíc to není jediné – např. otáčení oken v Morphicu je taky optimalizované – okna zobrazená normálně (tj. neotočená) se obsluhují jinak, než okna natočená o nenulový úhel. A je toho ještě víc – prostě co vypadá krásně teoreticky, obvykle vychází příšerně neefektivně prakticky.
Nakonec se objektově-primitivní datové typy (takový dualismus :-) do Javy stejně dostaly díky autoboxingu. Samotný překladač v takovém případě rozhoduje, jak kterou konstrukci přeložit, navíc jsou některé „malé“ integerové konstanty optimalizovány i díky použitému bajtkódu.
Ovšem zajímavé je, že překladač například u Integerů skutečně pracuje s objekty a nezjistí si například, že se využívají jen jako nositelé konstant:
public class Test { static { Integer a1=6; Integer b1=7; Integer c1=a1*b1; int a2=6; int b2=7; int c2=a2*b2; } }
Se přeloží do tohoto bajtkódu, kde je vidět (v první části) unboxing a autoboxing, kdežto v části druhé jde o přímé operace nad primitivním datovým typem:
static {}; Code: 0: bipush 6 2: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 5: astore_0 6: bipush 7 8: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 11: astore_1 12: aload_0 13: invokevirtual #3; //Method java/lang/Integer.intValue:()I 16: aload_1 17: invokevirtual #3; //Method java/lang/Integer.intValue:()I 20: imul 21: invokestatic #2; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; 24: astore_2 25: bipush 6 27: istore_3 28: bipush 7 30: istore 4 32: iload_3 33: iload 4 35: imul 36: istore 5 38: return }
Byl jsem požádán, jestli bych jednomu klukovi nepomohl, protože z programování má po prvním ročníku střední školy špatnou známku a je to navíc nějaká škola na programování zaměřená. Jsem od něj zjistil, že dělali v Pascalu a dalším ročníku nastupují na C++. Tak jsem se zeptal na pár příkladů, co dělali a co po nich chtěli při zkoušení – třeba měli za úkol nahradit v řetězci všechna slova hvězdičkami krom prvních a posledních písmen těch slov. Prý mu práce s řetězci moc nešla.
Tak jsem se od toho odpíchl a zjistil jsem, že prakticky není schopen sám formulovat podmínky, které ten znak musí splňovat, aby byl prvním či posledním písmenem slova. Zjevně má potíže se základní algoritmizací. Tak jsem si vzpomněl na kolegu z FITu, který mi říkal, jak bych se divil, kolik bakalářů má problém mu třeba jen neformálně popsat recept/algoritmus na vaření párků! Zkusil jsem to a tohle mu naštěstí problémy nedělalo. Takže jsem nahodil Karla a zdálo se, že ten ho celkem bavil a docela mu i šel. Zmínil se, že je škoda, že s tím ve škole nedělali.
Prý u nich s podobnými problémy není zdaleka jediný…
To je totiž dnes hodně rozšířený problém. Je to dost zajímavé, ale za minulého režimu byli mladí mnohem „počítačově vyspělejší“. Samotnému je mi záhadou, jak se to těm komančům povedlo (s nadsázkou – ti samozřejmě žádné počítače neučili, ale mám na mysli tu dobu), ale i s tím málem, co tu bylo, se povedlo vypěstovat v dětech algoritmické myšlení tak, že do 15 let mohli začít se strojákem, aniž by se v tom totálně ztratily. Možná i proto byl u nás Karel vnímán jako hračka pro malé děti, zatímco byl originálně vytvořen pro studenty VŠ. Vlastně i mezinárodní matematické soutěže naši reprezentanti pravidelně vyhrávali a v různých srovnávacích matematických testech jsme se pravidelně umísťovali na nejlepších místech na světě, zatímco nedávno jsem četl, že naše děti v tomto oboru začaly nevídaně zaostávat a končí spíše jako podprůměrné… Asi to s tím nějak souvisí a bude nutné přehodnotit styl výuky – je to zlé, ale to, co zvládali studenti před 20 lety – v době, kdy mnohokrát ani doma neměli vlastní počítač – už dnešní studenti nezvládají. Někde je chyba.
Za prvé, těch „počítačově vyspělejších“ bylo ale malé procento populace, zbytek byl naopak zcela počítačově negramotný ;-)
Za druhé, počítače byly tak drahé / obtížně sehnatelné, že pokud si ho někdo pořídil, tak se tomu většinou věnoval do hloubky.
A za třetí, počítače byly mnohem jednodušší, hardwarově i softwarově, takže se na nich mnohem lépe pochopily principy.
Za páté – neexistovali žrouti času jako facebook, internet, televizní seriály – takže bylo víc času – a když se člověk dostal k nějaké dokumentaci, tak si ji náležitě vychutnal. K tomu ještě – výuka IT zahrnovala opravdu malé procento populace – vlastně až na výjimky nadšence / pro ty, co nadšenci nebyli nebyl problém výuku ofixloval – tudíž celkový dojem ze studentů musel být zákonitě jiný – (nižší počty studentů IT/nižší počty vysokoškoláků a pravděpodobně i trochu jiný přístup je studiu).
K tym medzinarodnym matematickym sutaziam – dovod bol ten, ze sa ich vtedy este ucastnilo malo krajin, hlavne chybali aziati, ktori na tychto sutaziach vsetkych drtia. Ale, nie je to take zle, v iformatike sa stale drzime. Pred nejakymi troma rokmi boli Slovaci v sucte bodov treti v poradi krajin (v ostatnych matfyz olympiadach koncia cechoslovaci najlepsie 20.). Takze, nevidel by som to tak bledo, decka nie su sprostejsie, to len prisla vacsia konkurencia z Ciny:-)
Internet Info Root.cz (www.root.cz)
Informace nejen ze světa Linuxu. ISSN 1212-8309
Copyright © 1998 – 2021 Internet Info, s.r.o. Všechna práva vyhrazena.