Portál AbcLinuxu, 30. dubna 2025 16:48
Hlavní podporované kompilátory budou Clang (verze 3.3 a vyšší), GCC (verze 4.8 a vyšší) a Microsoft Visual C++ (verze 2015 a vyšší)Z jakého zdroje je informace, že Microsoft Visual C++ verze 2015 a vyšší podporuje C++11? Ještě v listopadu to tak nebylo – viz C++11/14/17 Features In VS 2015 Preview. Například následující kód tam nefungoval:
#include <vector> class S { std::vector<int> v{ 1, 2 }; };A nezdá se, že by to bylo opraveno v CTP 6.
Hlavní kompilátory už C++11 nějakou dobu podporujíSorry.
__OctaUnaryCompare
, __octa_hs_sift_down
, ...
#define ENET_VERSION_MAJOR
struct _ENetHost
.
Tak koukám, zlatá Java. Tam se jednak používají globálně jedinečné jmenné prostory (com.example.projekt123.…
) typicky odvozené od internetové domény autora. A jednak se obvykle neimportuje celý obsah jmenného prostoru (balíčku), ale jen konkrétní třídy nebo konkrétní konstanty či statické metody metody ze třídy.
A jednak se obvykle neimportuje celý obsah jmenného prostoru (balíčku), ale jen konkrétní třídy nebo konkrétní konstanty či statické metody metody ze třídy.V C++ se pochopitelně taky neimportuje celý namespace, tam se includují jednotlivé headery.
To je ale něco úplně jiného. a) V javě si můžeš do class path přidat kde co, spoustu JARů (dalo by se přirovnat k tomu includování) a nekoliduje to díky tomu, že se používají globálně jedinečné názvy (tzn. com.example.asdf
a ne jen asdf
). b) Na úrovni zdrojáku v jedné třídě si importuješ buď celý balíček (com.example.asdf.*
), což se moc nepoužívá, nebo konkrétní třídy z něj (com.example.asdf.Třída123
), ale dostupné máš úplně všechny třídy z class path (i když je neimportuješ, stále k nim můžeš přistupovat přes plně kvalifikované jméno).
Asi jediné, co chybí k dokonalosti, je možnost si třídy přejmenovat (vytvářet si aliasy pro typy). Např. když se ti sejdou dvě třídy stejného názvu Třída123
v různých balíčcích (může se celkem běžně stát), musíš si vybrat jednu, kterou importuješ a druhou, se kterou budeš pracovat přes plně kvalifikované jméno. Líbilo by se mi, kdyby sis mohl importovat obě a dát jim nějaký alias jedinečný v rámci daného zdrojáku.
Asi jediné, co chybí k dokonalosti, je možnost si třídy přejmenovat (vytvářet si aliasy pro typy). Např. když se ti sejdou dvě třídy stejného názvu Třída123 v různých balíčcích (může se celkem běžně stát), musíš si vybrat jednu, kterou importuješ a druhou, se kterou budeš pracovat přes plně kvalifikované jméno.Hmm, třeba v Rustu se tohle řeší buď tím aliasem, nebo jde importovat nadřazený modul a používat částečně kvalifikované jméno, tj.
Foo::Třída123
a Bar::Třída123
...
ale je to zase vykoupeno tím, že jsou děsně dlouhý, což způsobuje děsně dlouhé + zanořené cesty ve filesystému...
To sice ano (třeba pět úrovní adresářů), ale vadí to něčemu?
BTW: zajímavý by mohl být i jazyk, který by umožňoval zapisovat jednotlivé části třídy do samostatných souborů ve složce – třída by byla složka a v jednom souboru bys měl třeba hlavičky, v jiném konstanty a pak metody v samostatných souborech. Pro navigaci strukturou bys nepotřeboval ani IDE a stačil by ti třeba mc
Hmm, třeba v Rustu se tohle řeší buď tím aliasem, nebo jde importovat nadřazený modul a používat částečně kvalifikované jméno, tj. Foo::Třída123 a Bar::Třída123 ...
Víc se mi líbí ty aliasy – ono ta třída se může jmenovat třeba Provider
a balíček bude data
– a kolizi máš hned.
BTW: zajímavý by mohl být i jazyk, který by umožňoval zapisovat jednotlivé části třídy do samostatných souborů ve složceTo pokud vím umí smalltalk.
To jo, ale spíš jsem měl měl na mysli to, že ty includy nemusíš psát ručně, ale že to poskládá kompilátor nebo nějaký preprocesor sám – jen na základě konvencí pojmenování adresářů a souborů. Totéž by mohlo být zajímavé pro konfiguraci – složitou stromovou konfiguraci bys mohl rozložit na hromadu adresářů a souborů, poeditovat si to jednoduchým editorem nebo skriptem a pak zase poskládat dohromady, vytvořit z toho jeden konfigurační soubor, nebo to rovnou načíst jako konfiguraci do programu, bez jakéhokoli mezikroku. Podle hesla „všechno je soubor“ (tedy i uzel ve stromu v konfiguráku).
Alternativa je FUSE souborový systém, který by ti poskytl stejné rozhraní a ani by se kvůli tomu nemusely vytvářet fyzické soubory a adresáře na disku.
:-p
Nejde o XML, jde o tu strukturu a množství informací. Kdybys to zapsal v libovolném jiném formátu, nijak si nepomůžeš.
Neříkám, že tohle je nějaká vize, kam by všechno mělo směřovat, ale přijde mi to zajímavé a občas by se to mohlo hodit. Jde o to že využiješ standardní API (souborový systém) pro přístup ke strukturám uvnitř nějakého souboru a díky tomu můžeš používat obecné nástroje pro práci se soubory (find, grep, sed, perl, bash, mc atd.) a abstrahuješ od konkrétního formátu – překlad zajišťuje nějaká mezivrstva, třeba FUSE FS – tzn. můžeš různě kombinovat programy a formáty, aniž by to jejich autoři původně zamýšleli. Můžeš např. nasměrovat standardní výstup nějakého programu na konkrétní místo (uzel) v nějakém souboru. Nebo si pomocí kopírování a přesouvání souborů/adresářů v Midnight commanderu upravit konfiguraci nebo možná i refaktorovat zdroják.
BTW: zajímavý by mohl být i jazyk, který by umožňoval zapisovat jednotlivé části třídy do samostatných souborů ve složce – třída by byla složka a v jednom souboru bys měl třeba hlavičky, v jiném konstanty a pak metody v samostatných souborech. Pro navigaci strukturou bys nepotřeboval ani IDE a stačil by ti třeba mcTo teda zni dost hrozne
To sice ano (třeba pět úrovní adresářů), ale vadí to něčemu?
To ste všichni Javisti dopr... sfetovaný? Kdo v tom má pak řešit proč nějaká pitomá class přestala fungovat? A k tomu ještě ty úžasný logy, který jak jsou dlouhý, tak jsou na h...o. Sry, ale muselo to ven Ne opravdu Javou tuhle diskuzi nešpiňte.
Kdo v tom má pak řešit proč nějaká pitomá class přestala fungovat?
Třídy se chovají deterministicky, nepřestávají fungovat samy od sebe. A i když něco nefunguje, zanoření je ten nejmenší problém. Na příkazové řádce máme nástroje jako grep
a find
, pomocí kterých třídu hned najdeš. A taky (hlavně) se používají IDE, kde tu adresářovou strukturu neřešíš – přes metody/typy se proklikáš, kam potřebuješ. A hlavně mi přijde lepší mít program strukturovaný, než mít nasypané všechno na jedné hromadě.
A k tomu ještě ty úžasný logy, který jak jsou dlouhý…
Logování1 v Javě je plně konfigurovatelné, takže je jen na tobě, v jakém formátu budeš logovat – příklad – tam je konzolový logovač, který vypisuje jen úroveň a zprávu. A pouhou změnou konfigurace si z toho můžeš udělat ty dlouhé logy, nebo jiné krátké logy (třeba přidat datum a čas), logovat do souboru atd.
[1] to výchozí ve standardní knihovně, o různých nadstavbách ani nemluvě
Nastavit si správně logování je zodpovědnost správce provozujícího danou aplikaci – autor nebo distributor dodávají jen nějaké výchozí nastavení, které sami považují za vhodné – je ale na správci, aby toto nastavení zrevidoval a upravil podle svého, než pustí aplikaci do provozu.
Proboha, tohle přece není o jazyku (spíš v tom bude nějaká osobní zášť). Když budu provozovat jakoukoli aplikaci, tak si ji mám nastavit podle svých potřeb – od toho přece ten správce je, jinak by nebyli žádní potřeba. Samozřejmě, že je fajn, když stačí dát aptitude install xyz
a ono to hned funguje a je to nějak rozumně nastavené, ale v zásadě je to odpovědnost správce si to logování a další věci nastavit.
Typický komentář vývojáře odtrženého od reality provozu aplikací.Komentar typickeho ignoranata...
musí se spolehnout na to, jak logování nastavil nějaký chytrák při instalaci (takže buď nepřehledný default, nebo pro jistotu vypnutoToto neni problem Javy, ale tvuj, kdyz si neumis nastavit logovani, aby odpovidalo tvym potrebam..
když člověk řeší nějaký havarijní stav, tak za a) nemá k dispozici nějaké IDE nebo vývojářské nástrojeTo zavani pripadem pro MacGyvera, protoze jenom ten dokaze s kusem provazku, zvykacky a javac, ktere nasel odlozene na servru, opravit kazdou porouchanou aplikaci.
Tak koukám, zlatá Java...Tak toto rozhodne neni pravda, do C se nepridavaji nova klicova slova tak, aby se rozesral existujici kod. Vzdy se vezme rezervovane slovo (proto jsou rezervovana ta slova zacinajici podtrzitky) a nepodtrzitkova verze se #definuje v hlavicce, takze stary kod se nerozbije. V jave jim je to ukradene a klidne si pridaji nova slova, ktera rozbijou stary kod. Takze validni kod z jedne verze jazyka najednou neni validni v nove verzi. Co je tohle za debilni navrh?
Byl to jeden případ za celou dobu a bylo to vyvážené velkým užitkem. A nic to nemění na tom, že Java patří v oblasti kompatibility k těm nejlepším.
I v nejnovější Javě 8 ten starý zdroják přeložíš a spustíš – příklad:
public class Kompatibilita { public static void main(String[] args) { enum(); } public static void enum() { assert(); } public static void assert() { System.out.println("Kompatibilita v Javě není problém"); } }
Překlad (vypíše varování):
$ javac -source 1.3 Kompatibilita.java
Spuštění:
$ java Kompatibilita Kompatibilita v Javě není problém
Takže jestli chceš provozovat nějaké staré programy z 90. let, můžeš
P.S. asi nikdo není takový jasnovidec, aby už v první verzi jazyka nastřelil všechno tak, aby do budoucna nemusel nic měnit a mohl zachovat 100% kompatibilitu. Ta asi ani není možná – nebo jen na úkor inovací – a pak je otázka, jestli mít raději 100% kompatibilní, ale mrtvý jazyk, nebo něco, co se vyvíjí. Java v tomhle patří k nejlepším jazykům – zachovává kompatibilitu, je to velká priorita, ale zase v tom nejde přes mrtvoly, protože by to bylo kontraproduktivní – průběžně se vyvíjí (generika, anotace, enumy, lambdy…).
-source
bude, počítám, něco jako -std=...
u gcc a clangu...
do C se nepridavaji nova klicova slova tak, aby se rozesral existujici kodCo třeba klíčová slova
inline
a restrict
přidaná do C99?
namespaces tomu nepomůžou, jen vytvoří další potenciální problémy, třeba když vytvořím interní namespace uvnitř octa, pak někdo udělá "using namespace octa" a definuje namespace se stejným jménem...To mi přijde vykonstruovaný problém, jednak by šlo ten interní namespace schovat (pimpl et al.), ale to prostě můžeš přidat do dokumentace - když budete používat namespace octa, nedefinujte v něm namespace octainternal, hotovo, nazdar.
template<typename T> struct MyRange: InputRangeBase<MyRange<T>, RandomAccessRange, T> { ... }
)
obecně je implementace vlastních ranges daleko jednodušší, než implementace iterátorů...
Exceptions se vůbec v stl nemusí používat. Většina volání, která mohou vyhodit výjimku mají ekvivalent bez výjimek.Sorry, ale toto je blbost.
bad_alloc
, u kterýho je otázka, jestli vůbec má smysl se tím zabývat...
Dosť hráčov má v dnešnej dobe 32-bit Widle (je to blbé, ale je to tak), preto je steam klient iba 32-bit, valve to stačí a hráči to moc neriešia.
Steam rozlišuje systém (32-bit/64-bit) až pri spúšťaní app nie pri jej inštalácii, preto sťahuje aj 32-bit. Hry, ktoré majú 64-bit build sa na 64-bit systéme spustia ako 64-bit. Ten 32-bit build máš potom na svojej mašine ako "bonus" ;).
Inak C++ píšu posledný zúfalciUrážky místo argumentů? Sám nemám rád C++, ale tohle nechápu.
čo nedokážu ani portovať svoj pojekt na 64bitSouvislost?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.