Dnes a zítra probíhá vývojářská konference Google I/O 2025. Sledovat lze na YouTube a na síti 𝕏 (#GoogleIO).
V Bostonu probíhá konference Red Hat Summit 2025. Vybrané přednášky lze sledovat na YouTube. Dění lze sledovat na síti 𝕏 (#RHSummit).
Společnost Red Hat oficiálně oznámila vydání Red Hat Enterprise Linuxu 10. Vedle nových vlastností přináší také aktualizaci ovladačů a předběžné ukázky budoucích technologií. Podrobnosti v poznámkách k vydání.
Tuto sobotu 24. května se koná historicky první komunitní den projektu Home Assistant. Zváni jsou všichni příznivci, nadšenci a uživatelé tohoto projektu. Pro účast je potřebná registrace. Odkazy na akce v Praze a v Bratislavě.
Troy Hunt představil Have I Been Pwned 2.0, tj. nový vylepšený web služby, kde si uživatelé mohou zkontrolovat, zda se jejich hesla a osobní údaje neobjevili v únicích dat a případně se nechat na další úniky upozorňovat.
Microsoft představil open source textový editor Edit bežící v terminálu. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
V Seattlu a také online probíhá konference Microsoft Build 2025. Microsoft představuje své novinky. Windows Subsystem for Linux je nově open source. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.
Z příspěvku Turris Sentinel – co přinesl rok 2024 na blogu CZ.NIC: "Za poslední rok (únor 2024 – únor 2025) jsme zachytili 8,3 miliardy incidentů a to z 232 zemí a z jejich závislých území. Tyto útoky přišly od 6,2 milionu útočníků (respektive unikátních adres). SMTP minipot je stále nejlákavější pastí, zhruba 79 % útoků bylo směřováno na tento minipot, 16 % útoků směřovalo na minipot Telnet, 3 % útoků směřovaly na minipot HTTP a 2 % na minipot FTP. Dále jsme zaznamenali 3,2 milionu unikátních hesel a 318 tisíc unikátních loginů, které útočníci zkoušeli."
Byla vydána (Mastodon, 𝕏) nová verze 3.0.4 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.
Byla vydána nová stabilní verze 7.4 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 136. Přehled novinek i s náhledy v příspěvku na blogu.
Minule jsem se zájmem sledoval flame pod kraťoučkým blogem a velkým kusem kódu, co nic nedělá, ale je polymorfní, zapouzdřený a kdo ví jaký ještě :).
Včera mi vedoucí v práci řekl, že jsem jednoduše založením programátor. No je pravda že mi tenhle způsob vyjadřování mi nedělá problémy. I když třeba logické paradigma mi vůbec, ale vůbec nesedí.
Můj první jazyk byl Basic ještě na PMD 85 s procesorem MHB 8080A (2,048 MHz) :), jó to byl stroj, kdo ví kde skončil… I v té jeho hloupé grafice jsem uměl kreslit krychle, a podobně. V textovém režimu jsem dokázal nakódit hru Snake z Nokie a pak i Tetris, který byl vzhledem k použitému jazyku a interpretru neuvěřitelně pomalý. Tenhle skoro jazyk jsem zmáknul asi za dva měsíce, ono v něm taky nejde skoro nic složitého dělat, spíš hrozí návyk otřesných konstrukcí, nebezpečný příkaz goto je stále po ruce. I přes absenci jakéhokoli strukturování programu, přes to, že není nijak omezená viditelnost proměnných, vzpomínám na tuhle část mé programátorské cesty velmi rád, bylo to odkrývání tajemství, bez jakéhokoli vedení a hlavně nezřízená zábava :).
Potom se do mě snažili ve škole natlačit Pascal, ale naštěstí jsem odolal :) a s nadšením jsem se pustil do C :). V C jsem programoval dlouho předlouho. Zamiloval jsem si pointerovou aritmetiku, správu paměti a takové ty slasti, strasti a propasti C. Snad můžu s velkou skromností říct, že v C programovat umím. Taky jsem už pár věcí napsal, a nebyly to jen úkoly do školy, ale moc jsem necítil nutnost psát nějaké aplikace zrovna v C. Je to celkem pracné, když si takovou utilitu můžu nabouchat v něčem skriptovaném… Rozhodně ale C patří k mým oblíbencům, aby taky ne :). Pokud budu potřebovat něco rychlého, a šetrného na paměť tak to napíšu v C.
Java byla první objektový jazyk se kterým jsem měl tu čest se pořádně potkat a naučit se ho používat. Myslím si, že pro první seznámení s objektově orientovaným programováním je velmi vhodná. Ve spojení s dobrým IDE (osobně používám NetBeans) se učí Java velmi rychle a příjemně. Člověk se nemusí starat o paměť (to má své pro i proti), výsledná aplikace je celkem rychle hotová, funguje jak má (pokud je správně navržena), kód je přehledný (pokud je aplikace správně navržena). Celkem mi zachutnaly vyjímky, protože ošetřování neočekávaných stavů například v C je spojeno s celkem nehezkými konstrukcemi, povětšinou s goto.
V mezičasu se objevil z výukových důvodů Haskel, ano funkcionální paradigma je fajn, ale k srdci mi nepřirostlo, obzvlášť ve spojení s občas dost praštěnou syntaxí Haskelu, a celkové nepoužitelnosti tohoto jazyka na nějakou běžnou aplikaci. Netvrdím že to nejde, je to věc zvyku, ale můj zvyk to není. Tenhle model není moc vhodný k řešení běžných aplikací, alespoň z mého pohledu.
No a před asi čtyřma měsíci jsem se víceméně z nutnosti pustil do C++ a opravdu, ale opravdu se mi líbí. Je pravda, že občas si říkám, že je to vlastně maškaráda nad C :), ale moc hezká. Když to člověk bere jako objektový jazyk, tak to tak funguje a moc bobře. Navíc můžete spravovat paměť jak se vám líbí. Když si dáte tu práci s kopírovacími konstruktory, get a set metodami, přetížením operátorů, tak nemusíte skoro starat o paměť (za předpokladu, že třídy jsou dost malé na to, aby se daly alokovat na zásobníku).
Možná je to troufalost, že se tenhle jazyk učím za pochodu, a už tři měsíce mě to živí, ale zatím to jde a nikdo si nestěžovatl.
A nakonec: kolik jazyků umíš tolikrát jsi programátorem :).
Tiskni
Sdílej:
vector
,naopak zpoždění implementace v překladačích se s každým novým vydáním lineárně zvyšuje (C++03 už tu máme 5 let a žádný překladač jej AFAIK plně nepodporuje).Jo, to je pěkně na*****, co vlastně c++3 přináší?
For some years after the official release of the standard, the committee processed defect reports, and published a corrected version of the C++ standard in 2003.
C++03 už tu máme 5 let a žádný překladač jej AFAIK plně nepodporujeSice nevím, co c++03 přináší, ale aspoň Comeau a EDG frontendy o sobě tvrdí, že ho podporují celý.
Ona totiž krása a elegance ještě neříká nic o praktické použitelnosti toho jazyka - to je to.A proč by jazyky jako Haskell a Scheme neměly být prakticky použitelné? Ona totiž nízká rozšířenost a elegance neimplikuje praktickou nepoužitelnost.
Dokažte nějak seriózně, že haskell je úspěšný.A co byste si představoval?
Jo a mimochodem, KDE de facto není v c++O KDE jsem nic nepsal, tak nevím proč reagujete na můj příspěvek.
A nakonec: Na co je sebeelegantnější jazyk, když ho nikdo nepoužívá a nic se v něm nepíše?V Haskellu lidi píšou a používají ho. Kdybyste se porozhlédl po té domovské stránce Haskellu, tak byste našel odkazy na projekty, které jsou v něm napsané, je jich tam dost. Jazyky jako Haskell a spol. jsou dobré k tomu, že obsahují mnoho zajímavých myšlenek, které se pak třeba dostávají i do běžných jazyků. Lepší by bylo, kdybyste ho třeba zkusil, než psal, že je k ničemu.
Lepší by bylo, kdybyste ho třeba zkusil, než psal, že je k ničemu.Já neříkám, že je k ničemu.
Darcs - version control system, který je ovšem neskutečně pomalýTo je již minulost
Pokiaľ ma pamäť neklame, Haskell si zvolili preto, lebo syntax perl6 pár rokov dolaďovali a nikoho netrápila pomalosť výsledku.
Nicméně žádný teoreticky hezký jazyk neprorazil. Neprosadil se v praxi - protože byl zkrátka příliš dřevěný a toporný v praxi a narážel na značná omezení. Případně jako druhou variantu vyžadoval IQ nad 150, a být ve střehu. Tudíž až akademici vymyslí něco prakticky použitelného za programovací jazyk, tak mi to nahlašte, ale myslím, že v tomto životě mě to asi nepotká.
Teoreticky hezké a čisté jazyky, které je snadné se naučit a jsou zárověň prakticky orientované, existují a minimálně s jedním jste se už během své kariéry setkal.
Smalltalk IMHO není jednoduché se naučit (syntaxi ano, ale naučit se něco praktického vytvořit ne).Jak se říká - člověk se naučí být v C++ produktivní za rok, ve Smalltalku jen za 365 dnů
Když jsem si pročítal Školičky, tak se tam na Smalltalk dost nadávalo, že to je nepovedený LispTa školička je tady. Je to obdoba toho, jako by někdo hodnotil uživatelskou přívětivost OpenOffice podle rozbalených ODF souborů. Většina výtek na gramatiku totiž směřuje na exportní formát pro zdrojové kódy, se kterým se běžně programátor vůbec nesetká (autor psal o Smalltalku na základě seznámení s ořezanou implementací, která vznikla především pro scriptování a od plnohodnotného smalltalkovského systému byla v té době na míle vzdálená). On se snažil ve Smalltalku hledat Lisp a přitom zcela opomenul jeho základní a unikátní vlastnosti, které ho od Lispu odlišují. Pokud chcete objektivnější porovnání s Lispem, obraťte se třeba na Kyosukeho, který rozhodně netrpí tunelovým viděním (pokud se nenachází zrovna v nějakém tunelu)
Stejně tak se prakticky nikdo neučí XML tím, že si přečte normu, nikdo se neučí programovat sítě tak, že začne číst normy, nikdo se nezačne učit SQL tím, že si přečte normu SQLTak já jsem podle Vás "nikdo"?
O tom, jak těžké je parsovat C++ kód mě nezajímá, protože to udělá jednou výrobce kompilátoru a mě spíš zajímá, zda mi syntaxe pomůže.Tuhle větu si vystříhněte a přečtěte znovu, až budete luštit nějaký cizí složitý program
Ono ve skutečnosti parser C++ není nic extra těžkého, je to v zásadě dost jednoduchý problém.Jasně, syntaktická analýza je v zásadě velmi jednoduchý problém. A třeba u té Ady se i velmi jednoduše řečí, protože ta má rozumně navrženou gramatiku. Ale fakt by mne zajímalo, jak může soudný člověk při plném vědomí navrhnout takový humus plný konfliktů, jako je C/C++ (a další to prezentovat jako nic komplikovaného). Je samozřejmě pravda, že parsery C++ píše pár lidí na světě, ale to na skutečnosti nic nemění.
A upřímně si myslím, že bych daleko rychleji implementoval dobrý C++ parser, než dobrou knihovnu regulárních výrazů.A to já bych teda zkoušet nechtěl. Dobrý parser pro mě znamená kvalitní detekci a zotavení se ze syntaktických chyb, a to musí být u C++ pěkný masochismus. Jenom zběžně jsem teď prolítnul C++ parser v ANTLR a není to nic hezkýho (a pochybuju, že to bude nějaký hi-fi, co se rozumně vypořádá s vadným vstupem). Když jsem před časem četl učebnici C++, říkal jsem si, že takový překladač C++ musí mít minimálně devět průchodů jako u PL/1
Až nějaký čistý a nehumusoidní jazyk dokáže řešit praktické problémy, které řeší C++, C++ se stane zbytečným.Vidíte, a spousta lidí je ještě stále přesvědčena, takový jazyk existuje už dávno a jmenuje se C
Jinak určitě je praktičtější udělat složitější syntaxi, kde se deset lidí zapotí při návrhu dobrého parseru s detekcí chyb, a desítkám miliónu programátorů to ulehčí práci, než vymyslet jazyk, kde deset lidí v pohodě udělá parser a desítky miliónů programátorů se bude prát s méně praktickou syntaxí.To je pravda, ale je to argument spíš pro Haskell
Ano, typický přístup Javistů - oni jsou zvyklí na tom, že co nechtějí používat je potřeba zakázat. Napadlo Vás taky někdy, že když se Vám nelíbí featura F, že jí nemusíte používat?Mně spíš přijde, že zrovna tato featura je v C++ značně nedotažená: přetěžovat operátory sice jde, ale definovat vlastní už nikoliv. Přirozený důsledek je, že když chcete definovat nějaký nový operátor, musíte použít jméno stávajícího naprosto neintuitivním způsobem. Typický případ je
<<
a >>
zneužité pro I/O.
Jako Javista ... Mě se na C++ nelíbí věci jako je předefinování operátorů, vícenásobná dědičnost, apod. Ano, typický přístup Javistů - oni jsou zvyklí na tom, že co nechtějí používat je potřeba zakázat. Napadlo Vás taky někdy, že když se Vám nelíbí featura F, že jí nemusíte používat?Moment, kdo mluvil o zakazování? Já jenom říkám, že se mi ta vlastnost nelíbí a proto jsem rád, že v ObjC ani v Javě není. V C++ ji nemám rád a proto, když jsem v něm chvilku programoval ve škole, tak jsem to nevyužíval.
A není trochu uhozené na hlavu, jestliže 64-bitový MaCOS si předepisuje programovací jazyk, ve kterém se musí psát programy? Mě se třeba na Linux, Windows, a asi tak miliónu dalších OS líbí, že si mohu zvolit jazyk podle svého, ať už to bude cokoli - a řekl bych, že tato možnost volby je plusem i z obchodního hlediska pro výrobce OS.Mac nepředepisuje jazyk, který musíte používat. Carbon API je již od svého vzniku označeno jako "deprecated" a sloužilo pouze pro přechod mezi Mac OS classic a Mac OS X. Apple chce, aby se už konečně přestalo používat, proto vynechává podporou pro 64-bit. Krom toho, kdo vám přikazuje používat na Macu Objective-C? Naopak, je tam přímo v XCode podpora pro kupu dalších programovacích jazyků: Ruby, Python, Java a samozřejmě i C a C++. Kde vidíte ten zákaz? Pokud chci programovat aplikaci pro více systémů, zvolím Javu nebo C++. Jestliže chci naplno využívat API, které mi Mac poskytuje, zvolím Objective-C a Cocoa. Krom toho, spousta frameworků umožňuje používat čisté C. Příkladem budiž AddressBook.framework, který má binding přímo na C. Nevím přesně, co porodními bolestmi s 64-bitovým systémem na Macu myslíte, ale slyšel jste někdy o Universal Binary? To je totiž to, co Linux a Windows nemají. Naopak tyto systémy bych nazval těmi, kteří si své porodní bolesti s 64-bitem teprve prožívají. Protože spouštění 32-bitových binárek na 64-bitových Windows je prý zajímavé dobrodružství. Pokud lžu, vyvraťte prosím.
Namísto universal binary je prostě možné mít několik binárek, výsledek je tentýž. Jinak vyvracet nic nemohu, protože moje zkušenosti s 64 bitovým Linuxem a Windows jsou tak mizivé, že nevím o tom vůbec nic.Programoval jste někdy v Javě s pomocí JNI? Pak by se vám tento přístup velmi znechutil. Promiňte, ale proč bych měl nutit uživatele, aby si vybíral, pro jakou verzi svého systému si má stáhnout program. Díky Universal Binary mám všechny 4 architektury v jedné binárce a je hotovo. Pro JNI naprosto ideální situace. Načte se jeden soubor .dylib a mám vystaráno. Naopak na Windows a na Linuxu se s tím musím zvlášť kompilovat pro každou architekturu, kterou chci podpořit. Teď si představte, že chci zároveň podporovat PowerPC, zároveň Intel a pro každý z těchto ještě 32-bit i 64-bit. Bavilo by vás kompilovat 4 různé verze a pak vyrábět 4 různé balíčky, mezi kterými by si uživatel musel vybírat? Mě ne. K té plné podpoře API. Na Windows pokud vím máte pouze C# a C++. Na Macu je hlavní C a Objective-C. Co je na tom špatné? Nebo hodláte podporovat 20 frameworků pro každý jazyk zvlášť? To my přijde s prominutím trochu přehnané. Já když napíšu, že jsem rád že tam nějaká vlastnost není, tak to neznamená že to někomu zakazuji. Nejsem diktátor. Proto pokud existuje jazyk jako C++, který obsahuje vlastnosti, které nemám rád, tak jej nepoužívám. To jenom vy máte pocit, že to chci zakázat. Díky tomuto pocitu bych v tom případě zakazoval i Linux a Windows, protože je nepoužívám a jsou v nich vlastnosti, které se mi nelíbí. Je to tak?
A v C++ se dají stvořit ve zcela standarním C++ na každém kompilátoru - nepotřebujete žádná rozšíření.Jak? Tím (s prominutím) hnusem, který nabízí Boost? (Jinak na ostatní vaše rádobyargumenty si dovolím neodpovídat a raději v duchu přesně opačném než titulek tohoto článku tvořit více kódu, zato však méně keců.) Pokud chcete seriózní argumenty, raději se předveďte s nějakým kusem kódu v C++, který by podle vašeho názoru nešel elegantněji napsat v jiném jazyce.
K věci - asi si to chce vyzkoušet větší týmový projekt v C a pak v C++. A ideálně za vlastní peníze, kdy ten vývoj budete platit z vlastní kapsy.Větších týmových projektů v C jsem už pár vedl (a vývoj aspoň v některých dobách platil), kupříkladu takový Holmes. V C++ jsem napsal jen řádově 10k řádků, ale měl jsem to potěšení vývoj několika velkých projektů sledovat. Vím tedy svoje
A není Váš dojem daný spíše tím, že se nepohybujete v C++ kruzích?Nikoliv, je dán jednak sledováním vývoje překladačů (jeden by čekal, že lidé, kteří překladače programují, jsou jedněmi z nejlepších znalců jazyka), jednak velmi častými příklady programů, které nejdou novou verzí překladače přeložit, ač s tím starší (či jiný) překladač nemá sebemenší problémy. Jistě, jsou to konstrukce, o kterých se nakonec ukáže, že je nejnovější verze normy zakazuje, alespoň když ji čtete dostatečně pozorně, ale samotný fakt, že překladačům (a tvůrcům normy) trvalo několik let, než zkonvergovaly k tomu, že taková konstrukce není korektní, vypovídá o mnohém.
A jste si tím jist co píšete? Když třeba předáte pole, tam vidíte v C kulové ohledně změny, či nezměny. [...] Takže nemusíte poznat nic.Jistě, jsou situace, kdy nepoznám nic ani v Céčku. Ale v mnoha případech poznám, zatímco v C++ prakticky jen tehdy, když předávám konstantu
A důvod proč si to myslíte?Inu, máloco donutí člověka rozmyslet si i ty nejtemnější zákoutí jazyka, jako psaní překladače.
V C++ existuje jenom jedna jediná norma.Ano, oficiální norma existuje jenom jedna, leč 10 let stará a prakticky žádný překladač se podle ní neřídí. Obvykle se snaží řídit spíš podle nejnovějšího draftu normy nové...
Nepoznáte nic, například Linus prosazuje tento prototyp:A co má být? Jedním protipříkladem kvantifikátor "skoro vždycky" nepopřete
double sin(double x);
. C++ není složitější. Zajímavé je, jak spousta lidí má paniku a hrůzu, pokud dostanou do ruky nástroj o velkými možnostmi - přičemž - a to je podstatné - je nikdo nenutí využívat všechny možnosti naráz. V podtextu říkáte, že prostě C++ je příliš mocné, možností má moc a Vy se neumíte vybrat, a proto chcete radjěi omezenější nástroj. Vždyť je to jednoduché: Proč nepoužíváte jen ty možnosti, které chcete?
No já nevím. Totéž by se dalo říct třeba o Lispu, proč se spousta lidí tak strašně bojí, že dostane do ruky mocný nástroj? (Přičemž jsem to opravdu slyšel jako argument proti používání Lispu ve firmách - "představte si průměrné javisty, co by v tom začali dělat, buďme rádi, že takhle aspoň nenapáchají škodu".)
Jako mnohem podstatnější problém vidím, že většina komplexity C++ je zbytečná - zcela shodně mocný jazyk lze založit i na mnohem jednodušší gramatice a sémantice. A zbytečnou složitost bych viděl jako mnohem větší problém, než zbytečnou sílu jazyka - zatímco za vyjadřovací schopnost jsem rád i za cenu toho, že přečíst něco po některých lidech může chvilku trvat (případ Lispu), při zbytečné složitosti mi to čtení občas může trvat ještě déle, ale nezískám tím zhola nic (případ C++).
Od možností inline funkcí a možnosti optimalizací pomocí šablon plus řadu dalších možností, které v C nejsou tu ani nezmiňuji.Možná jste si toho nevšiml, ale standardní C má inline funkce taky.
A v C++ se dají stvořit ve zcela standarním C++ na každém kompilátoru - nepotřebujete žádná rozšíření.A jak se chovají jejich volné proměnné?
Ok, další ironie z Vaší strany, beru. ... Opět ironie.Myslím, že to myslí vážně.
Většina komplexity v C++ není proto, že to nelze udělat jednodušeji, ale proto, že komplexita podstatně zvyšuje možnost rychlostních optimalizací. C++ je dělaný na max. rychlost a nízkou spotřebu zdrojů a tomu je podřízeno naprosto vše.Zvláštní, že spousta tvůrců jiných programovacích jazyků to vidí přesně naopak.
Z C++ LISP neuděláte Pokud tedy nenapíšete v něm LISP executor.Nemusí se jednat zrovna o Lisp (BTW, už dekády se to píše s malými písmenky.
je to jazyk, který si vystačí sám se sebou, teoreticky v něm napíšete naprosto všechno i hodně low level a C++ nepotřebuje podporu žádného jiného jazyka.A už umí standardní C++ něco tak triviálního, jako bitová rotace, nebo je to pořád ještě vylepšená PDP-11ka?
Asi mi něco ušlo, ale nechápu. Já se pouze pozastavil nad tím, že údajně zcela samospasitelný dokonalý jazyk C++ (samospasitelný včetně systémového programování) nepodporuje triviální operaci, která je dnes v podstatě všude v hardwaru. Přitom mi přijde, že implementovat ji by bylo snadné, ale přesto se s tím nikdo ani v moderních normách C a C++ neobtěžoval (aspoň jsem si toho nevšiml), proto třeba kompilátor SBCL (Common Lisp trpí obdobným problémem) extra poskytuje rozříšení ROTATE-BYTE, hlavně kvůli kryptografickým algoritmům a podobně - nemá cenu psát je zbytečně pomalé, když procesor tu instrukci prostě má.
Closure conversion je zajímavý problém. Udělat ji efektivně je určitě mnohem složitější, než jen přidat operátor pro jednu operaci a dopsat pár řádků do generátoru kódu. Nicméně já tuhle vlastnost jazyka považuju za vlastnost pro vyšší jazyk natolik výhodnou - a především, natolik fundamentální - že kdybych si měl vybrat mezi efektivní implementací closure conversion a přítomností či nepřítomností bitové rotace v jazyku, ve kterém budu psát 80 % kódu nebo víc, radši beru kvalitní closure conversion.
U Cčka jsem smířený s tím, že tam takové věci mít nikdy nebudu, a tak se soustředím na to, co mít můžu, a chvílemi by se rotace mohla hodit, tedy hlavně v té třídě přoblémů, pro kterou se Cčko nejvíc používá (chroustání čísel a bitů). U vyšších jazyků (než C, které je samo o sobě celkem slušně vysoko, když se to tak vezme) by mi zase vadila absence funkcí, jako jsou zcela plnohodnotné closures, protože když už rezignuju na výkon za všech okolností, chci někde aspoň ty základní fíčury. Kde přesně mám tedy tu nekonzistenci?
Ale fakt by mne zajímalo, jak může soudný člověk při plném vědomí navrhnout takový humus plný konfliktů, jako je C/C++ (a další to prezentovat jako nic komplikovaného).Ono by tky možná stačilo nahradit jenom ten parser...
spíš hrozí návyk otřesných konstrukcí, nebezpečný příkaz goto je stále po ruceNebezpečnost goto se IMO přeceňuje.
najdi_zarizeni, if nejalezeno goto konec alokuj porty, if sehlalo goto konec otestuj_pritomnost, if selhalo goto uvolni_porty namapuj pamet, if selhalo goto uvolni_porty inicializuj, if selhalo goto uvolni_pamet vytvor_zarizeni atd... uvolni_pamet: odmapuj pamet uvolni_porty: dealokuji porty konec:Je pravda, ze je mozne to same udelat i bez goto, ale tohle elegantnejsi, obzvlast u veci, kde toho muze pri inicializaci spoustu selhat.
try: najdi_zarizeni, if nenalezeno throw konec alokuj porty, if selhalo throw konec otestuj_pritomnost, if selhalo throw uvolni_porty namapuj pamet, if selhalo throw uvolni_porty inicializuj, if selhalo throw uvolni_pamet vytvor_zarizeni atd... except: uvolni_pamet: odmapuj pamet continue uvolni_porty: dealokuji porty continue konec:
continue
jako analogii pro nutnost psát break
v každé části klauzule switch
v Céčku. Výjimky jsou ve většině jazyků navrženy tak, že se nečeká, že bude víc handlerů spuštěno v téže době. Naopak ve switchi se musí explicitně psát break, asi se tehdy očekávalo, že většinou se bude pokračovat dále. continue
v tomhle případě tedy funguje opačně, říká "nezastavuj se, pokračuj dál".
Jestli to v některých jazycích nejde takto hezky či analogicky udělat, tak je to chyba těch jazyků, že některý use case takhle zazdí.
Jestli to v některých jazycích nejde takto hezky či analogicky udělat, tak je to chyba těch jazyků, že některý use case takhle zazdí.Na začátku vlákna se mluví o jádře, C/C++ a o tom, jak v něm použít výjimky, aby to bylo lepší, než goto...
Nemuzu se ubranit dojmu, ze takto pouzite vyjimky nejsou nic jineho nez maskovane goto.Nápodobně. Je to proto, že Martin Böhm a trekker.dk jsou prasata (viz třeba tohle nebo tohle). RAII na ně
goto
je něco jako ty vole
, dokážete tím říci cokoli.
try { najdi zařízení; if nenalezeno throw Enenalezeno; alokuj porty; if selhalo throw Enenalezeno; try { namapuj paměť; if selhalo throw Euvolniporty; try { inicializuj; if selhalo throw Einit; } catch Einit: { uvolni paměť; throw Euvolniporty;} } catch Euvolniporty : { dealokuj porty; throw Enenalezeno; } } catch EnenalezenoTo se ve výsledku přeloží na kód, který pravděpodobně bude vypadat takhle:
... uvolni paměť; goto uvolni_porty; ... uvolni_porty: uvolni porty; goto nenalezeno; ... nenalezeno:Problém je v tom, že většina programátoruů v C++ a v Javě si neuvědomuje, že žádné objekty a žádné výjimky v CPU neexistují (teda co se výjimek týče, tak existují, ale jde o trochu jiné výjimky). Veškerý kód výjimek se stejně přeloží na nějaký ekvivalent goto, tedy na nepodmíněný skok.
Narozdíl od C ale v tomto případě nemá programátor žádnou kontrolu nad vygenerovaným kódem, takže z jedné výjimky musí vyhazovat jinou místo toho, aby prostě nechal program běžet stylem mám úklidový kód a skočím do něj tak, aby se uklidilo jenom to, co je potřeba uklidit.
goto
(a třeba i Knuth, i když on se k nim nehlásí) by jej nerušili proto, že by ho sami neuměli používat. Spíš by rádi jazyk, který nováčkům vštípí ty základní "správné" postupy, a sám by zabraňoval neelegantním konstrukcím. Jinými slovy, aby neelegantní konstrukce v praxi skutečně vypadaly neelegantně i na papíře, aby to člověka "trklo". Proto se bavíme o základní specifikaci jazyka. Prasárničky ať si do jazyka chrogramátor dopíše sám, třeba tak, jak navrhuješ. :o)
A přitom by na stavový automat stačily pořídné tail cally. Osobně bych na cokoli složitějšího asi použil spíš Ragel, abych měl jistotu, že se v tom pak nezamotám, až to po sobě budu číst. Z ukázky hned na hlavní stránce toho nástroje je ovšem hned zřejmé, do čeho že se to vlastně kompiluje.
Teď mluvím o céčkovitých jazycích – například v Perlu je výskok přes několik úrovní vnoření elegantně řešen tím, že lze cykly pojmenovat a pak říci, ze kterého se vyskakuje.
Připočti si tam Common Lisp a jeho BLOCK a RETURN-FROM.
Kde jsou třídy pro práci s časem, pro síťování, XML, multithreading?No a proč asi existuje Qt? To je přibližně to, jak by měla dobrá standardní knihovna jazyka vypadat.
Tudíž jakákoli standardní knihovna, která se stane součástí normy C++ určitě se nebude podobat C++.To bude asi další z důvodů, proč se C++ vyhnout, že?
Uvítal bych v C++ možnost síťování - čímž by bylo možné psát přenositelné síťové programy na každé (i neposixové) platformě.Není spíš lepší implementovat POSIXové síťové funkce na těch několika málo platformách, kde ještě nejsou? Co by takový C++ komfort obnášel? Zabalení socketů do objektů?
[...] třídy pro práci s datumem [...]Co to vlastně je, ono datumum? Nebo ten datumus?
Actually I made up the term "object-oriented", and I can tell you I did not have C++ in mind.
Java velmi rychle a příjemně. Člověk se nemusí starat o paměť (to má své pro i proti)Ano, proto některé aplikace vypadají tak, jak vypadají. Protože se nikdo o paměť nestará :'(