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.
Za dobu co se věnuji programování jsem měl tu čest se seznámit hned s několika programovcími jazyky. Jmenovitě (chronologicky seřazeno) to byl Visual Basic, JavaScript, Xkarel , C, PHP, C++, Python, Ruby, Java, Perl, Pascal, Prolog, Lisp, Delphi (Lazarus) a Jazyk D. Každý z těchto jazyků mě nejak ovlivnil, něco se mi na něm líbílo a něco zase nelíbilo. Z výšše jmenovaných jsem nejvíce používal jazyky C(++), PHP a JavaScript. V ostatních jsem většinou napsal několik desítek, stovek řádků maximálně pár tisíců řádků. Poslední zmiňovaný Jazyk D bych teoreticky poznal už dříve (v seznamu by se posunul někam na pozici za Python a Ruby), ale tenkrát jsem mu něvěnoval velkou pozornost, jelikož v té době o něm bylo jen minimum informací. Znovu jsem se o něj začínal zajímat asi tak před půl rokem.
Nebudu se zde moc rozepisovat o tom co to ten Jazyk D vlastně je, jelikož zde zrovna vychází seriál, tak pro ty co tento jazyk neznají, uvádím odkaz. Spíše zde napíši důvody proč mi tento jazyk imponuje.
Základní výhodou je pro mě syntaxe velmi podobná C/C++, doteď jsem nejčastěji používal právě C++ v kombinaci s Qt toolkitem. Následně je pro mě velmi důležitý výkon (bráno jako rychlost běhu výsledné aplikace). Co se výkonu týče, prováděl jsem několik testů a měření a výsledkem bylo, že rychlost výsledné binárky je ve většině případů približně stejná jako u C++. Samozřejmě vše je hodně závislé na tom, jak je daný test napsán. Na čem velmi záleží je zvolený překladač a parametry při kompilaci. Pro D2 (jazyk D ve verzi 2) existuje hned několik kompilátorů, a nutno dodat, že každý podával jiné výsledky. Pro své testy jsem používal GDC (GNU GCC D), LDC (LLVM D) a oficiální DMD (Digital Mars D) . Ve většině testů se jako lepší varianta ukázal GDC následovaný LDC a naposledním místě byl DMD. Ale je třeba dodat, že během posledních pár verzí DMD se výkon značně zlepšil, takže časem možná dosáhne stejných výsledků jako jeho kolegové. A druhá poznámka z praxe, vytvořil jsem v práci jednu menší aplikaci, nejednalo se tedy už přímo o žádný testovací kus kódu, ale o reálnou aplikaci. A u této aplikace jsem nejlepších výsedků dosáhl právě s DMD. Ale po malé úpravě kódu bylo zase GDC výkonější. Věc, která degradovala výkon GDC bylo zbytečné neustálé ralokování paměti při změně velikosti pole.
Velkou výhodou oproti C/C++ je podpora modulů. Jestli je na C++ něco co mě opravdu štvalo, tak to byly komplikace způsoboné z nesprávným pořadím inkludů či potřeba dopředných deklarací atd. Celkově je syntaxe D o proti C++ čistější a dle mého názoru přehlednější a logičtější. Další dobrou vlastností je existence standardní knihovny phobos, která je vcelku rozsáhlá a umí většinu potřebných věcí. Samozřejmě by se našlo pár věcí co mi tu chybí, ale věřím že se phobos bude nadále rozvíjet, takže do budoucna už bude umět úplně vše. Funkce které člověku chybí se dají řešit pomocí externích knihoven, těch ale moc není, ale díky binární kompatibilitě s C, není problém používat Céčkové knihovny. Já osobně jsem během hodiny měl kompletně napsaný modul pro práci s mysql databází. A během druhé i pro postgresql. Existuje i projekt pod názvem Deimos, který zastrešuje různé knihovny v C obalené pro použití v D. O tom jak si napsat vlastní obalení okolo C knihovny bude možná, některý z mých dalších zápisků.
Pro mě sice né zas tak obrovskou výhoou, ale stále velkou na to abych se o ní zmínil je podpora GC (garbage collector). Já osobně jsem většinou sice zvládal správu paměti v C/C++ sám, ale proč si nedopřád to pohodlí a nechat trochu té práce na GC. Pokud někomu GC nevyhovuje, tak D nabízí možnost GC vypnout, ale výrazně se to nedoporučujě. Sám ho nechávám zaplý, krom toho i se zapnutým GC totiž můžete mazat objekty sami jak se vám zlíbí.
Celkově se mi velice líbí univerzálnost použití tohoto jazyka. Kombinuje totiž prvky, které jsem obdivoval na jazycích jako je ruby a python s vysokým výkonem a nízko úrovňovým programováním a prvky funkcionálních jazyků. Jazyk D podporuje i inline assembler. Dokážu si představit použití tohoto jazyka jak pro různé desktopové a konzolové aplikace, tak i jako vhodný jazyk pro webový framework. Velice by se mi líbíilo, kdyby časem existovala mobilní platforma, která by pro psaní mobilních aplikací využívala práve jazyk D.
Tiskni
Sdílej:
(!R)@&{&/x!/:2_!x}'!R
Ray tracer se vejde na 7 řádků: http://www.nsl.com/k/ray/raya.k.
Wow, taky moc pekne, ale popravde na psani webovych aplikaci bych to asi nepouzival, ackoliv na nejake podulohy by se to hodilo.
O tom jak si napsat vlastní obalení okolo C knihovny bude možná, některý z mých dalších zápisků.O tom už jsem trochu napsal na czwiki4d.
to ja se spis rozepisu o tom jak predelat .h do .d
Z linuxové sekce jsem pochopil, že se k D programu linkuje statická knihovna. To není, po čem by příčetný vývojář toužil. Co dynamické knihovny?
A hlavně, co by se mi líbilo, by byl opačný postup, kdy v D napíšu knihovnu a tu pak linkuji k jiné céčkové aplikaci. To je totiž problém všech (snad až na objective C) vysokoúrovňových jazyků, že co v nich napíšete, zůstává zakleto pro daný jazyk. Například java má tohle standardizované (JNI), ale použití je značně kostrbaté a osobně mám pocit, že efektivita přenosu dat a volání mezi oběma systémy je bídná.
no me tusim zde funguje linkovani i dynamickejch a to jak ldc, gdctak dmd
JJ, me slo spis o to ze to jde jak v dmd tak i ldc, gdc sice jde alejen nekdy a nejak to blbne
To je totiž problém všech (snad až na objective C) vysokoúrovňových jazyků, že co v nich napíšete, zůstává zakleto pro daný jazyk.Například v Haskellu to jde.
Nevíte jak se to chová, když výsledek výpočtu v haskelu se nevejde céčkového intu?Nastane přetečení. Zde je zdrojový kód odkazovaného příkladu (k funkcím
fromIntegral
jsem doplnil typy):
fibonacci :: Int -> Int fibonacci n = fibs !! n where fibs = 0 : 1 : zipWith (+) fibs (tail fibs) fibonacci_hs :: CInt -> CInt -- S typy: -- fibonacci_hs = (fromIntegral :: Int -> CInt) . fibonacci . (fromIntegral :: CInt -> Int) fibonacci_hs = fromIntegral . fibonacci . fromIntegral foreign export ccall fibonacci_hs :: CInt -> CIntV příkladu pravý
fromIntegral
převede hodnotu typu CInt
na Int
a v případě, že by rozsah CInt
byl větší než rozsah Int
(norma Haskellu garantuje minimální rozsah typu Int
30 bitů), tak číslo přeteče. Levý fromIntegral
provádí převod opačným směrem, a opět hodnota může přetéct.
CInt
je typ Haskellu, jenž umí reprezentovat všechny hodnoty typu int
z C.
Ach ta ma cestina, ma tam samozrejme byt tvrde y. jinak tuto vetu jsm nenapal nejstastneji. Chtel jsem proste rict, ze s hlavickovymi soubory je to proste obcas zazitek, protoze narozdil od modulu se jedna o prime vlozeni souboru,kdezto u modulu v jazyce D se jedna jen o exportovani symbolu. Jinak k tomu poradi pokud prvne vlozim soubor kterej ocekava treba nejakej typ a az nasledne soubor kde je danej typ definovan tak se dostanu do potizi.
#ifdef
Ano toto makro samozrejme znam, ale neni to vse spasne a hlavne to resi jen problem ze se nenainkluduje soubor vicekrat a nefunguje to uplne vzdy dobre, uz jsem zazil situace kdy se mi to stejne vlozilo vickrat.
#pragma once
!
Vsak co vim tak python je na tom dost podobne co se typovani tyce jako D, pokud promenou pouziji jako int tak uz je stale int ne? Sice se ta typy neuvadeji ale to je tak vse
auto
jako specifikátoru typu, při kterém si ho kompilátor sám odvodí datový typ podle použití, což ovšem opět neumožňuje použití jedné proměnné na cokoliv. V phobosu je typ variant, který tak použít jde.
Na druhou stranu, mě statické typování v D vyhovuje do té míry, že ho používám často radši než python :)
Opravdu nemusi, aha tak to jsem to nekde spatne cetl :), ja stejne vzdy i v pythonu, PHP atd zachovaval to ze jedna promena vzdy reprezentuje stale ten stejny typ
JJ, ono kdyz pak clovek prepisuje po nekom kod a promena title na zacatku obsahuje nejaky retezec, uprostred je to pole a nakonec kdyz se dostane az k return title, tak zjisti ze to vraci cislo :D
Kód mimo funkcí v IO monádách je s drobnými omezeními verifikovatelný (např. Zeno). No a pak je tu ještě Agda nebo Coq
U silně staticky typovaných jazyků jako např. haskell (98 i 2010) je uvedený příklad (řetězec -> pole/seznam -> číslo) neproveditelný.Technicky vzato mohu napsat
coerce = coercea přetypovat cokoliv na cokoliv. Další nepříjemností Haskellu je, že nemá induktivní typy, takže není možné použít matematickou indukci.
coerce = coerce
lze "přetypovat" jen jednou a to buď explicitním uvedením signatury nebo typovou inferencí, tzn. v celém programu má jedinečný typ. Tedy AFAIK, stále se haskell teprve učím.
Haskell nemá induktivní typy ? Např. Maybe Int nebo String nejsou ?
coerce :: forall a. a
– všimněte si toho kvantifikátoru – za a
mohu dosadit cokoliv.
Hodnoty induktivně definovaného typu vzniknou konečnou aplikací "zobecněných nul" (u seznamu Nil
) a "zobecněných následníků" (u seznamu Cons
). Jenže například repeat 'c'
je hodnota typu String
resp. [Char]
, která vznikla nekonečnou aplikací.
inf = S inf
):
data Peano = O | S Peano
Napisete program, provedete experiment (spustite ho na nejakych datech), a prekladac doplni typy na zaklade vysledku experimentu.Jak se ale zajistí, že odvozené typy budou správné i pro jiné běhy? Podobnou věc mohu udělat abstraktní interpretací.
Základní výhodou je pro mě syntaxe velmi podobná C/C++Tohle moc nechapu, a nechapal jsem to ani u Javy nebo C#, a vlastne retrospektivne ani u C++ (vuci C). Prijde mi to jako takova vejicka na uzivatele - pojdte sem, mame skoro stejnou syntax! Ale ve skutecnosti se v tech jazycich programuje jinak a maji zcela jine zakladni knihovny. Syntax je jen mala cast toho, co musite znat. A ten rozdil se zvetsuje s tim, jak se jazyky vyviji. Jelikoz D je (doufam) jeste stale ve vyvoji, je to trochu podfuk, ne?
Ano Qt ma i port pro D jmenuje se QtD
Ale popravde jsme to nestestoval jak moc je to funkcni a i vyvoj se zda ze je momentalne pomalej, pokud jsme se dival tak 10 mesicu na to nikdo nechytl, ale duvodem muze byt ze proste nebylo treba :)
JJ vala vypada moc pekne, treba se k ni taky nekdy dostanu, ale zatim jsem jenom u D a V je prece jen jeste daleko :D