No tak sorry, ale proste jsem uz asi dost starej a kladu si otazky, proc se furt nekdo snazi vymyslet bajecny jazyky, ktery stoji porad za pytel. Jako by se furt nekdo snazil udelat naco, co je stejne dobry, jako LISP, ale nemit tam zavorky, akorat tem pakum fakt nedochazi, ze bez tech zavorek uz to neni LISP. To jsou pripady vsech takovych ruznych kvazi-chaotickych nekoncepcnich a pritroublych jazyky pro adolescenty jako je tohle.
Jasne od chvile vzniku Lispu se tvurci dyn. jazyku snazi o jedine - udelat neco stejne mocneho jako Lisp, ovsem s vlastni syntaxi. Mnoha lidem celkem logicky pripada podivne primo zapisovat derivacni stromy, to ma byt zalezitosti prekladace :-)
Je to nesmírně malý, pružný a rychlý dynamický jazyk. Je rychlejší než Per, Python, Ruby nebo PHP (naopak už nestíhá v souboji s některými LISPy, Erlangy či jazykem Scala).
Tohle je spíš ukázka vaší blbosti, než toho, že imperativní/funkcionální přístup je špatný. Špatný není a jestli narážíte na to, že Lua není OOJ, tak vězte, že jím umí být.
Muzu se zeptat, co myslite tim, ze je to "rychly" jazyk?
Nechci se hadat, jestli je to dobry nebo spatny jazyk.
Kazdopadne pokud se rychlosti mysli rychlost vysledneho programu, tak to dost zalezi na interpretru. Pokud tim myslite rychlost vyvoje, tak mi prijde, ze by bylo lepsi pouzit jazyk, na jehoz syntax je clovek zvykly.
Zvyknout si na syntaxi nějakého jazyka je otázka chvilky. Hm... teda pokud to není jazyk příliš složitý, jako například Perl -- there is more ways to do it -- takže pochopit, co myslel programátor, který je narozdíl ode mne zná všechny včetně různých drobných nuancí, je trochu problém... Anebo pokud to není jazyk příliš jednoduchý (jako např. LISP, všechno je funkce a teď to jenom správně poskládat a dopočítat závorky...(jasně, že trochu zjednodušuju a přeháním))
Spíš dá víc práce si zvyknout na standardní knihovny toho jazyka -- a co jsem se díval, Lua jich v základu moc nemá -- je tam práce s vlastními strukturami (stringy, tables, moduly), matematické funcke, základní I/O a operace OS. Takže se dá naučit celkem rychle. Někdo by mohl namítat, že je to nevýhoda a že pak je lepší použít například Python, Perl nebo Javu (a v mnoha případech by to byla správná volba), ale určitě je dobré mít i malý skriptovací jazyk, jako je Lua, který se dá s minimální režií začlenit do projektu v C. (Minimální runtime Pythonu je někde jinde, Javu v této souvislosti raději ani nezmiňovat). Kde je jádro funkcionality napsáno v C a je potřeba nad tím postavit nějakou flexibilní aplikaci je to určitě horký kandidát -- rychlé základní stavební kameny (funkce napsané v C) spolu s rychlým interpretem znamenají celkově rychlou aplikaci -- a asi taky proto je Lua začleněna v několika počítačových hrách...
Takže ta rychlost znamená spíš rychlost běhu než rychlost vývoje.
Ano, filozofií tvůrců jazyka Lua bylo vytvořit minimalistický (ale stále snadno použitelný) jazyk s co nejjednodušším API pro céčkové programátory a pouze základními knihovnami. Je tomu tak z toho důvodu, aby se překladač i interpret dal přeložit na prakticky jakékoli platformě, kde je ANSI C pouze se základními knihovnami.
Jestli je tento minimalistický přístup lepší než "vše v jednom" (například Java EE), asi záleží na subjektivních pocitech. Mě osobně to docela vyhovuje, aspoň mám pocit, že je vše pod kontrolou a skriptovací engine v mé aplikaci postavený na Lua nebude volat třeba funkce jádra, nebude vytvářet další procesy atd.)
Další knihovny a moduly lze stáhnout například z http://luaforge.net/ , jde o takový pokus o CPAN :-)
Syntaxe (a hlavně sémantika) se dá zvládnout přinejhorším za pár dnů a stejně - v praxi si málokdo vystačí s jedním jazykem (=syntaxí), většinou se i v jedné aplikaci přepíná mezi více či méně rozlišnými syntaxemi (mezi jazyky počítám i shell, SQL apod.) a myslím že to není zas tak velký problém. Na druhou stranu například takové céčko a JavaScript se sice syntakticky přibližují, ale sémantika i základ jazyků je dosti odlišný (slabý typový systém vs dynamické typování, first class funkce atd.).
co konkretne sa ti nepaci? alebo budes len p***at na jazyk bez konstruktivnej kritiky?
je prijemne povedat ze tak, ako vyzeras ty, by clovek nikdy nemal vyzerat?
To jsou pindy. Tenhle jazyk je od prvniho pohledu na pytel, zadna radoby integrace do C to neomlouva. Pokud chce nekdo skriptovaci jazyk, ma pouzit GUILE. V tom jde narozdil od tohohle kramu poradne hackovat a delat ty ,,spravne veci'' (treba makra plna kontinuaci, mnam). Tohle je fakt jen zabava pro usmrkance. Pokud chce nekdo prispusobitelny flexibilni jazyk na cokoliv, muze jit rovnou do LISPu, ktery je provereny radou let a je to ,,pan jazyk'', od kteryho vsichni ,,moderni technologove'' jen opisuji features a budou opisovat i v budoucnosti, protoze proste vetsina jazyku to co ma LISP nema. Tak staci tahle konstruktivni kritika?
Zvlastni, zacinam mit z toho prispevku dojem, ze vlastne existuje pouze jeden pravy (R) a na vse vhodny (TM) programovaci jazyk, ostatni jen smutne prihlizeji.
pan je tedy mocny hacker, ktery se s nejakymi usmrkanci nebude zahazovat, hmm, pravy clovek pro tymovy vyvoj... (vlastne ano, on zvladne sam to, co cely vyvojovy tym).
Jsou dve skupiny vyvojovych tymu. Borci, co si hraji na IT, nechci vas urazit, ale zrejme lidi jako Vy. Pro ne jsou samozrejme nejlepsi Java, C++, hodne UML, teamove prace a bajecne brainstormingy s koblihou a kafem. To je jiste bajo moralni a dusevni zazemi pro to, jak ze zakopat v zaprdene firmicce.
Pak jsou tu takovi ti machri, co zakladaji uspesne startupy a delaji velke veci v malem poctu lidi. Delaji v jazycich, co maji swunk (treba LISP), analyza = experimentalni implementace, a vydelavaj baliky penez, kdyz to pak nekomu streli. ;-)
Máš/máte na mysli asi Paula Grahama - to je pravda, on startupy umí zakládat, nejsou to většinou žádné bubliny, odvedou a prodají dobrou práci. Na druhou stranu mnoho startupů začínalo třeba v Pythonu (a po zakoupení větší firmou se to přepsalo třeba do céčka :-) a dalších jazycích.
Ona Lua na první pohled (= první dvě části seriálu) vypadá vedle Lispu strašně staticky (něco jako Plácal), ale ve skutečnosti to není tak hrozné, viz třeba http://en.wikibooks.org/wiki/Lua_Functional_Programming. Ano, syntaxi jako takovou není možné měnit (=javascript), ani Lisp-like makra zde tím pádem nejdou udělat, ale v dalších fíčurách je to +- srovnatelné - konstruktory dynamických datových struktur, práce s nimi, iterátory atd.
Dokonaly priklad toho, proc jazyk nic neresi, je Cadence Virtuoso. Pouzity skriptovaci jazyk je SKILL (derivat/dialekt LISPu). Zatim dobry. Jenze kdyz zjistite, ze obcas dynamic scoping muze zpusobovat vzajemne prepisovani struktur (pripad 'disembodied lists') a funkce pristupujici k ruznym strukturam vraceji ruzne seznamy jen ne ty LISPove, je vam sila LISPu na dve veci.
Dostavate vetsinou "opaque" struktury a i kdyz jsou to seznamy, kazda struktura ma specialni zpusob (nekolik funkci), jak z ni vydolovat nejaky prvek (kazdou blbost treba nejprve manualne prevest na LISPovsky list). Jasne, je to vec implementace, ale ukazje proc LISP nemusi byt vzdy tim nejlepsim kandidatem.
Ad "pan jazyk": lambda kalkul byl pred LISPem, ted mame vsechno delat v lambda kalkulu? Taky proveren radou let...
ad posledni odstavec: z hlediska vycislitelnosti je na tom lambda kalkul v podstate stejne jako Turinguv stroj, takze se da programovat i v nem :-)
Jo a implementace TS ve forme programovaciho jazyka samozrejme existuje, jmenuje se Brainfuck a jeho interpreter se vleze do jednoho sektoru pevneho disku :-) takze zde mame jazyk ekvivalentni k Lispu...
S tim lambda kalkulem to byla spis hyperbola ;-) (z hlediska vycislitelnosti jsou bezne pouzivane jazyky TS-ekvivalenti). Jinak Brainfuck by rozhodne az tak moc neubral na pouzitelnosti kdyby byl pouzil misto SKILLu :-D
Sorry, ale tyhle argumenty neberu. Za prve, dynamic scope se ma pouzivat jen s mirou a Common LISP (coz je jediny spravny LISP) pouziva lexical scope. Dynamicke promenne jsou fajn, ale jen na nektere veci a s mirou. Naopak, pokud je jazyk nema, nektere veci nejdou udelat bez hacku. S tim lambda-kalkulem to je takova plana teorie. Predne, LISP jako takovy s nim nema nic spolecneho, kdyz nepocitam nazev jednoho specialniho operatoru. Pripodobnovat LISP k lambda-kalkulu a jeho ,,prakticnost'' je asi takove, jako pripodobnovat RAM-stroj k Cecku. Sami asi citite, kde tohle prirovnani je.
MarSik u predchoziho dilu psal, ze se podobne simulace v Lua pisou (http://www.root.cz/clanky/programovaci-jazyk-lua/nazory/258335/), ale vzhledem k tomu ze neznam podrobnosti (krome toho, co rekne strejda Google), tak cekam, ze nekdo napise treba o jaky projekt konkretne se jedna, jak jsou ty simulace reseny (asi pres coroutiny) atd.
V drtive vetsine ve fortranu, ale taky v cecku a c++. Jazyk LUA by urcite nasel vyhodne vyuziti... jsem zvedavej na nejakou ukazku te masivni paralelizace:).