Ta myslenka, ze uzivatele daneho jazyka mohou kolektivne rozhodovat o tom co bude soucasti standardu a co ne, se mi strasne libi. Prijde mi to opravdu jako super vec, protoze se na jeho vyvoji clovek muze podilet a je mu ten jazyk mnohem blyzsi a bude se mu urcite i lepe pouzivat. Urcite vic jak kdyz o tom rozhoduje nejake konsorcium, vzdalen cloveku jak galaxie v Andromede....
Na druhou stranu se bojim, zda tu neni trochu nebezpeci, ze to nekdy casem nesklouzne k neotesanemu hybridu typu "ze vsecho neco a poradne nic"... Trochu C, trochu Java, trochu Python, trochu Lua (samozrejme prehanim, ale myslim ze to ilustruje myslenku).
Lidi se do toho nutí sami. U každé "cool" featury se vždycky najde někdo, kdo bude hledat příležitost nebo přímo záminku ji využít. Síla Go v jeho současné podobě je v tom, že je to primitivní a rigidní jazyk, který nedává prakticky žádný prostor nějakým "tvořivým" řešením. Díky tomu kdokoli může snadno číst a pracovat na kódu napsaném kýmkoli jiným, není problém se zapojit do existujícího projektu, a problémy s coding standardy a pod. se tím značně redukují. Samozřejmě, že není žádoucí, aby takové byly všechny jazyky, ale na koncepčně jednoduché aplikace kolem webu, kontejnerů a mikroslužeb, bez pokročilých algoritmů nebo složitých datových struktur, je to celkem ideální.
D přímo nepoužívám, sleduji ho spíš jen zpovzdálí, ale připadá mi, že tam je jiný problém. Před časem se na dlang fórech někdo zmínil, že Rust má svoji každoroční uživatelskou anketu State of Rust, a že D by možná mělo mít něco podobného. Jenže to zamítli, protože to údajně nemá smysl, protože před lety takovou anketu udělali a nic prý z toho nevzešlo. Což v praxi znamenalo, že s žádným z problémů, které tehdy trápily uživatele, se nic neudělalo, místo toho se Walter a Andrej pustili do vývoje jakéhosi polovičatého borrow checkeru à la Rust, který doopravdy nefunguje. Tak je to v D se vším, každou chvíli se snaží honit nějakého nového zajíce a přitom nástroje a tooling jsou nedotažené, podpora cílových platforem vázne, dokumentace je mírně řečeno slabá, integrace do IDE veškerá žádná, knihovny a ekosystém jsou hrozný bordel, schizma GC/noGC je... bez komentáře, komunita je sektářská, apod. Škoda, D mohlo být silným konkurentem pro Swift i pro Go, a potenciálně výborným jazykem pro Android (lepším, než Kotlin a samozřejmě než Java).
Ano přesně jak píšeš, anketu udělali. Sám jsem se jí účastnil. A vyšla skvěle přesně jak jsem volil já. Bohužel jak píšeš nemá to smysl aspoň ne dokud o tom rozhodují lidé, kteří žijí v cela jiném světě.
Jako snahu jim nemůžu upřít, dokonce založili fond. A peníze z toho fondu šli na projekt co měl zlepšit podporu v IDE. Smutné bylo že šly někam kde jít asi neměly. Protože šly na plugin pro jeden editor, a ten plugin už v té době nebyl zázrak a existoval (osobní názor: lepší plugin pro ten samý editor, který aspoň nějak fungoval). Což vedlo přesně k opačnému jevu. Ten dotovaný stále stojí za prd. A autor toho lepšího se na to kvůli tomu vykašlal.
Takže jsem poslal několik tisíc zbytečně. Ono pravdou je že sám nevím kdo to tomu jazyku poštval víc. Jestli Walter Bright a nebo Andrei Alexandrescu. Oba dva jsou kapacity, ale jeden je extrémně tvrdohlavý a je velmi těžké ho o něčem přesvědčit a druhý je Andrei (můj idol), který zbaběle pláchnul.
Ideologické hádky a tvrdohlavost jistě D ublížily, ale ty existují v každém projektu. Opět je to jenom pohled zvenčí, ale připadá mi, že D je hlavně loď bez kapitána. Waltera i Andreie vždycky bavilo si hrát s překladačem, vymýšlet nové a nové featury apod, což plně chápu, ale zároveň se stavěli do pozice lídrů, kterou ovšem nikdy nechtěli doopravdy vykonávat. Management, schopnost vytyčit cíle a trvat na směřování k nim, umět říkat "ano" ale i "ne" (přestože sám bych to třeba chtěl), potřebná diplomacie a budování komunity nejsou možná atraktivní role pro geeky, ale marná sláva, žádný větší projekt se bez toho neobejde.
Zatím - klepu na dřevo - je Go příjemně konzervativní a současně i otevřené názorům mimo Google, takže zatím dobrý :-) Samozřejmě uvidíme, co a jak bude v Go 2 (pokud tedy vznikne, když "goto is considered harmful"), ale prakticky jistě by to neměla být taková změna jako například Python 2 -> Python 3.
To byla narážka na Go 2, které se čte goto - někde to zmínil Rob Pike jako vtip, proč to s Go 2 tak dlouho trvá.
Jinak k tomu goto - sám jsem ho v produkčním kódu nepoužil nikde (a to máme několik mega Go zdrojáků). Ve standardní knihovně Go je použito - pokud správně hledám - jen na jediném místě a to je implementace LZ-77 dekomprimace okopírované z C++ :-) Ostatní použití goto je v testech (testech chování samotného goto).
Máte pravdu - vždycky jde nahradit, ale ne (IMHO) vždy šikovným idiomatickým kódem.
Trochu off-topic: v Ritchieho céčku šlo mít návěstí v proměnných, které měly typ int*. Například “int* x = label; goto x;”. Z Ansi C to ale vyhodili. GCC pak přišlo s operátorem &&, ale návěstí jsou typu void* a v goto se používá hvězdička (goto *x). To jen taková historická perlička (viz C Reference Manual, odstavec 14.4).
Pokud to mělo být na mě, tak nevím, co přesně to znamená, Swift neznám.
Trochu off topic: Když jsem to googlil, narazil jsem na různé příklady s příkazem switch. Tenhle příkaz nesnáším od té doby, kdy jsem začal s C, šílené minové pole zabudované přímo do základů jazyka - zlatý pattern matching a (samozřejmě) sum types...
jj v tom článku používá něco čemu by se dalo říkat "lokální goto", tedy například omezené tak, jak je to v Go. Naproti tomu v klasických BASICech se dalo skákat kamkoli (ono taky nebývaly bloky omezující scope, takže to šlo bez problémů - třeba přeskočit jedno DIM a nahradit to úplně něčím jiným, nebo přeskočit FNxx, což je pěkná prasárnička)
Sinclair BASIC umožňoval to samé. On vlastně dovoloval (stejně jako jiné implementace) i docela pokročilé ladící operace. Bylo možné instalovat breakpointy (STOP) nebo program zastavit klávesovou zkratkou, v přerušeném programu si vypisovat čísla proměnných, měnit jejich hodnotu, téměř libovolně upravit zastavený program před i za breakpointem a to včetně řádku, na kterém byl breakpoint instalován (kdo z vás to má, pánové), a pak vesele pokračovat dál od místa, kde k přerušení programu došlo. A to umožňoval i Basic v ZX80, kde se musel vejít celý s rutinami operačního systému a půlkilovou mapou znaků do 4kB (oproti Spectru ale neměl možnost mít více příkazů na řádek).
Nedám dopustit na Locomotive Basic na Amstradu CPC. Byl to vlastně klon MS Basicu, uměl všechno to, co popisuješ, možnost kdykoli program přerušit a interaktivně debugovat atd., navíc měl na svou dobu celkem pokročilé grafické a zvukové instrukce, uměl okna (sice jenom v textovém režimu, ale i tak), měl full-screen editor a dokonce i rudimentární formu copy/paste. To všechno na Z80 s taktem 4 MHz a 64 Kb RAM. Jistě je to víc, než měl Sinclair, ale co všechno s tím šlo dělat...
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.