Sovereign Tech Fund oznámil finanční podporu následujících open source projektů: Scala, SDCC, Let's Encrypt, Servo, chatmail, Drupal, Fedify, openprinting, PHP, Apache Arrow, OpenSSL, R Project, Open Web Docs, conda, systemd a phpseclib.
Bylo vydáno OpenBSD 7.8. S předběžnou podporou Raspberry Pi 5. Opět bez písničky.
Valkey (Wikipedie) byl vydán v nové major verzi 9.0. Valkey je fork Redisu.
Byly publikovány informace o kritické zranitelnosti v knihovně pro Rust async-tar a jejích forcích tokio-tar, krata-tokio-tar a astral-tokio-tar. Jedná se o zranitelnost CVE-2025-62518 s CVSS 8.1. Nálezci je pojmenovali TARmageddon.
AlmaLinux přinese s verzí 10.1 podporu btrfs. XFS bude stále jako výchozí filesystém, ale instalátor nabídne i btrfs. Více informací naleznete v oficiálním oznámení.
Společnost OpenAI představila svůj vlastní webový prohlížeč ChatGPT Atlas. Zatím je k dispozici pouze na macOS.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.5 (Mastodon). Přehled novinek i s videi a se snímky obrazovek v oficiálním oznámení. Podrobný přehled v seznamu změn.
Rodina jednodeskových počítačů Orange Pi se rozrostla (𝕏) o Orange Pi 6 Plus.
Na Humble Bundle běží akce Humble Tech Book Bundle: All Things Raspberry Pi by Raspberry Pi Press. Se slevou lze koupit elektronické knihy od nakladatelství Raspberry Pi Press a podpořit Raspberry Pi Press, Raspberry Pi Foundation North America nebo Humble.
Přidaný režim autonomního řízení vozidel Tesla Mad Max je dostupný pro vybrané zákazníky v programu EAP (Early Access Program). Nový režim je na silnici agresivnější, častěji mění pruhy a ne vždy dodržuje rychlostní limity. Agentura JPP spekuluje, že v Česku by se mohl nový režim namísto Mad Max jmenovat Mad Turek...
vector,
Hezci je celociselna odmocnina.
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ý.
Mě je v podstatě C++0x úplně ukradené, protože mám pocit, že je na houby a nic až tak super potřebného nepřináší. Abych řekl pravdu, jsem z něho zklamán. Podle mého by C++ potřebovalo hlavně lepší standardní knihovnu a zabudovat do standardní knihovny řadu věcí, které jiné jazyky mají už dávno. A tím se moc nezabývají.
Neříkám, že v C++0x nejsou věci, které nejsou dobré a potřebné, ale IMHO je jich zlomeček - například UTF-8, UTF-16 a UTF-32 konstanty, nebo knihovna regulárních výrazů plus další věcí, ale osobně jsem očekával od toho víc.
). Velmi doporučuji článeček Dark side of C++ od Felixe von Leitnera.
Mé názory na C++ pramení hlavně z toho, že jsem to svého času učinil.)
A ano, před 20 lety jsem programoval (a nikdy jsem netvrdil, že C++ je jedinou obludou)
Máte úplnou pravdu v tom, že norma C++ je složitá proto, že popisuje hromadu mezních stavů. Jenže to právě ukazuje na obludnost jazyka – kdyby byl navržen slušně, nebylo by v normě potřeba ošetřovat spousty okrajových případů, protože by jejich chování přímo plynulo z obecných definic. Srovnejte složitost normy C++ s krásou a elegancí normy Céčka (C99), nebo třeba se standardem Haskellu či Scheme. (A o její úplnosti by mohly vyprávět svoje třeba archivy mailing-listů autorů GCC.)
(SQL raději nekomentuji, to je C++ku důstojnou konkurencí. A XML ostatně také – tolik stránek textu na popis něčeho, co má vyjadřovací sílu lispových S-expressions...)
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.
Počet programů je zřídka daný kvalitou jazyka, spíš (opět stejně jako u přirozených jazyků) jeho popularitou. To, co opravdu dává smysl srovnávat, jsou mistrovská díla v jednotlivých jazycích psaná.
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
Řada 1 měla totiž mergovací algoritmus s exponenciální složitostí, řada 2 to už napravila.
To myslím o schopnostech Haskellu něco vypovídá - na implementaci programovacích jazyků je téměř ideální (ne že by se nehodil i na jiné věci, samozřejmě).
Já když čtu věci jako tohle, tak se cítím méněcenný.
)Pokiaľ ma pamäť neklame, Haskell si zvolili preto, lebo syntax perl6 pár rokov dolaďovali a nikoho netrápila pomalosť výsledku.
).
Jediný problém pro běžné programátory bude, že dotyčné oblasti matematiky (teorie kategorií) všichni ostatní matematici (ti, co ji nepraktikují) říkají "generalized abstract nonsense".
Jak by tomu říkali "entršpajz džavysté"?
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-80 snad toto vymezení nesplňuje?
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ů
.
Zvládnout Smalltalk znamená z 1% naučit se syntaxi, z 30% základní knihovnu a z 68% naučit se v tom systému efektivně orientovat a pracovat. Zbylé jedno procento vystihuje neuchopitelnou složku, která zapřičiňuje, že i po letech dokáže Smalltalk člověka stále překvapovat
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"?
Zbytek funkčnosti se dá přitom logicky odvodit ze základních axiomů. To já mám rád.
Na druhou stranu, ze stejných důvodů se nepouštím do věcí, jako je XSLT, XML Schema a podobně. Odmítám používat věci, které nemají jednoduchou a snadno pochopitelnou vnitřní logiku. (Ostatně, pokud jde o XML, bohatě mi stačí SXML a dílo Olega Kiselyova a Kirilla Lisovského - umí to všechno, co tzv. "XML standardy" a přitom nemusím míchat několik odfláklých jazyků dohromady a stačí mi jeden dobře navržený.)
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
Shodou okolností složitost parseru často koreluje s obtížností porozumění kódu.
(Jinak si také dovoluji dodat, že konverze regulárního výrazu na graf je naprosto triviální záležitost. Programoval jste ji vůbec někdy?)
Shodou okolností složitost parseru často koreluje s obtížností porozumění kódu.
Luštím cizí složité programy přes patnáct let.
Jinak si také dovoluji dodat, že konverze regulárního výrazu na graf je naprosto triviální záležitost. Programoval jste ji vůbec někdy?
Konverze regulárního výrazu na graf je jednoduchá věc, nicméně určitě o několik řádů složitější, než napsat funkce typu strchr, strtok, strrchr, strlen, strcat. A protože pan Felix von cosi odsuzuje jakékoli zbytečné těžkosti při implementaci, a protože vyjadřovací síla str* funkcí je určitě větší, než regulárních výrazů - pak je potřeba aby pan Felix odsoudil regulární výrazy a napsal "Regular expression is hard to implement/parse".
Ono ve skutečnosti parser C++ není nic extra těžkého, je to v zásadě dost jednoduchý problém. Nijak jsem si nevšiml, že by kompilátory s tím měly problémy. A upřímně si myslím, že bych daleko rychleji implementoval dobrý C++ parser, než dobrou knihovnu regulárních výrazů.
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 jak sám píšete výše, C++ je na řadě míst nahrazováno jinými jazyky, často jednoduššími (a relativně méně ohavnými).
Je fakt, že u knihovny pro regulární výrazy na rychlosti záleží o hodně víc, než u parseru programovacího jazyka. Prča to určitě není, když dnešní regulární výrazy mají v podstatě sílu zásobníkového automatu, ale když jsem koukal třeba na implementaci regexpů ve standardní knihovně Javy, tak jsem se pořád aspoň jakž takž orientoval. Ale můj pohled je zřetelně ovlivněný tím, že regulární výrazy docela znám, kdežto i samotná syntaxe C++ ve mně vzbuzuje akorát tak hrůzu.
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
Překvapivě ho i v dnešní době mnoho lidí preferuje před 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?
Na druhou stranu, nelze Applu upřít snaha, aby všichni používali na jeho systému Objective-C. Takže ačkoliv tam existuje velmi dobrá podpora pro binding ostatních jazyků na systémové API, tak není možné přehlédnout tento fakt. Svým způsobem je to logické, avšak brání to ve tvorbě přenositelných nativních programů. Svého času se Apple snažil portovat své knihovny i na Windows - viz projekt YellowBox. Důvody, kvůli kterým toho zanechal jsou mi nejasné. Možná chce chránit vlastní technologie (proto nejsou open-source), možná by to bylo složité (například Core Animation, Quartz, apod.). Čert ví
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
To podstatné naťukl už Kyosuke: C++ je docela vhodný jazyk, pokud chcete na velkém projektu zaměstnat spoustu průměrných programátorů (a tím pádem téměř nutně vytvářet projekt průměrné kvality; to na druhou stranu ke komerčnímu úspěchu často stačí). Pokud má být projekt špičkový a máte na to špičkové lidi, C++ je zřídka optimální volba.
Doufám, že poté co jste viděl několik rozvodů jste se analogicky rozhodl neženit se, po setkání a seznámení s tím, že existuje AIDS jste se rozhodl zůstat do konce života bez sexu, apod..
Většin sw projektů skončí špatně, ať je použito na jejich programování cokoli. To je bohužel smutná pravda - prý ani ne 5% sw projektů dopadne podle očekávání.
C++ je docela vhodný jazyk, pokud chcete na velkém projektu zaměstnat spoustu průměrných programátorů
Bohužel pravda je zcela opačná, dnešní průměrný programátor na C++ těžce pohoří. Na C++ potřebujete nadprůměrného programátora, což je obrovské mínus pro C++.
Pokud má být projekt špičkový a máte na to špičkové lidi, C++ je zřídka optimální volba.
Vzhledem k tomu, že každý projekt potřebuje něco jiného, tak Vaše tvrzení má nula bitů informace. Podle druhu projektu a účelu výsledného produktu je optimální volba pokaždé něco jiného. Jediné co tvrdím, že pokud se rozhoduji mezi C a C++, je v 99,9999% případů optimální volba C++. Nicméně to nevyvrací to, že pro většinu projektů není dvojice C/C++ vůbec vhodná volba, a je lépe použít něco jiného.
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
Naopak Vaše tvrzení o tom, že nepoznám nic, se popře velmi snadno. Třeba: 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ě.
A já to vidím asi tak stejně. A někde jinde tady jsem se k tomu už vyjádřil - C++, když už ni jiného, nutí lidi učit se dva jazyky tam, kde jiným jazykům stačí jen jeden.
Pokud tedy nenapíšete v něm LISP executor.
Myslím, že to myslí vážně.
A já to vidím asi tak stejně. A někde jinde tady jsem se k tomu už vyjádřil - C++, když už ni jiného, nutí lidi učit se dva jazyky tam, kde jiným jazykům stačí jen jeden.
Pokud bych měl porovnávat dvojici C a C++, nevidím jediný důvod pro C. Pokud bych měl porovnávat C++ a něco jiného odlišného od C, pak velmi často najdu důvod, proč použít něco jiného.
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.
Totiž že čím jednodušší jazyk mám, tím snáze pro něj napíšu opravdu dobře optimalizující kompilátor, protože nemusím řešit spoustu bizarních okrajových případů a můžu rychleji řešit podstatné věci. Třeba pokud mám pouze pure funkce, můžu podle libosti eliminovat zcela jakéholi společné podvýrazy a podobně, a ne jen podmnožinu jazyka.
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.
). Nicméně i pokud už máte anonymní first-class funkce, pořád ještě to nejsou lambda funkce, pokud neumožňují zachytit volné proměnné. Ostatně tvrdíte-li, že C++ téměř umí lambda funkce, to už můžete rovnou říkat, že Číňané z drtivé většiny dodržují lidská práva.
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 Enenalezeno
To 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.
A pak už místo nacpání konstrukce do normy jazyka stačí malá knihovna, kterou zkompiluje každá jeho kompatibilní implementace.
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)
Ovšem samozřejmě souhlasím s tím, že vyšší jazyk zrovna goto v základní specifikaci obsahovat nemusí. A pokud ho obsahuje, měl by mu aspoň místo toho říkat "tail-call", případně "kontinuace", to nejsou tak kontrovarzní názvy.
Tak tedy: třeba výše popsaný kousek kernelu (nebo obecně funkce, kde je potřeba podobným způsobem uklízet), nebo když chcete implementovat konečný automat, případně je-li třeba vyskočit z několika cyklů najednou.
Jistě, ve všech třech případech se lze bez goto obejít (konec konců není těžké dokázat, že všechny cykly, goto i rekurzi lze nahradit jedním jediným while-cyklem v celém programu), ale s goto to bude výrazně přehlednější. (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.)
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á :'(
.
Tiskni
Sdílej: