Portál AbcLinuxu, 21. května 2025 18:21
Proč ne? Tak třeba: 1) Je to šest let staré! Minimálně bych to nedával do zpráviček, tady na ten server už několikrát řeč přišla. Ať si o svém nadšení autor napíše v blogu.Jó, tak to soráč. Viděl jsem to v nějakým blogu, takže to člověk automaticky interpretoval jako novinku :D
haha, vravim si jak je mozne ze vyhralo c alebo c++? Pozriem a uz je mi to jasne. V teste sa nezucastnil kompilator Borland Delphi. Myslim to smrtelne vazne.
Pokud budete měřit rychlost kompilace, pak je to docela dobře možné. Ale co do rychlosti výsledného kódu… to opravdu ne.
...a v Lispu skok neudelate vubec.A vo co že jo?
(defun funkce1 () (tagbody (labels ((funkce2 () ;; Ackoliv je tag OUT lexikalne vymezen formou TAGBODY, ;; muze byt skok na nej proveden z vnorene funkce o nekolik ;; stack frames nize. V takovem pripade se ovsem korektne ;; odroluje zasobnik a provede se cleanout cehokoli, co je ;; zapotrebi. Cize zadne pitome JMP, ale dobre osetreny ;; bailout jako u vyjimky. Mame preci jednadvacate stoleti! :) ;; (Nekteri z nas uz takovych tricet let... :D) (unwind-protect (funkce3) (print "Zasobnik se odrolovava, cistime resources!"))) (funkce3 () ;; Fuj, GOTO ahead! ;) Kdyz tam nedam tu podminku, smaze ;; mi kompilator kus kodu jako nedosazitelny, parchant jeden! :D (if (/= (random 2) 0) (go out)))) (funkce2) (print "Normalni navrat.") (return-from funkce1)) out (print "Navrat skokem na OUT")))
defppclapfunction
/defx86lapfunction
v OpenMCL) pro SBCL nevím. Ale poměrně konformní cestou, jak nějakou operaci dostat do SBCL skrzevá assembler, by mělo být napsání vlastního VOPu. Navíc je to mírně granulárnější než napsání funkce a snad by to mohlo hrát líp se zbytkem kompilátoru. Zatím jsem to nepotřeboval, ale docela by se mi na některé věci hodila instrukce PSADBW, hlavně na metrické stromy Brr.. GOTO Ješte lepší jsou samomodifikující se kusy kódu ... a tohle není hardcore příklad, ale dejme tomu taková ukázka běžného použití.
CONTROLS ld a,(CONSEL_B) out (254),a ld a,(CONSEL_CL) ld (CLS_COL),a call CLS ld hl, CONTR_TXT call TEXTOUT CONTROLS0 call PAUSENK ; počkej dokud uživatel nepustí klávesu call INKEY cp 49 jr z,CONTR_KB ; uživatel zvolil klávesnici cp 50 jr z,CONTR_AM ; uživatel zvolil AMOUSE cp 51 jr z,CONTR_KM ; uživatel zvolil KMOUSE cp 113 CONTR_QA jp z,CONTROLS ; tato adresa má být přepsána adresou pro ukončení programu jr CONTROLS0 CONTR_KB xor a jr CONTR_END CONTR_AM ld a,1 jr CONTR_END CONTR_KM ld a,2 CONTR_END ld (MOUSE_HID),a ; nastaví human interface device CONTR_EA jp CONTROLS ; tato adresa má být přepsána adresou pro pokračování běhu
"JVM dokaze delat za behu dalsi optimalizace, ktere ani ten nejskveleji optimalizujici kompilator bez kristalove koule v compile time zvladnout nemuze. Bohuzel, na prikladech typu vynasob dve matice a udelej to rychle, se to neprojevi."Jak píše pan Ponkrác, AOT kompilátor zase může v compile time provádět další optimalizace, které ani nejskvělejší optimalizující JVM nemůže bez stroje času provést, protože na ně prostě nemá čas.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.