Teda při pročítání tohoto sumáře jsem zažil tolik aha efektů jak snad už dlouho ne. Ti pánové, co to navrhovali opravdu přemýšleli a vymysleli fakt elegantní řešení (:= versus =, procedure versus funkce a vunucování výběru návratové hodnoty...). Moc se mi to líbí!
Na začátku píšeš, že "Dyon nelze považovat za univerzální programovací jazyk, který má ambice nahradit dnes populární skriptovací jazyky.". Má nějaké zásadnější omezení?
Mohl by si Dyon porovnat s Luou? Nějaké porovnání výkonu?
Díky moc za článek!
Asi jsem se vyjádřil nepřesně. Nechci slovíčkařit. Měl jsem na mysli tohle http://www.piston.rs/dyon-tutorial/lifetimes.html. To nemusíte v jiných skriptovacích jazycích řešit. Například u běžného patternu, kdy funkce změní objekt a vrátí ho.
Ano, ten jazyk v některých místech vypadá divně, ale má to svoje důvody :-)
Jinak k tomu info boxu: on se k tomu vyjádřil sám autor, že Dyon bude existovat jen v rustovském ekosystému. To může znamenat, že pro něj (asi) nevznikne moc knihoven a vše se bude řešit přes Rustovské modulu (má to svoje výhody ale i nevýhody, přece jen interop mezi silně typovaným a dynamicky typovaným jazykem může skřípat). Co by mohlo vadit pro mainstreamové použití je neexistence class-based OOP (o tom si myslím svoje :-) a přijde mi, že rozlišování mezi funkcí a uzávěrem je trošku násilné, lidi jsou již zvyklí na funkce jako plnohodnotný datový typ (ale to se samozřejmě může ještě změnit).
Porovnání s Luou - musím vyzkoušet, vlastně mě to dost zajímá, jak to dopadne :-) [jinými slovy - zatím nic nemám])))))))))))))))))))))))))))))
bohužel, vše to jsou korporátní zmetky a zveřejnění v tomhle světě a století moc reálné není.
Však to ale není nic světoborné, drobné procedury a transformace a parsování různých dat, občas drobné analytické výtvory. Povětšinou to nepíší programátoři, ale stážisté a junioři a já jim jen lehce radím, blbuvzdornost je dost důležitá, je rozdíl práci vracet jednou nebo pětkrát :)
Zajímá mě, v čem je ten rozdíl oproti javě, že je ta chybovost o tolik menší? Když mi někdo napíše: přešli jsme z céčka na javu a už nemáme takové problémy s uvolňováním paměti, tak tomu rozumím, ale vím že gc není samo-spásný, že je větší problém lenost a nedisciplina programátorů ... Co je teda ten rozdíl - třeba i subjektivně .-) Dík
Připojil bych se s dovolením k dotazu, konkrétně:
1. Je zajímavé, že se to projevilo na tak malých programech. Dovedu si představit nějaké důvody (imutable proměnné apod., možná i kvalitnější stážisti, kteří jsou vůbec Rust pobrat). Dá se to teda nějak popsat?
2. Předpokládám, že tam zaměstnáváte na tyhle blbinky ucha bez praxe, tudíž nemají nějaké hluboké znalosti knihoven Javy a tak to vyjde nastejno. Kdo ale s tím přišel, že to budete dělat v Rustu a proč?
Díky.
nelze to zobecňovat a nechci pomlouvat ostatní jazyky či rust glorifikovat. Základem je špatný programátor, pokud někdo umí skvěle programovat, je šumák, který jazyk použije a výsledek bude vždy nadstandardní.
Rust hromadu chyb odchytí při kompilaciu. Řada "programátorů" zkouší napsat program do té doby než jim přestane křičet IDE a než jim jde zkompilovat, pak ho často odevzdávají. V javě nebo pythonu těch chyb tímhle procesem prochází víc.
Problém je objektovost, lidé, kteří neznají dobře OOP paradigma, ztrácí se v tom, nerozumí struktuře a chtějí přemýšlet spíše víc funkcionálně, ale haskell či clojure je pro ně už moc. Jde i o závislosti, které musí používat.
Rust má přehlednější dokumentaci (ryze subjektivní) a oproti scale nebo pythonu se v ní lidé méně ztrácí, daleko dříve jsou schopni přijít s řešením.
Přímočařeji se tam řeší závislosti a sdílení datový struktur, lépe se copy-pastuje kód z jiných projektů či od kolegů. V javě skoro nikdo testy nepsal a v rustu si velice rychle zvykli psát testy přímo na konci souboru spolu s kódem, proč ne. Možnost kód napsat v jednom souboru se vším všudy je opět malá přidaná hodnota. Oni si ho pak sdílí emailem a funguje jim to. Napsaný program si většinou spouští přímo z IDE (terminál je vidět zřídkakdy) a u rustu se daleko přehledněji zobrazují chyby a rychleji najdou, co mají špatně, s Javou to končilo konzultacemi se zkušenějším.
Vývoj v korporátní sféře je hodně jiný, na efektivnost a standardy se často kašle, unit testy jsou výjimkou, k aplikacím je vždy support od vendora a on si pohlídá, že běží. Testování výsledné aplikace je jen na očekávané vstupy, důležitá je dokumentace, pokud něco na vstupu přijde jinak, hned se to porovnává s dokumentací a pokud to je špatně, za vše může zdroj a ne vendor. Vše píší neprogramátoři či teoretici.
Tvrdit jak je programování vznešený obor a jak je potřeba vše psát s láskou si můžeme říkat max. mezi sebou. Jakmile člověk uvidí realitu dělníků u vývoj SW, je trochu zhnusený. Já k téhle zoo poskytuji externě konzultace tak, aby se pohlídala technologická kvalita, občas mám nějaký workshop, na jednom jsem ukázal rust a u asi 10 jedinců se chytl a postupně ho začali používat, bylo zajímavé sledovat jak to dopadlo ve srovnání s javou, scalou a pythonem.
A co vás zajímá? Začínáme s Rustem v kombinaci s Pythonem. Datová analytika a NLP. Aktuálně jsme v začátcích, takže nic moc nabídnout nemůžu, ale komunita kolem Rustu by tu vyrůst mohla. Nebo aspoň být v nějakém kontaktu pro budoucnost. Rust nás láká kupodivu tím, že je dost přehledný, na to jak může být low-level a taky (nad)standardním package managerem a build systémem ... na rozdíl od C++ se kterým se tak jako tak musíme v NLP potkávat.
On je fakt že Rust prostě neumožňuje dělat některé věci, které by v jiných jazycích prošly a často se tak i odchytí možná chyba. K tomu pomáhá nejen v přísném hlídání paměti, ale i v takových drobnostech jako nutnost vyčerpat všechny možnosti v match. I když pak občas nenechá zkompilovat věc která by chybu nezpůsobila (což může být zpočátku trošičku otravné), dá se tak snáz odchytit situace kdy by problém nastal.
Mě jen trápí, jak nové a nové jazyky přicházejí vždy s jinou syntaxí, když léty ověřená a geniální C-like syntaxe (počítám do toho i Javu apod.) není čím vylepšovat. Myslím tím syntaxi; aťsi přibývají uzávěry a nové konstrukce, počítání referencí, více kontrol při kompilaci (jen houšť!). Ale proč tu máme podmínku if-u bez závorek, příkazy neoddělené středníky... Abych se vyjádřil více k článku - ty backslashe v Dyonu jsou fakt eklhaft!
Trosku to zavani Wadlerovym zakonem :) https://wiki.haskell.org/Wadler's_Law ale ja celkem chapu, proc se nektere veci z cecka zahazuji. Napriklad vynuceni bloku {} v podminkach a smyckach, to resi docela dost chyb, ktere se mnohdy najdou az na produkci (GOTO fail...). Zavorky okolo podminek je mozno psat porad ne? Ty prece nemeni hodnotu vyrazu a stredniky, hmm, jsou fakt potreba jako druhy oddelovac? (po konci radku)? Popravde nevim, delam v jazycich s i bez stredniku a mentalni prepinani jde tak nejak automaticky.
S temi backslashi ale mas naprostou pravdu. Nevim proc proste nejsou funkce first-class objekty jako napriklad v JS nebo v Lue, tim by se automaticky vyresila i problematika uzaveru ;) Mozna to jeste zmeni a celou tu syntaxi s backslashem (to je asi napodobenina lambdy) pujde pryc, nebo povoli primo zapis lambdy, coz by bylo cool (a neprakticke soucasne :)