Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Víte že můžete odebírat mé blogy pomocí RSS? (Co je to RSS?)
Od určité doby jsou všechny texty které zde publikuji verzované na Githubu.
Jestliže najdete chybu, nepište mi do diskuze a rovnou jí opravte. Github má online editor, není to skoro žádná práce a podstatně mi tím usnadníte život. Taky vás čeká věčná sláva v commit logu :)
Nudil jsem se, tak jsem sepsal něco o programovacím jazyku D. Není to ani tak článek o D, jako spíš můj názor na něj a ostatní programovací jazyky.
Před pár lety, když jsem ještě chodil na střední školu nám mistr na praxi vyprávěl o tom jak před dlouhou dobou dělal pro nějakou rodinu elektriku v baráku. Jelikož byl poctivý řemeslník, rozuměl své práci a odvedl jí dobře, pozvali ho na kafe a povídali si s ním. Tenkrát ho zaujalo, že měli uprostřed obýváku na zemi položený velký a dlouhý trám, který všichni přeskakovali a dělali jako kdyby tam nebyl. Nejdříve se na to ze slušnosti nechtěl zeptat, ale jelikož to byl zvídavý člověk, vrtalo mu to hlavou a nakonec neodolal a vznesl dotaz proč že to mají ten trám uprostřed obýváku, když jim tam překáží. Dostalo se mu odpovědi že už tam tak ležel když dům někdy před dvaceti lety koupili. Bylo mu to trochu divné, tak se zeptal proč ho nikdo z nich neodstranil. "My ho tam nedali," řekla mu paní domu a brala celou věc za vyřízenou.
Nevím nakolik je tenhle příběh pravdivý a nakolik si ho mistr tenkrát vymyslel, ale úplně stejné mi to přijde s programovacími jazyky. Existuje 1337 programovacích jazyků, jeden dementnější než druhý. Více/méně všechny široce používané si s sebou táhnou podivné dědictví různých trámů, které jsou navršené v obývácích a nutí programátora je podlejzat, přeskakovat a snažit se aby náhodou nějaký neshodil. Často se přitom nejedná o nic jiného, než o dementní syntaxi, kterou by šlo lehce vyřešit, kdyby se ovšem někomu chtělo daný trám odnést a poslat do prdele členy rodiny kteří si budou stěžovat že bez něj to už není ono.
Je opravdu obdivuhodné, že jednou za čas se mezi tvůrci najde někdo, kdo dokáže myslet trochu jinak než většina a odstranit většinu trámů, ba co víc, dokonce ještě vybílit zdi a přidat pohodlnou sedací soupravu, na které je vskutku radost sedět. Mezi tyto tvůrce patří kromě Guida van Rossuma (tvůrce jazyka python) i Walter Bright.
Na začátku jsem se naučil pascal. Byla to doba kdy jsem na programování měl jen jeden názor - fuck yeah! Později jsem nakousl PHP, naučil se python, absolvoval rok basicu, dva roky středoškolské výuky s C++, dva semestry vysokoškolských kurzů javy, semestr C/C++, semestr JavaScriptu/PHP a semestr C#. Během té doby jsem si škrtl i o různé obskurní jazyky, ale většinou se jednalo o věci které ani nemá cenu zmiňovat a už jsem je prakticky zapomněl a navíc si procvičoval dovednosti snad ve všem, kromě pascalu. Pokaždé když jsem v té době měl vytvořit nějaký kompilovaný program, připadalo mi, že cokoliv v čem bych ho dokázal napsat stojí za naprostou vyližprdel. Bylo to jako kdybych si zkoušel kabáty a žádný mi nesedl. V jednom jsem mohl nemohl roztáhnout ruce, ve druhém je zase dát k sobě a třetí se nedal dopnout.
Během té doby jsem strávil několik večerů hledáním na netu. Na IRC se mi smáli, že dokonalý jazyk neexistuje, že nemá cenu se namáhat, ale stejně jsem googlil a zkoušel. Když už jsem byl jen kousek od toho to vzdát, vzpomněl jsem si, že kdysi dávno, když jsem byl ještě totální IRC nováček, vyskytoval se na mém prvním kanálu člověk pod nickem DarkCraft, který si pochvaloval D. Trochu jsem zagooglil a zjistil jsem, že zrovna před nedávnem vyšla revoluční, druhá verze - D2.
Pustil jsem se do čtení a zjistil jsem, že Walter Bright měl podobný názor jako já - C++ smrdí. Nezískal ten názor tím že by si ho zkusil na střední/vysoké škole, ale poté co pracoval dlouhá léta jako programátor a mimo jiné si napsal vlastní, komerčně úspěšný kompilátor C++. I ten největší C++lover snad musí uznat, že nejspíš věděl o čem mluvil. Walter si uvědomil, že C++ má pošahanou syntaxi a navíc programátorovi hází trámy pod nohy, proto se rozhodl vytvořit nový, lepší jazyk. Jelikož se jeho firma jmenovala DigitalMars, pojmenoval jej Mars. S tím jak se komunita jazyka Mars rozrůstala, začali se objevovat lidé, kterým se jazyk líbil a začali ho místo Mars nazývat prostě D, aby dali najevo že se jedná o něco lepšího jak C++. Postupně se tento název ujal natolik, že i samotný Walter ho přijal za vlastní a v dnešní době už se na původní jméno prakticky zapomnělo.
Jazyk D je systémový, kompilovaný programovací jazyk. Je to také jediný kompilovaný jazyk ve kterém mě skutečně baví programovat, podobně jako třeba v pythonu. Žádné kreténské .h soubory, rozdíly mezi definicí metody v těle třídy a za třídou, dementní stringy, couty a ciny, makra jak ze středověku a podivné erorry při používání šablon. Naopak - spousta vychytávek jako jsou asociativní pole, pohodlné foreach, moduly, ucházející API, porovnávání polí operátorem porovnání (==), nikoliv pomocí obskurních metod z jakéhosi API, vlastní operátor pro porovnání referencí (is), operátor pro spojování polí a strigů (~), plná podpora UTF atp..
Nevím jak bych měl tento pocit z D přiblížit někomu kdo v něm nikdy nedělal, proto se prostě budete muset spokojit s tím, že o něm prohlásím že je skutečně příjemný a promyšlený, s minimem trámů které by bylo třeba přeskakovat a podlejzat. D mě baví - proto jsem o něm založil české stránky a napsal tento článek.
Pokud se mi podařilo navodit ve vás pocit že D není úplně marný, zkuste se podívat na czwiki4d, popřípadě další odkazy které jsem uvedl:
Na závěr bych se chci zmínit o excelentní knize The D programming Language. Dá se sehnat i v elektronické verzi (oficiálně i neoficiálně), osobně jsem si koupil k vánocům papírovou. Četl jsem už několik knih o programování a programovacích jazycích (mimo jiné třeba Programovací jazyk C od Kernighana a Ritchieho), ale žádná mě ani zdaleka nenadchla tak jako tato.
Rozdíl mezi touhle knihou a běžnými příručkami je asi takový, jako mezi čerstvě vystudovanou učitelkou češtiny která u nás ve čtvrťáku po půl roce vyhořela (prý odešla radši učit na mateřskou školku) a pánem v důchodu, který nastoupil po ní. Nejen že dokázal podat češtinu zajímavým způsobem (!!!), ale navíc to pro něj byl koníček a uměl vysvětlit i kde se to v našem jazyce vzalo, proč to vzniklo a jak se to rozšířilo..
Tiskni
Sdílej:
Qt je moc založené na C++ na to, aby se dalo exportovat do C.
C_EXPORT QLabelH QLabel_create(QWidgetH parent, unsigned int f) { return (QLabelH) new QLabel((QWidget*)parent, (Qt::WindowFlags)f); }? Myslím že tuto funkce bych teoreticky mohl použít v C, ale jak jsem již psal, mé znalosti C/C++ jsou skutečně chabé...
print 5 * "xe"
, na složitější věci je podle všeho nutné používat xrange.
Jinak v pythonu to jde do jisté míry pomocí *, například print 5 * "xe", na složitější věci je podle všeho nutné používat xrange.Tak tady jste zcela mimo mísu. Nejdřív si přečtěte co metoda Fixnum#times dělá. Ta je pythonnímu list.__mul__ na hony vzdálená.
Dokud v editoru nejsou vodící linky či jiná pomůcka s obdobnou funkcí, orientace je v tahu v obou případech. Mně se zase nelíbí, že explicitní ukončování bloků kód vertikálně prodlužuje a rozptyluje pozornost.
Nakonec, slyšel jste někdy něco o tom, že kód, který potřebuje více než tři úrovně odsazení, je špatně napsaný? Chcete-li, můžete si tuhle poučku rozšířit na čtyři úrovně, protože v OOP bývá ještě jedno odsazení navíc pro třídu.
Nesouhlas. Když píšete nový kód, tak jsou oba případy srovnatelný. Pokud se ale ke kódu vracíte, za účelem doplnit/opravit, tak v Ruby se hned chytíte toho ukončujícího end nebo }, ale v Pythonu musíte znovu pátrat po odsazení ukončující blok jako na začátku.Dokud v editoru nejsou vodící linky či jiná pomůcka s obdobnou funkcí, orientace je v tahu v obou případech.
To nelze brát úplně doslova. Stejně jako že funkce nesmí být delší než jednu stránku v editoru. Praxe je ale trošku o něčem jiném a slepě dodržovat takové poučky může vést ke zbytečnému tříštění kódu. Tyto poučky jsou hlavně pro začátečníky, aby je vedly k určité disciplíně a nenaučili se hned prasit.Nakonec, slyšel jste někdy něco o tom, že kód, který potřebuje více než tři úrovně odsazení, je špatně napsaný? Chcete-li, můžete si tuhle poučku rozšířit na čtyři úrovně, protože v OOP bývá ještě jedno odsazení navíc pro třídu.
Nesouhlas. Když píšete nový kód, tak jsou oba případy srovnatelný. Pokud se ale ke kódu vracíte, za účelem doplnit/opravit, tak v Ruby se hned chytíte toho ukončujícího end nebo }.
Nesouhlas. Pouze pokud editor vysvicuje přiléhající závorky nebo vyznačuje bloky (např. kate).
To nelze brát úplně doslova. Stejně jako že funkce nesmí být delší než jednu stránku v editoru. Praxe je ale trošku o něčem jiném a slepě dodržovat takové poučky může vést ke zbytečnému tříštění kódu. Tyto poučky jsou hlavně pro začátečníky, aby je vedly k určité disciplíně a nenaučili se hned prasit.
Lze to brát doslova, co by to nešlo. :) A pochybuju, že autor poučky o odsazení měl na mysli začátečníky, když v té době byli programátoři spíše okrajová sekta lidí. Jde spíše o obecně dobrou praktiku, která stojí za dodržování nezávisle od toho, jak dlouho kdo na jaké úrovni programuje.
… Pokud se ale ke kódu vracíte, za účelem doplnit/opravit, tak v Ruby se hned chytíte toho ukončujícího end nebo }, ale v Pythonu musíte znovu pátrat po odsazení ukončující blok jako na začátku.…Někteří nepátrají, ale prostě kouknou na
#endif
, #endfor
etc. blok. Jak složité…
Apropo, mě se líbí jak střídmost a přehlednost C, tak ukecaný ale vypovídající koncový bloky v php. Ale holý end
mi přijde jako to nejhorší z obou - víc písmenek aniž by v tom bylo víc informace Tyto poučky jsou hlavně pro začátečníky, aby je vedly k určité disciplíně a nenaučili se hned prasit.Zlatá slova. Ale neříkej je moc nahlas, začátečník může být nablízku
Asi takhlen, vsechny tyhle vychytavky jsou super. Dokud programujete sam. Prusvih tehlech veci je, ze nejaky problem (i trivialni) lze vyresit prilis mnoha zpusoby. Takze v momente kdy dostanete cizi kod, tak zabijete spoustu casu tim, ze se ucite coding style vaseho predchudce.
Dlasi sranda nastava v okamziku, kdy jste program pochopili, a chcete ho modifikovat. Pokud to udelate vasim stylem, a ne tak jak vas predchudce, tak jste prave prichystal peklo pro vaseho nastupce.
Takze prvni co u tehlech nestriktnich jazyku udelate pri nutnosti spoluprace vice lidi je, ze vychytavka jako 5.times zakazete, nebo zakazate vsechny ostatni metody pro dosazeni stejneho cile.
To nefunguje. Kazdy ma to potencionalne nepochopitelne nekde jinde. A pokud ma programator osvojenou nejakou specialitku (5.times misto for, kazdemu dojde, ale jsou mnohem zakernejsi vychytavky), tak to bude presne to, co mu prijde jako uplne jasne, a komentovat to rozhodne nebude.
Tenhle problem maji samozrejme vsechny jazyky, ale cim volnejsi jazyk je, tim vetsi tenhle problem je.
Prusvih tehlech veci je, ze nejaky problem (i trivialni) lze vyresit prilis mnoha zpusoby. Takze v momente kdy dostanete cizi kod, tak zabijete spoustu casu tim, ze se ucite coding style vaseho predchudce.A on tenhle problem nejaky jazyk uspesne resi? Respektive, je ten problem vubec resitelny? Mozna reknete Java. A ja reknu, ze Java jen ten problem premistila ze zabudovane syntaxe/semantiky programovaciho jazyka do patternu a frameworku. IMHO, ten problem je v Turing-complete jazycich neresitelny.
Nadruhou stranu porovnávat pole jedním operátorem mi přijde hovadina. Schovává se v tom složitost - je to jediný příkaz, ale přitom má složitost jako for.Složitost se schovává už v takových věcech, jako je alokace paměti. Takže na rozumných polích nevidím nic špatného. Ostatně tenhle argument by se dal použít proti jakémukoli přetěžování operátorů, tedy i vůči C++, pravda?
new typ[velikost]
) to je vůbec hezky vidět, takže tam bych problém neviděl.Složitost se schovává už v takových věcech, jako je alokace paměti.Mezi složitostí za alokací paměti a složitostí při porovnávání pole je propastný principeilní rozdíl.
Takže na rozumných polích nevidím nic špatného. Ostatně tenhle argument by se dal použít proti jakémukoli přetěžování operátorů, tedy i vůči C++, pravda?Taky na tom nevidím nic špatného, ale nebylo lepší jazyk navrhnout s dobrým mechanismem pro přetěžování operátorů a tuhle funkčnost udělat až v samotném jazyce?
Musím souhlasit, právě dělám na jednou hodně velkém projektu, který je právě v D, návrh toho jazyka je opravdu dobrý.
Rozhodoval jsem se, jesti to napsat v C nebo D, vsadil jsem na garbage collector a času to uspoří opravdu hodně.
Dčku fandím, pokud by v budoucnu byl čas, rád bych se zasloužil o nějakou českou dokumentací, snad se někdy ozvu ohledně pomoci an té wikině
Kdo pochybuje o "reálné praktičnosti" čistě funkcionálního jazyka jakým je třeba Haskell, ať zavítá např. na Hackage a možná změní názor.
Mimochodem implementace GHC nabízí jak interpretr pro snadné prototypování tak výkonný kompiler do nativního strojového kódu, který co do efektivity překvapivě moc nezaostává za GNU gcc (rychlost běhu i paměťové nároky - cca dvojnásobek).
Mimochodem na násobení matic o 1e6 prvcích typu Double bohatě stačí ty "neefektivní" spojové seznamy. Pokud to teda není v nějaké kritické smyčce, kde záleží na každém taktu CPU.
Nevím co si představuješ pod efektivně, ale haskell má už celkem dlouho modifikovatelná pole, která jsou implementačně velmi podobná polím např. v C. Viz. článek o výkonných polích na haskell.org .zajimavy, ale pouziva to monady, takze by ses v podstate musel "prepnout z haskellu" a naprogramovat to imperativne... Ale samozrejme lepsi nez nic...
Mimochodem na násobení matic o 1e6 prvcích typu Double bohatě stačí ty "neefektivní" spojové seznamy. Pokud to teda není v nějaké kritické smyčce, kde záleží na každém taktu CPU.no to nasobeni matic se obvykle pouziva pri simulacich a je potreba je opakovat hodnekrat... ale i kdybys mel pocitac kterej to zvladne dost rychle pri implementaci spojovym seznamem tak to neznamena ze by to nebyla mega prasarna... ;)
zajimavy, ale pouziva to monady, takze by ses v podstate musel "prepnout z haskellu" a naprogramovat to imperativne... Ale samozrejme lepsi nez nic...Při násobení matic si vystačíte s poli, která se nemění, takže monádu používat nemusíte. Ještě dodám, že lepší balíček pro pole je vector.
Rozhodně se nejedná o "několik set megabajtů." Koukám se na Mono v Archu, nainstalované chce 140 MiB. Kdyby se ti to zdálo hodně, připomeň si, kolik dnes stojí jeden gigabajt. Na Windows je pak .Net v současnosti prakticky standardní součástí systému, tak o velikosti ani nemá smysl rozmýšlet.
Jazyky jako C/C++/D si prozměnu tahají jiné obludy, pokud se nejedná o triviální projektíky. Jaký je v tom rozdíl? Pokud se na to podívám z určitého úhlu, .Net přináší do Windows alespoň část výhod centralizovaných balíčků. Podstatná část toho, co by programátor kdy chtěl, je uložená v rozsáhlé system-wide knihovně.
Jestli přemýšlíš o svém software a jeho závislostech jako o sračce, bude asi něco špatně.
Částečně napíšu — Singularity. Jakmile se v něčem na nižší úrovni povede vytvořit infrastrukturu exportující nejnutnější API do chráněného prostředí vyššího jazyka, je vyhráno
Walter si uvědomil, že C++ má pošahanou syntaxi a navíc programátorovi hází trámy pod nohy, proto se rozhodl vytvořit nový, lepší jazyk.není úplně jasné že mu to došlo při psaní kompilátoru (který se programuje blbě hlavně kvůli té syntaxi).
Jinak trochu mi unikaji vytky smerem k C++, vsechno co si popsal v C++ je.Tím myslítš ty výhody D? Ano, je to tam, ale není to pohodlné. Jinak možná je to dané mojí nevědomostí, zkus popsat nějaké konkrétní příklady.
valarray<int> x,y; if (x == y) {}Sice nemame is, ale ty dva znaky navic urcite nikoho nezabiji:
int x; int &y = x, &z = x; if (&y == &z) {}
int[] x, y; if (x == y) { .. }
popřípadě
if (x is y) { .. }
O nějaké intuitivitě nejspíš taky mluvit nejde. Nechápu proč se proti tomu nebouří víc lidí. Osobně cítím silnou potřebu věci vylepšovat, nářadí si taky upravuju podle sebe aby se mi s ním pohodlně pracovalo, celý životní prostor okolo mě vylepšuju aby byl pohodlnější, praktičtější, tak proč ne programovací jazyk?
if (&x == &y)dělá přesně to, co je napsané v kódu, tedy porovnává adresy. Stejně jako
if (x is y)ale z tohohle to není až tak zřejmé.
(různé operace nad pointery bývají občas pěkně divoké).To jo (když se přidají pointery na funkce, je to dobrej zmatek), ale to není tenhle případ.
if (x == y) ...Tam kde mi záleží na tom, jestli jsou stejné adresy v paměti tak můžu použít něco jako
if (x.getAddress() == y.getAddress()) ...S tímhle je ten program čitelný i bez toho abych vůbec potřeboval znát nějaké
is
.
if (x.getAddress() == y.getAddress()) ...
Tohle je přesně ten trám o kterém jsem psal - místo dvou písmen is budu psát 6x delší název metody, navíc dvakrát. Vizuálně to prostě přehlednější není.
Jinak syntactic sugar .. pro mě jako pro programátora je zásadní jen minimum parametrů jazyka a hlavně syntactic sugar.
Číst kód po lidech, kteří si libují v "syntactic sugar" je často dost utrpení.
D porovnává operátorem is libovolné reference, nikoli jen objekty. Operátor is můžete použít u polí/stringů/objektů/struktur/whatever.To ale právě dělá i zápis &x == &y, což je, stejně jako x is y, triviální výraz. Míra přehlednosti je IMHO v tomhle případě zcela subjektivní.
Jinak syntactic sugar .. pro mě jako pro programátora je zásadní jen minimum parametrů jazyka a hlavně syntactic sugar. Kdyby na syntaxi nezáviselo, mohl bych to klidně programovat rovnou v asm, nebo třeba v C a vytvářet si tam vlastní objekty (struktury obsahující data a pointery na fce).Minimum parametrů - co to znamená? Mezi assemblerem a C je větší rozdíl než jen to, že se v C snáz píše. C poskytuje větší abstrakci. Pokud ten operátor is dělá totéž jako &x == &y, tak další abstrakci nepřináší. Podobně jako operátor pro celočíselnou mocninu nepřináší žádnou další abstrakci oproti násobení. Jen zjednodušuje zápis. Nesnažím se hájit C++, nedostatků má dost (např. - matně si vzpomínám, že mi nešlo udělta nějakou operaci se šablonama, která mi přišla naprosto logická - nějak to souviselo s tím, že šablony jsou takový chytřejší makra, ale přesně už si to nepamatuju.). Jednoduchá syntaxe je samozřejmě přínos, ale zrovna tohle mi přijde nezajímavý. Spíš jako bys k tomu trámu jen přidal schůdky.
To ale právě dělá i zápis &x == &y, což je, stejně jako x is y, triviální výraz. Míra přehlednosti je IMHO v tomhle případě zcela subjektivní.To na co jsem reagoval byla ta metoda getAdress - jinak souhlasím že je to subjektivní, v tomhle případě se nejedná o nic jiného než syntaktický cukr. Tím minimem jsem myslel třeba rychlost, velikost binárky, garbage collector, objektový model a to zdali je k dispozici opensource překladač a pro jaké architektury. V podstatě nevím co dál by mě mělo na jazyku zajímat, kromě syntaxe.
mimochodem, ta pascalská je co se ukazatelů týče asi tisíckrát lepší než ta céčkovskáTo jako že ta stříška místo hvězdičky je takovým přínosem? (Krom toho, že se blbě píše)
a*b
? V Pascalu jo.
Mhm, a víš v Céčku, co znamená a*b
?
Pokud vim, co je a
a b
, vim i co je a*b
.
a: ^b
čtu hezky zleva a je ukazatel na b. b *a
čtu, no, zprava (a protože K. a R. měli hvězdičky v oblibě, když budu chtít deklarovat těch ukazatelů víc, napíšu si hvězdičku pro každý zvlášť). Ale to už se netýká jenom ukazatelů, ale vůbec celé koncepce céčkové syntaxe.
Fakt paráda, místo aby na dvě různé věci byly dvě různé syntaktické konstrukce, budu radši zjišťovat, co jsou jednotlivé operandy zač.Když ten kód píšeš, tak to zjišťovat nepotřebuješ, protože to víš.
a * b
by hvězdička měla smysl pointeru pouze v deklaraci (čili a
by byl typ), a deklaraci od výkonného kódu člověk pozná.
a * b
taky nicneříkající. K jejímu pochopení v C o nic širší kontext nepotřebuješ. A při práci s ukazately na funkce afaik vůbec ani hvězdičku nepotřebuješ. Zanadával sis - to bezpochyby ano, jen nechápu na co Že nechápeš, na co nadávám, je pochopitelné, protože to je jenom syntaxe. O té můžeš vždycky říct, že je to jedno (a ono je, akorát že různé aspekty syntaxe v různých lidech vyvolávají různě silné nepříjemné pocity, o čemž bys zrovna ty mohl dlouze vyprávětJo jo, s tím souhlasím. Je to o osobních preferencích...).
Jazyk v 21storočí založený na * & je fakt hnusŽádná správe paměti nefunguje pořádně. Všechno je jen určitý druh kompromisu.Čo sa mám vŕtať v pamäti a nerobiť priamo z objektami, potom žiadna správa pamäte nebude fungovať poriadne.
Clearly, if your code has new operations, delete operations, and pointer arithmetic all over the place, you are going to mess up somewhere and get leaks, stray pointers, etc.
Bjarne Stroustrup's C++ Style and Technique FAQ
To na co jsem reagoval byla ta metoda getAdressZavolat metodu objektu, nebo na objekt použít unární operátor mi přijde, z tohodle pohledu, ještě víc jedno. To že jednou to má víc pímenek hravě vyřeší automatické doplňování.
To že jednou to má víc pímenek hravě vyřeší automatické doplňování.Jeste by to pak ovsem chtelo automaticke cteni. Ja ten argument, ze vic pismenek vubec nevadi, zkratka neberu.
Nic přímo proti vám, ale co mají všichni proti is? Je to jeden operátor, jehož funkci si dokáže zapamatovat pravděpodobně i retardovaný žák základní školy pro "speciální" děti.No nevím, já bych si třeba pod "is" uměl představit "is a", tj.
if (x is Comparable) ...
Ten operátor prostě vyžaduje konkrétní znalosti, a čím víc věcí které člověk "musí" znát, tím hůř.
Tohle je přesně ten trám o kterém jsem psal - místo dvou písmen is budu psát 6x delší název metody, navíc dvakrát. Vizuálně to prostě přehlednější není.Je to delší ale jednodušeji se to čte. Ten záměr z toho prostě čiší, což se o "is" nedá říct. Nevím, jestli znáte programming by intention, ale tohle je přímo modelový případ. A dále: jednak normální IDE takové věci umí dovodit, takže píšete: x.gA TAB == y. TAB A jednak jestli je to o 6 znaků delší je mi fakt putna, protože píšu to jednou a číst se to bude 100x. Důležité je jak se to rychle dá přečíst a ne napsat.
Je to delší ale jednodušeji se to čte.No to bych neřekl.
&A
, tak hned vím, že to je adresa A, jsou to dva znaky.A.getAddress()
musím pečlivě zjistit, jestli to není třeba A.getAdress()
.Když vidím &A, tak hned vím, že to je adresa A, jsou to dva znaky.To právě hned nevíte, protože si to musíte přeložit. Děláte to rychle a často tak si to ani neuvědomujete, ale děláte to. U getAddress si nic překládat nemusíte.
Kdežto A.getAddress() musím pečlivě zjistit, jestli to není třeba A.getAdress().To taky ne, protože ten kdo si dá práci s getAddress nebude hned vedle toho definovat getAdress - ví že by to bylo nečitelné.
Kód v programovacím jazyku prostě není beletrie.Ale je. Čím lépe se to čte, tím lépe se tomu porozumí. Tím lépe se do toho může hrabat a tím méně je v tom chyb. Na to se přišlo už dávno.
To právě hned nevíte, protože si to musíte přeložit. Děláte to rychle a často tak si to ani neuvědomujete, ale děláte to.Ten význam chápu přímo. Podobně jako operátory v matematice - tam se člověk každou chvíli setkává s novými operátory.
To taky ne, protože ten kdo si dá práci s getAddress nebude hned vedle toho definovat getAdress - ví že by to bylo nečitelné.Řekl jsi, že to je systémově definované.
.getAddress()
, takže vedle sebe to nebude. Krom toho často člověk používá kód někoho jiného, a co já vim, co tam kdo definoval...Ale je. Čím lépe se to čte, tím lépe se tomu porozumí.Není to beletrie. Programovací kód je mnohem podobnější matematickým zápisům než beletrii. Má určité bloky, které jsou nějak strukturované, mají mezi sebou určité vztahy a dělí se na podbloky. Ty automaticky předpokládáš, že víc písmenek = lepší čitelnost. Nevím, odkud tento automatický předpoklad bereš, je to nesmysl.
Podobně jako operátory v matematice - tam se člověk každou chvíli setkává s novými operátory.Programování není matematika.
Čili v podstatě všechny objekty/typy by dědily .getAddress(), takže vedle sebe to nebude.To je jedno na jaké úrovni to je, nikdo normální nedělá funkci prntf když existuje nebezpečí záměny s printf.
Krom toho často člověk používá kód někoho jiného, a co já vim, co tam kdo definoval...Jak píšou jiní nemůžu ovlivnit, ale pokud dostanu do rukou takovej humus, kde se překlep může odkazovat na úplně jinou funkci, tak to nejprv přejmenuju na něco normálního.
Btw. myslel jsem, že dědičnost nemáš rád..?WTF - pokud myslíš debatu o dědění implementace, tak to je poněkud jiný případ.
Programovací kód je mnohem podobnější matematickým zápisům než beletriiProgramování není matematika.
Ty automaticky předpokládáš, že víc písmenek = lepší čitelnost. Nevím, odkud tento automatický předpoklad bereš, je to nesmysl.Víc písmenek rozhodně nestačí, je potřeba aby ty písmanka dávaly smysl, a ten smysl musí odpovídat záměru programátora. (Programming by intention - najdi si o tom něco.) A beru to ze zkušenosti svojí i jiných (kteří o tom napsali knihy).
Programování není matematika.Však jsem taky nic takového neřekl. Řekl jsem, že to je matematice strukturou blíž než beletrii, a za tím si stojím.
To je jedno na jaké úrovni to je, nikdo normální nedělá funkci prntf když existuje nebezpečí záměny s printf.Čím méně možností, kde nadělat chyby, tím lépe.
(Programming by intention - najdi si o tom něco.) A beru to ze zkušenosti svojí i jiných (kteří o tom napsali knihy).Děkuji, nechci. To, že někdo o tom napsal knihy nevypovídá vůbec nic o vhodnosti té metody. Já preferuju kód, který nemusím číst, nebo jen minimálně, kód, kde je jeho struktura vidět hned, ne až po přelouskání stránky vytržené z románu.
Čím méně možností, kde nadělat chyby, tím lépe.S tím nelze než souhlasit.
Děkuji, nechci. To, že někdo o tom napsal knihy nevypovídá vůbec nic o vhodnosti té metody. Já preferuju kód, který nemusím číst, nebo jen minimálně, kód, kde je jeho struktura vidět hned, ne až po přelouskání stránky vytržené z románu.Ony ty knihy jsou docela dobré, ale budiž. Co preferuješ je mi v kontextu téhle debaty jedno... (míněno bez urážky).
Tam kde mi záleží na tom, jestli jsou stejné adresy v paměti tak můžu použít něco jako1) Je to nechutně dlouhé.if (x.getAddress() == y.getAddress()) ...S tímhle je ten program čitelný i bez toho abych vůbec potřeboval znát nějakéis
.
getAddress()
asi byla implementována? V C++ by to moc nemělo smysl. Nevím jak v D nebo jinde... getAddress()
, někdo GetAddress()
, někdo getAddr()
, no prostě by v tom byl zmatek.
Jednak existují rozumné konvence a jednak to může být předdefinovaná metoda/atribut každého typu, takže se tím programátor nemusí vůbec zabývat.No jo, to by ale znamenalo, že některé/některá jména členských funkcí jsou "zakázaná". To mně přijde vyloženě jako zmatečné řešení, když
A.
x je pro některá x uživatelská funkce a pro jiná x systémový operátor.A.x je pro některá x uživatelská funkce a pro jiná x systémový operátorA.x je metoda, a některé x implementuje systém. To je to samé jako když printf implementuje systém a jiné funkce ne.
&
, implementuje kompilátor, kdežto funkci printf()
implementuje standardní knihovna. Já vůbec knihovnu libc
použít nemusím, můžu použít jinou a funkci printf()
něčím nahradit, což se taky v praxi děje.getAddress()
implementovala na kterékoli z těch dvou úrovní, vždy to bude mít oproti operátoru dost nevýhod.
Je jedno jestli to je kompilátor, nebo runtime.No to není jedno.
printf()
zadefinovat úplně jinak. Kdežto když je to standardně v kompilátoru, tak je to v daném jazyku skutečně napevno a neměnné.
Je to zrovna to samé jestli se píše Add(a,b) nebo a.Add(b) nebo +(a,b) nebo a+b.Pokud by
a.Add(b)
bylo implementováno v kompilátoru, tak by se mi nelíbil zmatek vytvořený tím, že by některá jména členských funkcí byla zakázaná. Pokud by to bylo implementováno mimo kompilátor, nelíbíl by se mi zmatek při použití jiných knihoven.
Kdežto když je to standardně v kompilátoru, tak je to v daném jazyku skutečně napevno a neměnné.Já říkám že to implementuje systém nějak, to neznamená že to nemůže implementovat někdo jinak. Pokud si udělám vlastní alokátor tak si tu adresu můžu třeba navolit jak chci.
Pokud by a.Add(b) bylo implementováno v kompilátoru, tak by se mi nelíbil zmatek vytvořený tím, že by některá jména členských funkcí byla zakázaná. Pokud by to bylo implementováno mimo kompilátor, nelíbíl by se mi zmatek při použití jiných knihoven.Zakázané? Nechápu. A zmatek v tom nevidím. a.Add(b) je technicky to samé jako a.+(b) neboli a+b a kde a jak se to implementuje si můžeš najít. Jediný rozdíl je to slovo místo symbolu. Myslím, že považuješ operátory za něco magického, ale ve skutečnosti jsou to jen divně pojmenované funkce / metody.
Zakázané? Nechápu. A zmatek v tom nevidím.Tím myslím tu situaci s tím
.getAddress()
. Když bude mít každý objekt by-default členskou funkci .getAddress()
, tak už nemůžu definovat takovou svoji. Vem si třeba například když budeu implementovat socket, potom by člověk čekal, že socket.getAddress()
vratí adresu přiřazenou k socket, a vono ne. Nebo třeba kontakt ve správě kontaktů, člověk by čekal, že ceontact.getAddress()
vrátí poštovní adresu, a vono to je něco úplně jinýho. (To jsou jen příklady, existuje jistě spousta dalších). Prostě zmatek...
a.Add(b) je technicky to samé jako a.+(b) neboli a+b a kde a jak se to implementuje si můžeš najít. Jediný rozdíl je to slovo místo symbolu.Já vim, že to je to samé a nepovažuju operátory za nic magického...
Vem si třeba například když budeu implementovat socket, potom by člověk čekal, že socket.getAddress() vratí adresu přiřazenou k socket, a vono ne. Nebo třeba kontakt ve správě kontaktů, člověk by čekal, že ceontact.getAddress()No ok, tak to může být matoucí - to jsem jen tak nastřelil. Můžeš si tam domyslet něco lepšího třeba socket.memoryAddress ... whatever... nebo viz jak to řeší ta Ada...
Pokud by ta implicitní členská funkce byla přetížitelné, bylo by to opravdu to samé jako s těma operátoramaTak to může být a nemusí, zrovna u adresy bych to asi nedoporučoval, u aritmetických operací se to v jistých rozumných případech dá tolerovat.
už tak je celkem úchylné, že operátor adresy jde v C++ přetížitAno.
No a nelíbí se mi to množství písmenek, ale tak to je asi věc názoru...aka. f u cn rd ths, u r gd cmp pgm Dovolím si střelit od boku, ale "nelíbí se mi množství písmen" = "nechce se mi to psát" ? Pak jsou 2 řešení 1) nauč se psát rychleji 2) nech si od ide doplňovat slova a konstrukce.
Dovolím si střelit od boku, ale "nelíbí se mi množství písmen" = "nechce se mi to psát" ?To by mi ani tak nevadilo, spíš mi to pak přijde hrozně nepřehledný. Čili kvůli čtení než kvůli psaní. Samozřejmš příliš málo písmenek je druhý extrém...
"Kecy jsou levné. Ukaž mi kód."
Narozdíl od tebe, který opravdu jenom namachrovaně komentuje, autor se jal o tom jazyku informovat a pracuje na wiki. Ty jsi vrchol trapnosti.
(A já jsem asi zase nakrmil trolla ).
Ale ty, když víš kulový a velkolepě to demonstruješ, budeš něco namachrovaně komentovat?Když už jsem spáchal zločin namachrovaného komentování, dovolím si ještě i nějakou tu ignorantskou aroganci; Jo, protože můžu a chci. Problém?
protože můžu a chciSamozřejmě můžeš a pochopitelně chceš, ale akorát se ztrapňuješ. Kdo tě ještě nezná, ten to brzy pozná.
Samozřejmě můžeš a pochopitelně chceš, ale akorát se ztrapňuješ. Kdo tě ještě nezná, ten to brzy pozná.To je možná tak tvůj názor. A nevím, co jeho publikováním chceš dokázat...
Samozřejmě můžeš a pochopitelně chceš, ale akorát se ztrapňuješ. Kdo tě ještě nezná, ten to brzy pozná.Blah blah. Něco jiného než prázdné kecy, třeba konstruktivní kritika, nebo návrh jak něco udělat líp by nebylo? Pokud ne, ztrácím tu s tebou čas.
Jak je na tom jazyk D s rychlostí? V porovnání třeba s C++? Dal by se v tom bezbolestně napsat 3D engine nad OpenGL, který by byl rychlý?
Mohl bych to pak portout na ARM phone? (Android/iPhone/Meego)
gcc (gdc) a LLVM (ldc) kompilery pro D samozřejmě ARM podporují, ale jsou, co se týče podpory jazyka, oproti oficiálnímu DMD přirozeně pozadu a na D2 se dá prozatím rovnou zapomenout. Měla by u nich být rychlost v porovnání s C++ téměř identická, jelikož jde interně o stejné překladače, pouze jiné "syntaktické frontendy" a knihovny.
Jak si na tom stojí samotné DMD vám ponechám jako cvičení. Nezdá se, že by se v něm momentálně nějaká podpora pro jiné architektury než x86 nacházela.
Dal by se v tom bezbolestně napsat 3D engine nad OpenGL, který by byl rychlý?D má GC, takže to by mohl být potenciálně problém, ale na wiki píšou, že se dá kontrolovat/deaktivovat (nevím detaily), takže by to asi jít mělo...