Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Operátory a asociativní pole v jazyku Lua

yossarian
yossarian (neregistrovaný)
24. 3. 2009 10:25 Nový

RE: Operátory a asociativní pole v jazyku Lua

celé vlákno
Verze s nadbytečnou čárkou vypadá velmi podobně jako předchozí úryvek kódu:

pole={klic1="hodnota1", klic2="hodnota2"}


kde je tam ta carka? :D
Pavel Tišnovský aura:98
24. 3. 2009 13:39 Nový

RE: Operátory a asociativní pole v jazyku Lua

celé vlákno
pravda, je to velmi ale velmi podobné :-) Samozřejmě je to chyba, opravíme. Má tam být:

pole={klic1="hodnota1", klic2="hodnota2", }
Pavel Tišnovský aura:98
24. 3. 2009 16:04 Nový

RE: Operátory a asociativní pole v jazyku Lua

celé vlákno
Opraveno, diky za upozorneni.
redhead
redhead (neregistrovaný)
24. 3. 2009 16:42 Nový

skoda

celé vlákno
mrzime jen ze neexistuji zkraceniny operaci jako in(de)krementace, +=, -=, /=, atd..

pocita se nekdy s nejakym vyraznym vyvojem tohota jazyka do podoby ktera se vice podoba dnesnim "vyssim" jazykum ??
Ksl
Ksl (neregistrovaný)
24. 3. 2009 17:15 Nový

Re: skoda

celé vlákno
Vyšším jazykem máte na mysli přesně co? ;-) Protože jestli Lua není vyšší jazyk, pak mě napadá snad už jedine Haskell. :] A co je na Lua nemoderního? ;)
Petr
Petr (neregistrovaný)
24. 3. 2009 19:18 Nový

Re: skoda

celé vlákno
Pise dnesnim vyssim jazykum. Tim nerika ze Lua neni vyssi jazyk, ale ze neni dnesni a ma uz zastaralou syntaxi. Treba Python to ve vrzi 1.x taky neumel, ve 2.x uz ano.
Ksl
Ksl (neregistrovaný)
24. 3. 2009 19:57 Nový

Re: skoda

celé vlákno
Já nevím, mně Lua přijde dnešní dost - má kupříkladu uzávěry, korutiny, téměř dokonalou reflexivitu, s knihovnou i makra, a vůbec spoustu dalších podobných věcí, které "včerejší vyšší jazyky" neměly.
n0
n0 (neregistrovaný)
26. 3. 2009 17:36 Nový

Re: skoda

celé vlákno
A proč všechno zkracovat? Stejně si to += programátor musí podvědomě zase přelouskat na p=p+x :)
Ksl
Ksl (neregistrovaný)
26. 3. 2009 18:05 Nový

Re: skoda

celé vlákno
Programátorské postřižiny... ;-)
Jenda
Jenda (neregistrovaný) 78.24.11.---
16. 8. 2009 14:51 Nový

Re: skoda

celé vlákno

To mate recht, ja si vzdycky musim prelouskat

$x->{foo}[$index+2]{$bar} += 5;

na

$x->{foo}[$index+2]{$bar} = $x->{foo}[$index+2]{$bar} + 5;

a po tom prelouskani si jeste vzdycky zkontroluju jestli jsem nekde neudelal preklep.

Pavel Tišnovský aura:98
24. 3. 2009 17:16 Nový

Re: skoda

celé vlákno
Pravda, taky mě to zpočátku zarazilo, autoři tu absenci vysvětlují po svém, cituji:

"
Why does Lua lack the += operator, etc.?
One of Lua's design goals is simplicity. Most languages are large, meaning that they have many sophisticated features built-in. Examples are C, C++, Python, Lisp, ML. A very few languages are small. Examples are Forth and Lua. Lua aims to provide a small range of atomic features which are truly essential, and from which many other sophisticated features can be constructed if desired. Examples of sophisticated features which can be added to Lua from within the language include modules, object orientation, and now exceptions and threads which can be implemented via coroutines in Lua 5. The absent += operator is one more example.

I thought the reason was more practical. Many argue for adding these operators because of the efficiency gains they enable. But in Lua things would get confusing because of the extension system. It's in the lua-l archives somewhere... --JohnBelmonte

I think it's more basic than that - you must draw a line in the sand for the amount of operators a small language should have. You allow +=, then people ask why not *= and -= etc etc. Before you know it, you have added many operators which simply makes it bigger. Small and simple is Lua's tenet.
"

da se s tim zit (i kdyz nekdy skripu zuby), nebo pouzit tuto techniku:

http://lua-users.org/wiki/CustomOperators
Ksl
Ksl (neregistrovaný)
24. 3. 2009 17:43 Nový

Re: skoda

celé vlákno
Pavel Tišnovský aura:98
24. 3. 2009 18:20 Nový

Re: skoda

celé vlákno
jj, s Metalua se daji delat veci... <flame>takový čitelnější Lisp :-)</flame>
uživatel si přál zůstat v anonymitě
24. 3. 2009 22:31 Nový

Re: skoda

celé vlákno
takový čitelnější Lisp

Jak v čem. :-) To, že zdrojový kód je datová struktura syntaktického stromu může podle situace být výhoda i nevýhoda. Na Lua se mi líbí, že to je vlastně takové Scheme s méně závorkami (a tudíž s ním člověk zažene na útěk méně lidí). :-)

Spíš nechápu, jak někdo může kritizovat absenci += (což je skutečně vyšším jazyku vyložená prkotina) a naopak si nepovšinout třeba plné podpory tail callů, což mi přijde jako docela bonus (stavové automaty přímočaře a podobně). Když chybí to první, je to prakticky úkol pro find-and-replace v textovém editoru. Přepsat kód počítající s dostupností tail callů do jazyka, který je nepodporuje, je podle mě mnohem větší otrava.

Inkvizitor
Inkvizitor (neregistrovaný)
24. 3. 2009 22:51 Nový

Re: skoda

celé vlákno
To přece není pravda. Je rozdíl mezi vytvořením kopie instance a následným provedením operace a změnou hodnoty v původním objektu. Překladač by to sice v případě, že dochází k zapisování do té samé proměnné, mohl reflektovat, ale to mi nepřijde moc košer.
Ksl
Ksl (neregistrovaný)
24. 3. 2009 23:05 Nový

Re: skoda

celé vlákno

To snad záleží na sémantice operátoru, datovém modelu jazyka a konkrétních datových typech, ne? Kupříkladu u immediate hodnot (třeba tagovaných) žádné "vytvoření kopie instance" ani nepřichází v úvahu. (Jak byste chtěl třeba změnit hodnotu (abstraktního) celého čísla?)

A Lua (naštěstí) není C++. BTW, třeba Ruby ani nepovoluje definovat operaci x+=y tak, aby měla jinou sémantiku, než x=x+y. A taky mi to přijde jako docela dobrý nápad. Umím si živě představit, jaké bugy by se pak začaly vyskytovat.

Překladač by to sice v případě, že dochází k zapisování do té samé proměnné, mohl reflektovat, ale to mi nepřijde moc košer.
Tak to je asi nejstrašidelnější myšlenka dne. :)
Inkvizitor
Inkvizitor (neregistrovaný)
24. 3. 2009 23:18 Nový

Re: skoda

celé vlákno
No tak u konstantních objektů to fakt moc smysl nemá. Ale u sčítání matic a jiných větších objektů mi to smysl dává. Pokud Ruby něco takového fakt neumí, přijde mi to jako handicap.
Ksl
Ksl (neregistrovaný)
24. 3. 2009 23:28 Nový

Re: skoda

celé vlákno
Jasně, dokud na každou matici mám maximálně jednu referenci, tak mi nepřijde, že by na destruktivní změně mohlo být něco špatného. :]
Inkvizitor
Inkvizitor (neregistrovaný)
25. 3. 2009 0:14 Nový

Re: skoda

celé vlákno
No jasně, ale to platí o všech destruktivních změnách (například inverze matice. Pokud je jazyk povoluje a zhusta se používají, nevidím důvod, proč z toho vynechat tyhle operátory.
Inkvizitor
Inkvizitor (neregistrovaný)
24. 3. 2009 22:23 Nový

Re: skoda

celé vlákno
Inkrementace a dekrementace mi přijdou vcelku zbytečné; je to jenom speciální případ += a -= a prefixová a postfixová notace v C apod. jenom zbytečně zesložiťují jazyk a zdrojové kódy. += apod. naopak smysl mají všude tam, kde existuje možnost přetížení operátorů v typovém systému; pokud se bavíme o imperativním kódu.
Pavel Tišnovský aura:98
25. 3. 2009 9:23 Nový

Re: skoda

celé vlákno
Taky je zde otazka, jakou by ty operatory mely semantiku, protoze prirazeni v Lua je trosku obecnejsi, nez prirazeni v ceckovych jazycich. Urcite by se to dalo zadefinovat, ale mozna by to bylo trosku zmatecne (coz je presne proti tendencim, kam Lua miri):

a,b+=2,3

nebo jeste jinak:
a,b*=fce()
martin
martin (neregistrovaný)
25. 3. 2009 11:20 Nový

A co bitové operátory?

celé vlákno
Nejsou? Myslím, že i ve vysokoúrovňových jazycích je to praktická věc (když potřebuju často vyhodnocovat kombinaci několika podmínek).

Kdyby byly přímo součástí jazyka, může na to interpret použít nějakou optimalilzaci, ale když operaci, pro kterou má většina procesorů přímo instrukce, musím řešit voláním funkce v interpretovaném jazyce, už to trochu ztrácí to kouzlo...

Asi taky jde o tu jednoduchost, a když náhodou potřebuju opravdu rychlost, tak si to mám napsat v C -- když už je to "embedded" jazyk.
uživatel si přál zůstat v anonymitě
25. 3. 2009 12:17 Nový

Re: A co bitové operátory?

celé vlákno
Lua má knihovnu bitops. Kdyby to někomu vyloženě chybělo jako operátor -> MetaLua (zkompilované to běží na témže VM). S těmi optimalizacemi to až tak žhavé podle mě nebude, obzvlášť u jazyků typu Python nebo Ruby, které mají celkem flexibilní integery (ošetření konverze fixnum<->bignum apod.) a stejně musí čachrovat s něčím okolo. Výjimkou bude - jak už to bývá :-) - Common Lisp.
Pavel Tišnovský aura:98
25. 3. 2009 13:34 Nový

Re: A co bitové operátory?

celé vlákno
mohlo by pomoci nejake rozsireni nebo patch z: http://lua-users.org/wiki/BitwiseOperators

IMHO tam tyto operatory nejsou ze dvou duvodu:

1) je tezke definovat, co tyto operatory delaji nad defaultnim ciselnym typem, coz je v Lua double. Napriklad JavaScript (taktez s jednim typem numeric) s tim ma problemy, staci si vyzkouset v prohlizeci (adresni radek + Enter):
javascript:alert(1|2)
versus
javascript:alert(1|1.99999999999)
to druhe muze byt vysledek nejake bezne pocetni operace nad doublem, klidne i jednoduchy soucet.

2) pouziti techto operatoru je dvoji: sahani na jednotlive bity napriklad v hlavickach souboru ci protokolu - zde stejne nema smysl to delat nad doublem (viz vyse, lepsi je volat nejakou c-ckovou funkci ci pouzit patch/rozsireni) a potom bitove mnoziny (to jsou ony podminky) - zde je ovsem ve vysokourovnovem jazyku IMHO vhodnejsi pouzit skutecne bitove mnoziny, ktere nejsou omezeny na 32/64 bitu, vysledek je i citelnejsi, protoze se nemusi vytvaret nejake enum-like konstanty apod.
pavel281185
pavel281185 (neregistrovaný) 78.110.211.---
25. 12. 2009 0:33 Nový

Načtení čísel

celé vlákno

Ahoj. Nevěděl by jste někdo jak načíst číslice, která jsou v řádcích pod sebou v souboru.txt do pole, tak aby mi to vzala Lua 4.0. Pro Lua 5.0 to umím, ale pro 4 ani náhodou – nedaří se mi získat více jak jeden řádek. Jeden řádek mám read(readfrom(sou­boru.txt)), ale potřeboval bych udělat nějak cykl aby to šlo po řádcích až do konce. Zkoušel jsem několik variant, ale stále se mi to nedaří dát dohromady. Díky

Zasílat nově přidané příspěvky e-mailem