Portál AbcLinuxu, 26. října 2025 18:21
Tiskni
Sdílej:
.some.id^LF
LF
Specifikace říká:
For a one-line record, ' follows, for a multiline record, ^ followed by a string of maximum of 64 octets and LF follows. For a one-line record any data follow until the first occurence of LF. For a multiline record any data follow until the first occurence of LF immediately followed by the string of maximum of 64 octets.
Přemýšlím jak to formulovat ve specifikaci lépe. Možná bych měl oddělit specifikaci pro singleline a multiline. Nebo raději ne? Nějaké nápady jak to upřesnit? Díky.
JSON je smradlavý bastl, který neumí ani komentáře → na konfiguráky absolutně nevhodný a na jakékoli lidsky psané datové struktury vlastně taky (často potřebuješ data ladit a různě si s tím hrát a tam se fakt hodí mít možnost kus zakomentovat – všude jinde ta možnost je – např. XML, INI, SQL, YAML atd.).
cat .icewm/preferences | grep -i hladany_retazec
no a vždy nájdem čo potrebujem. Spravidla to vypľuje komentár aj s hodnotu.
Ale neviem či nenosím drevo do lesa, keď viem že miluješ XML
Já zase neviděl JSON s komentáři a vzhledem k tomu, že jsem četl specifikaci, tak ani nevěřím, že nějaký existuje.
Oproti tomu komentovaných XML jsem viděl spoustu a taky jsem viděl spoustu XML s XSD nebo jiným schématem, u kterých mi editor během psaní validoval dokument a napovídal elementy a zobrazoval dokumentaci. Práce pak jde výrazně rychleji od ruky a člověk má větší jistotu, že to bude fungovat, než když píše naslepo nebo podle externí dokumentace.
Já zase neviděl JSON s komentáři a vzhledem k tomu, že jsem četl specifikaci, tak ani nevěřím, že nějaký existuje.No proto bych třeba na konfiguraci doporučil spíš TOML. Beztak je (ještě o něco) jednoušší editovat konfigurák v TOMLu než v JSONU.
Oproti tomu komentovaných XML jsem viděl spoustu a taky jsem viděl spoustu XML s XSD nebo jiným schématem, u kterých mi editor během psaní validoval dokument a napovídal elementy a zobrazoval dokumentaci. Práce pak jde výrazně rychleji od ruky a člověk má větší jistotu, že to bude fungovat, než když píše naslepo nebo podle externí dokumentace.To, že je potřeba celkem rozsáhlý tooling a od někoho vypracovaná schémata, aby editace XML nezpůsobovala vývojářům PTSD, 1) mě nepřekvapuje a 2) nepovažuju za plus.
od někoho vypracovaná schémata
A co jiného navrhuješ? To mám si mám pořídit věšteckou kouli a psát podle ní? Tak jako tak je potřeba napsat specifikaci a strojově čitelná je ta nejlepší, jaká může být (vysvětlující texty do ní lze vždy doplnit, ale obráceně to nefunguje – specifikaci v přirozeném jazyce těžko použije nějaký nástroj a těžko ti usnadní práci – musíš všechno přečíst sám a dělat ručně).
ssh foobar vim ~/some/file).
XML by bylo fajn, kdyby
A co jiného navrhuješ? To mám si mám pořídit věšteckou kouli a psát podle ní? Tak jako tak je potřeba napsat specifikaci a strojově čitelná je ta nejlepší, jaká může být (vysvětlující texty do ní lze vždy doplnit, ale obráceně to nefunguje – specifikaci v přirozeném jazyce těžko použije nějaký nástroj a těžko ti usnadní práci – musíš všechno přečíst sám a dělat ručně).A co jsi to používal / používáš za editor? Já jsem na XML zatím nic použitelného neviděl a něco takového by se hodilo.
Netbeans a jEdit, občas ještě Eclipse. Nicméně dokonalé to není a ten potenciál, co by z toho fotmátu šel vytěžit, je ještě mnohem větší – ale i tak to dalece přesahuje jiné formány, kde je podpora v podstatě nulová (v lepším případ zvýrazňování syntaxe).
... tak vis jak to pak vypada v realu - ty XML konfiguraky (prave, kvuli tomu aby se daly zpracovavat pomoci ruznych nastroju) jsou tak slozity, ze dokonce ani s tema udelatkama se v tom nikdo nevyzna
Já zase neviděl JSON s komentáři a vzhledem k tomu, že jsem četl specifikaci, tak ani nevěřím, že nějaký existuje.Já ano. A není to rozšíření specifikace o komentáře zase tak složité.
XML do toho netahej, o to tu nejde – můj komentář byl o JSONu a o jeho zásadní vadě – absenci komentářů – která tento formát činí nevhodným pro většinu použití. I ten tvůj oblíbený „plaintext“1 ty komentáře podporuje.
[1] ve skutečnosti to žádný „plaintext“ není a je to nějak specifikovaný značkovací jazyk, asi něco na způsob INI nebo .properties souborů
můj komentář byl o JSONu a o jeho zásadní vadě – absenci komentářů – která tento formát činí nevhodným pro většinu použitíTo bych neřekl, pro svoje většinové použití, tj. data interchange (zejména na webu apod.) a serializaci, vyhovuje v zásadě velmi dobře. (A o lepší alternativě nevím.) Na konfiguraci JSON jako takový moc není, pokud ta konfigurace je větší než minimální. Editory jako Sublime nebo VS Code si za tímhle účelem do JSONu komentáře přidaly, což není čisté řešení, nicméně v praxi s tím na 99% problém nebude.
Pro serializaci a strojové rozhraní se klidně může použít binární formát. Co se týče lidské čitelnosti – většina JSONu, který potkávám, je humus na jednom řádku, takže člověk stejně potřebuje speciální nástroj, který to rozparsuje a zobrazí v lidsky čitelné podobě – a to můžu dělat i s binárním formátem (třeba si ho otevřít ve Wiresharku nebo vypsat jedním příkazem v konsoli).
Editory jako Sublime nebo VS Code si za tímhle účelem do JSONu komentáře přidaly
Takže už to není JSON a nemá cenu se o tom v souvislosti s JSONem bavit, mj. proto, že parser JSONu si na tom vyláme zuby.
Pro serializaci a strojové rozhraní se klidně může použít binární formát.Je otázka, jestli by to přineslo výhody, např. v tom prostředí webu. Přenos se stejně typicky komprimuje a pro dekódování, zejména v JS, je JSON nejspíše stejně snazší.
Takže už to není JSON a nemá cenu se o tom v souvislosti s JSONem bavit, mj. proto, že parser JSONu si na tom vyláme zuby.Výhoda je v tom, že pro uživatele to stále je JSON, je zvyklý s tím pracovat. Že to nejde parsovat obecným JSON parserem jaksi ničemu nevadí.
JSON má komentáře na stejné úrovni jako uSX popsaný v blogu. Tedy ani jeden je nemá a emuluje se pomocí vyhrazené property.Ne tak docela. V JSON se musí vyhradit nějaká hodnota vedle ostatních a tudíž každá implementace musí nějak sémanticky rozlišit, zdali to je komentář či hodnota, protože JSON specifikace pro rozlišení neposkytuje žádný nástroj. uSX však tento problém nemá, protože komentáře nelze adresovat žádným ID (ačkoliv v AST někde samozřejmě zůstanou, ale není důležité kde a implementace by na ně měla zcela kašlat s výjimkou prvních několika bajtů streamu, které určují požadovanou verzi specifikace pro úspěšné zpracování následujícího streamu).
Hlavní výhoda JSONu je v tom, že ve většině dynamických jazyků se mapuje 1:1 na běžné datové struktury (JSON je poskládaný jen z uzlů typu seznam, objekt, null, bool, string, číslo).V zásadě ano to tak je, občas bývají problémy s datovými typy - např. kvůli tomu, že JSON nerozlišuje float a integer (natožpak různé velikosti integeru nebo znaménkovitost). Nicméně souhlasim, že se JSON typicky snadno reprezentuje v různých jayzcích. Co mně osobně na JSONu vadí (mnohem víc než absence komentářů) je, že netoleruje čárky na konci věcí (trailing comma), tj. např.
[ 1, 2, 3, ] není validní.
Oproti tomu je například v XML je 18 typů uzlů, parser je složitý až hrůza a neumí to rozlišit null od false.XML je markup (navíc zatížený historií - HTML, SGML), na něco jinýho než strukturování dokumentů ho IMHO nejde moc brát vážně...
Pokud není důležité „kde“, tak parsováním a opětovnou serializací komentáře buď ztratíš, nebo zdrhnou někam kdo ví kam.Pardon, vyjádřil jsem se dvojsmyslem. Komentáře samozřejmě zůstanou v AST (kterým je holý seznam dvojic, takže mapování na běžné struktury je samozřejmost), a to přesně na stejném místě kde byly na vstupu. Ohledně schématu, tak uSX samozřejmě podporu schémat má - a to ve formě volitelné standardní knihovny schémat (ta může být však jednoduše nahrazena jinou, vlastní knihovnou schémat v případě potřeby).
Technická: o XML se to rozhodně říct dá, kódování a dekódování jsou symetrické operace"Rozhodně" se to tedy IMHO říct nedá. Například následující dva XML snippety mají jiný AST:
<person><firstname>Pepa</firstname><lastname>Vomáčka</lastname></person>
<person>
<firstname>Pepa</firstname>
<lastname>Vomáčka</lastname>
</person>
Jestli budou nebo nebudou interpretovány stejně je v zásadě záležitost aplikace, příp. je potřeba to ošetřit schématem.
Další věc je, že enkódery mohou/nemusí různě kódovat znaky do entit (ie. třeba " místo " apod.) nebo používat CDATA.
Komentáře chybí jen při ručním psaní konfiguráků.
Což je dost podstatná vada. Přidání komentářů nezvyšuje výrazně složitost formátu, takže tohle pokládám jednoznačně za špatný návrh a šetření na nesprávném místě.
ukládání a předávání dat, API, konfigurace upravovaná z GUI
I tam se komentáře hodí a není důvod, proč by tam neměly být. Při vývoji těchto věcí je potřeba ladit data, testovat, API si často budeš nejdřív provolávat ručně přes curl, JMeter, SoapUI atd. a tam se hodí mít možnost zakomentovávat různé části, zkoušet posílat různé požadavky nebo si do toho psát poznámky.
V takových případech to je dokonce výhoda, neboť zakódování a dekódování jsou pak zcela symetrické operace a žádná data se při strojovém zpracování neztrácí
Jednak se ztrácí pořadí1 a jednak třeba u toho XML jsou komentáře normální uzly a jsou součástí modelu (můžeš je načíst a pak zase uložit).
[1] což někdy hraje roli resp. omezuje to způsoby využití takového formátu – např. když na hodnotě jednoho atributu závisí způsob parsování dalších atributů – atributy se ti při výstupu zpřehází a pak to nejde přečíst na jeden průchod
Tedy ani jeden je nemá a emuluje se pomocí vyhrazené property.
Ne, to opravdu za komentáře považovat nelze. Zasírá to datový model a v souvislosti s tím, že JSON neumí jmenné prostory, není ani možnost jak to logicky separovat od skutečných dat.
Software na druhé straně by s tím musel počítat, což jsem ještě neviděl. Takové „komentáře“ pak nefungují buď vůbec (druhá strana ti vrátí chybu, protože narazila na atribut, kterému nerozumí) nebo to v horším případě projde a může se to chovat divně (druhá strana si ten komentář vyloží jako něco jiného).
Zrovna jsem s tím dneska taky bojoval :-) Sice vím, co od toho čekat, takže už na to moc nezapomínám, ale odmazávat ty čárky je otrava. (generoval jsem si nějaké seznamy prvků a kopíroval je do JMeteru s požadavkem v JSONu).
Nějaké klady asi měl, když dnes jeho odnož s názvem SCL řídí fabriky a jaderné elektrárny (ty modernější, které nejedou na PDP-11), a stále čiperná Ada z Pascalu také vychází. I když mám takový blbý pocit že software pro F-35 byl napsaný "moderně" v Javě, podle toho jak zabugovaný krám to je!
I když mám takový blbý pocit že software pro F-35 byl napsaný "moderně" v Javě, podle toho jak zabugovaný krám to je!Afaik je psaný z většiny v C/C++.
Nekritizuji vše USA, jen to špatné. Ono toho není málo. Ten F-22 je celkem obstojné letadlo, po dost slabých začátcích se z toho vyklubalo něco co aspoň trochu funguje. A ten pilot co prototyp hned při prvním letu vinou počítače nerozmlátil na trsátka má mojí poklonu! To byly reakce že by se kobra podělala strachy.
Byl jsem loni v Ostravě na dnech NATO. Chtěl jsem si po letech zase okouknout B-52, naposledy jsem je tady sledoval když létaly na Srbsko, některé se s těmi bombami vlekly tak nízko že jsme jim dalekohledem počítali nýty. To co jsem viděl jsem fakt nečekal, výztuhy, záplaty podlepené silikonem, zvlněný potah, podle druhu šroubů se dalo poznat v jakém období která oprava proběhla. Musím uznat že sednout do toho, naložit třicet tun bomb, odletět v desetikilometrové výšce přes půl zeměkoule, tam to vysypat a letět zase zpátky, to chce fakt pořádné koule (a pořádnou porci amfetaminu, naštěstí ho fasují). Je to totální šrot z roku 1961, a kdyby to byl náklaďák, tak už dávno technickou kontrolou neprojde.
Z B-1B kapalo palivo, a vrchol všeho byl Osprey, který mě zajímal ze všech nejvíc. Zkanibalizované náhradní díly z jiných kusů, vevnitř tak málo místa že se tam nedá postavit, všude hadice a kabely nezakryté ani kusem plachty, bál jsem se abych něco neutrhl. Z toho mi bylo fakt zle, tomuhle letadlu jsem fandil od začátku jeho vývoje
Ostatní letectva měla svoje stroje načančané, i ty polské olétané F-16 vypadaly perfektně. Dvoumístnou verzi člověk často nevidí, tu jsem si pěkně nafotil. A nejvíc jsem si tam užil let Drakenu, tahle deska totiž létá úplně jinak než ostatní (obyčejná) letadla. Dnes už je to historie, ale kouká se na to skvěle. Žádný počítač který to zoufalým kmitáním kormidel stabilizuje aby to nespadlo, jenom poctivý hydraulikou ovládaný stroj který si dokonale rozumí se vzduchem.
Varianta k F-35? Cokoliv, třeba Gripen. Pořád dost dobré letadlo. Nebo MiG-29KUB, osvědčený a masivně modernizovaný, dnes už i částečně stealth. Pokud se potkají v boji, dávám 9:1 vítězství MiGu.
T-50 je velký stroj, úplně jiná kategorie, protiváha k F-22. A že by byl bez motorů se mi fakt nezdá, když předvádí tohle: Spectacular Russian T-50 Demo MAKS 2015 PAK-FA. Dobře se podívej jak je ten prototyp stoprocentně stabilní při libovolném manévru. Přitom je to zatím jen výzkumný koncept na kterém si odlaďují nové technologie, které zpětně použijí do současných modelů řady Su-27. Ty se dají ještě pár desítek let vylepšovat, protože neexistuje nic co by se proti nim mohlo postavit. Akorát F-15, to je jediné americké letadlo které se Suchojům aspoň v něčem vyrovná. Jenže půlka amerického letectva stojí v dílnách a čeká na náhradní díly, a čeká, a čeká, a nedočká se. Nejsou totiž peníze, utratily se za F-35. Reagan chtěl SSSR uzbrojit, a zatím Putin uzbrojil USA. Jako bonus přitom zruinoval Saúdskou Arábii a zesměšnil Evropskou Unii.
K těm prototypům, viděl jsem loni párek pokusných MiGů, jak se předváděly při nácviku na přehlídku k 9. květnu. Stát na tryskách dneska dokáže každý slušný tryskáč, popojíždět nad zemí sem a tam ty lepší, ale tyhle spolu tančily a hopsaly v páru, a přitom snad jen pět metrů nad zemí! No, F-35 jako nepříliš podařený klon Jaku-141 je proti nim fakt sračka, jeho jediná šance je že odpálí raketu a fofrem uteče dřív, než ho zaměří ruský radar. A to je dost malá šance, zezadu je vidět radarem i infra a rychlostí zrovna neoplývá. Ještě že Rusové nemají dost peněz na to aby takovéhle stroje vyráběli ve větším počtu, protože v situaci kdy mechanici amerického letectva objíždějí letecká muzea a vymontovávají tam součástky z exponátů, aby dostali do vzduchu aspoň něco, je jakékoliv vojenské střetnutí těchhle dvou států předem rozhodnuté. A my jsme opět v tom horším klubu :-/
No, F-35 jako nepříliš podařený klon Jaku-141 je proti nim fakt sračka, jeho jediná šance je že odpálí raketu a fofrem uteče dřív, než ho zaměří ruský radar.Tak já bych to zas tak nezatracoval, zrovna dneska vyšlo Cvičení Red Flag: Stíhačka F-35 ničí soupeře poměrem 15:1
V každém případě nelze číslo 15:1 brát, ostatně jako číslo 241:2 v případě F-22A, jako etalon pro výsledek jakéhokoliv nasazení F-35 (nebo F-22A) ve skutečné letecké válce.A jestli MiG-29 simulují pomocí F-16, je třeba podotknout že těm piloti naší tygří letky na MiG-21 v simulovaných soubojích opakovaně natrhávali prdel. Rovněž podobné souboje F-15 či F-18 vs Su-27 přinesly Američanů ve 100% hezké druhé místo. Ale jo, šanci určitě mají, protože dovedou vymyslet účinnou taktiku a učit se z chyb. Rozhoduje hlavně ta taktika, jako tenkrát v Izraeli, kdy na sestřel jednoho MiG-25 potřebovali šest letadel najednou, pomocí kterých na Syřana ušili dokonalou past. A sami si potom do mnohem primitivnější pasti pořádně naběhli.
:-/
Rychlou kompilaci má dnes kde co - a nemusí kvůli tomu prznit syntaxi jazyka.To si nemyslim, dodnes je to aktuální téma. Na rychlost kompilace se zaměřuje např. Go, které ale je na ten úkor dost osekáno o různé fíčury (např. generika). Naprosti tomu třeba rustc je notoricky pomalý (spousta statické analýzy, složitý type system, ...). Ani jedno z toho mi nepřijde jednoznačně lepší. Otázka složitosti kompilátoru je dnes stále tradeoff tak jako kdysi, akorát to máme celé škálováno na větší objemy...
Málokdo z přítomných zde zná skutečný Wirthův Pascal. Borland sám musel Pascal mohutně rozšířit, jinak by byl absolutně prakticky nepoužitelnýA co ma byt? Jazyky se vyviji. Srovnej puvodni Fortran a dnesni Fortran. Srovnej C# 1.0 a C# 6.0. Srovnej puvodni C++ a C++11.
zejména typ file.Ok. Ted se nam to keca. Ale v dobe navrhu Pascalu se pracovalo s daty trochu jinym zpusobem, viz derne stitky, pasky, atp., kde puvodni pascalovsky zpusob prace s daty dava smysl. Nojo, kdyby tak tehdy mel Wirth vesteckou kouli nebo se aspon podival do hvezd, vedel by, ze se za dvacet let bude pracovat se soubory uplne jinak.
A to při zachování pěkných vlastností (KISS, rychlost zpracování/tvoření, použitelnost pro nekonečné proudové zpracování, spolupráce s ostatními formáty, rozšiřitelnost, kompatibilita mezi textovými editory a programovacími jazyky, atd.).Myslím tedy, že porovnání s akademickým jazykem není na místě. Rozhodnutí udělaná v uSX bych spíše přirovnal k vhodnému použití Eulerovy metody na numerické výpočty. Je to triviální metoda, která je nejrychlejší na použití, lidské pochopení a má velmi nízké nároky na výpočetní výkon. Poskytuje velmi přesné výsledky pro velmi malý počet kroků (uSX těží z toho, že používá pouze 3 oddělovací ASCII znaky), ale nehodí se pro velký počet kroků (Pascal používá tolik oddělovačů, že z toho jde hlava kolem). Analogicky s ostatními rozhodnutími v uSX a Pascalu. Jsem přesvědčený, že konfigurační/serializační formáty, které mají standard popsaný na mnoha stránkách ISO A4 nejsou univerzální a jejich složitost nepřináší užitek. Proč? Protože jediným důvodem existence těchto specifikací je srozumitelnost pro člověka (viz. "binární" serializace níže). Pokud však jeden člověk není schopen zvládnout tu specifikaci (a troufám si tvrdit, že ani tady na ábíčku není ani jeden člověk, který zná např. celou specifikaci XML), pak tyto specifikace pozbývají smyslu a měli by se všude na těchto místech používat "binární" serializace (např. MessagePack, Cap'n Proto, Protobuf, ...), protože jsou výrazně rychlejší a jednodušší na strojové zpracování a jejich "nečitelnost" člověkem je irelevantní.
Jsem přesvědčený, že konfigurační/serializační formáty, které mají standard popsaný na mnoha stránkách ISO A4 nejsou univerzální a jejich složitost nepřináší užitek.Ano. A proto má JSON specifikace jen 14 stran, přičemž většinu tvoří obálka, úvod, obsah a reference. Samotná specifikující kapitola je na 5 stran a to jen kvůli tomu, že použili velké obrázky pro popis gramatiky.
Abych to přirovnal, teoreticky jde x86 čip navrhnout tak, aby měl jen 3 nožičky. Dvě nožičky budou napájení, a 1 nožičky bude pro vstupní/výstupní data, samozřejmě vše serializované do jednoho signálu. Ale jen idiot by to považoval za dobrý návrh procesoru, a jen idiot by si myslel, že je to KISS návrh.Všichni víme, že v IT dobrá přirovnání neexistují. Zde popisujete nožičky jako úzké hrdlo, kdežto u datových formátů (uSX není výjimkou) je úzkým hrdlem vždy datový model formátu. Zdá se mi, že zde vedete ohromnou diskuzi na téma parsovatelnosti, přičemž to bylo zmíněno jako jedna z mnoha zajímavých (požadovaných) vlastností a nikoliv jako nějaký Svatý grál. Ani ve specifikaci uSX to není (ani nebylo) nikde zdůrazněno...
Zřejmě pro návrh formátů nemáte cit. Například navrhnout apostrof pro oddělení identifikátoru a hodnoty - to chce ignoranta hrubého zrna.Já su rád za každý takový příklad. Apostrof zmínili již ostatní. Předpoklad byl, že téměř všichni budoucí uživatelé mají buď zkušenost s Lisp-like syntaxí a nebo to jsou "sekretářky" mající převládající zkušenost s běžným textem, kde jsou apostrofy časté a nepárové. Každopádně tento apostrof je ale naprosto podružný problém - máme zde ASCII tabulku a v ní 253 dostupných znaků (LF, ^ a \0 jsou zabrané) a můžeme vybírat do aleluja. Nu a že bych specifikování formátu spojoval s nějakým citem pro návrh formátů, jak píšete, tak to mi zní spíše poeticky než jako vážně míněná kritika. Hm, ale mohl bych tady udělat anketu o nejoblíbenější nepárový oddělovač pro uSX
Dal přednost čisté a jednoduše parsovatelné gramatice před praktickou použitelností - tedy udělal stejnou chybu jako autor usx.Pascal vznikal v dobe, kdy tehdejsi superpocitace mely desitky dnesnich kB RAM. Takze cim jednodussi parser/prekladac, tim vic mista na data.
Protože jednoduše parsovatelná gramatika měla přednost před praktičností jazyka.To je prakticnost z dnesniho pohledu. Za onoho casu, pokud byl preklad vicepruchodovy, nedaly se jednotlive kroky ulozit do pameti, protoze ji bylo zoufale malo, a tak se to resilo zapisem na externi medium. To tedy znamena: ulozit fazi prekladu na pasku, premotat pasku, pripadne presunout pasku do jineho stroje, spustit dalsi fazi prekladace, v horsim pripade preskladavat derne stitky. To vse za situace, kdy na dany stroj si delaji narok dalsi programatori nebo operatori. Takze jazyk, ktery v jednom pruchodu zvladne vygenerovat binarku a pripadne ji okamzite spustit, byl v te dobe asi velke terno a prinos k produktivite prace.
Nicméně Borland zprznil extenzi Pascalu natolik, že smrt Pascalu byla jen otázkou času přes spousty peněz a nadějí Borlandu.Az nekdy do poloviny nultych let, byly Delphi jediny rozumny nastroj pro vyvoj pro MS Windows. Pak je vytlacil Microsoft se svou masivni kampani za C# a .NET.
Pěstujte fantazii dál, hodně se tím bavím.To je mile.
Pascal vznikal v době, kdy už na světě řada programovacích jazyků existovala. A přestože se těžko dá předpokládat, že by měl Pascal k dispozici horší počítače než ostatníPascal byl zverejnen v roce 1970. V te dobe se prodavaly pocitace PDP-11, CDC6000, IBM/360 s kapacitami pameti v radech desitek kB. Dejme tomu, ze pocitac mel cca 64 kB, nejakych cca 20 kB na zakladni obsluzne rutiny/OS, dalsich dejme tomu 20 kB prekladac samotny, a hned zbyva 25 kB na samotny program, prip. data. Navic, je-li program nacitam z dernych stitku (v te dobe standardni medium pro programovani) jeden pruchod je opravdu zadouci. Ano, tehdy jazyky uz existovaly, dlouhodoba zkusenost byla minimalni. Jazyk B (konec sedesatych let), ze ktereho vzeslo cecko nemel ani datove typy a struktury.
Tehdy bylo spíše důležité, jak kvalitní a nenáročný kód vyplodil ten kompilátor, než to kolik průchodů bylo.Vzhledem ke zpusobu prace s danym pocitacem, tak rychly jednopruchodovy system opravdu prinasel velke benefity, viz vyse. Prekladace te doby se stezi vzmohly jen na zakladni optimalizace, nic lepsiho si dovolit ani nemohly, protoze by k tomu potrebovaly nejakou pamet a procesorovy cas, ktere se nedostavalo. Jen pro uvedeni do kontextu, Unix byl prvni OS napsany ve vyssim programovacim jazyce ostatne i proto, ze prekladace existujicich jazyku nebyly zrovna 2x efektivni.
A také ve Microsoft Visual Basicu, což byl velice rozumný nástroj.
"Pak je vytlacil Microsoft se svou masivni kampani za C# a .NET."
Ono je to trochu jinak. Borland začal krachovat mnohem mnohem dříve. Aby nezkrachoval zcela, musel Microsoft investovat do Borlandu nějaké šílené peníze, tuším 120 miliónů dolarů, i když si to číslo nepamatuji přesně.
Borland se pak přejmenoval na Inprise, pak zase zpět na Borland. Ale rozhodli se všechno si dělat sami a po svém - až to finančně neutáhli.
Myslím, že podpora Pascalu byla jedna z věcí, co jim sráží vaz.
A také ve Microsoft Visual Basicu, což byl velice rozumný nástroj.Aaaa, pan bude odbornik! VB byl vsechno, jen ne rozumny nastroj.
Ono je to trochu jinak. Borland začal krachovat mnohem mnohem dříve.Ano, uz jsem pomalu zapomnel, ze Microsoft tehdy pretahl Anderse Hejsberga, aby delal na vyvoji jejich nastroju.
[user] email = xxx@gmail.com name = Johnny English [core] pager = less -FRSX autocrlf = input safecrlf = true ; always use plain prompt disregarding $SSH_ASKPASS value askpass = [alias] a = add --all d = difftool co = checkout ci = commit --verbose st = status br = branch sh = show --pretty="format:" --name-only logg = log --pretty=format:\"%C(auto)%h %cd %s%d [%an]\" --graph --date=short type = cat-file -t dump = cat-file -p [commit] verbose = true [diff] tool = vimdiff indentHeuristic = true [merge] tool = vimdiff [push] default = simple [difftool] prompt = falsedo uSX:
'1.0 .user.email'xxx@gmail.com .user.name'Johnny English .core.pager'less -FRSX .core.autocrlf'input .core.safecrlf'true ' always use plain prompt disregarding $SSH_ASKPASS value .core.askpass' .alias.a'add --all .alias.d'difftool .alias.co'checkout .alias.ci'commit --verbose .alias.st'status .alias.br'branch .alias.sh'show --pretty="format:" --name-only .alias.logg'log --pretty=format:\"%C(auto)%h %cd %s%d [%an]\" --graph --date=short .alias.type'cat-file -t .alias.dump'cat-file -p .commit.verbose'true .diff.tool'vimdiff .diff.indentHeuristic'true .merge.tool'vimdiff .push.default'simple .difftool.prompt'falsePovažujete tuto syntax za chaotickou? Pokud ano, pak uSX totálně selhal a specifikace by měla vypadat jinak.
Ty tečky na začátku názvů mi přijdou nadbytečné1 a apostrof mi přijde nevhodný z vizuálních důvodů – moc to splývá dohromady – vhodnější mi přijde = nebo : ideálně s možností doplnit mezery pro lepší odlišení klíče a hodnoty případně zarovnání hodnot pod sebe (zarovnávání má sice i nevýhody, ale někdy to smysl dává).
Další věc je, že se na každém řádku opakují názvy všech nadřazených úrovní. Asi je to kvůli snadnému grepování, ale znepříjemňuje to editaci – když budeš chtít přesadit jeden uzel (zvlášť když má potomky) do jiné části stromu, tak to bude docela peklo. V XML to v podstatě jen označíš myší a přetáhneš jinam :-)
A nějak v tom nevidím, jak zapsat pole…
Shodou okolností jsem se taky zamýšlel nad vlastním formátem, pojmenoval jsem si to XFI – XML for idiots – a je to syntaxe pro datové struktury2 vytvořená s ohledem na snadný zápis, přehlednost a uniformitu3. Ale zatím to není ve stavu, že bych si to troufal prezentovat ostatním :-)
[1] když už je potřeba odlišit více případů, tak bych na to šel tak, aby tam ve většině případů nebylo nic a v těch méně častých případech tam byl nějaký znak – pokud je ale na začátku každého řádku tečka, přijde mi to špatně navržené
[2] nevhodná pro dokumenty – pro ně bych radši něco ve stylu TeXu, ale když jsem se zamýšlel nad zápisem atributů a escapováním, tak mi z toho začalo vycházet něco složitějšího než XML…
[3] pokud možno jeden způsob, jak něco zapsat – nějaká variabilita tam je, ale jen kde to dává smysl
). Zatím jsou dvě varianty - buď schéma nadefinuje nejprve slovník ID, která poté budou použita (buď ve slovníku bude úplně vše, tedy v případě změny bude potřeba vložit celý slovník znovu, a nebo bude zavedena syntaxe pro referenci do slovníku - třeba ta tečka na začátku) a nebo se zavede syntaxe pro referencování pro např. nejdelší prefix (počítaný až k poslední tečce v ID) ID předchozího záznamu (to může být tečka na začátku). Zatím se více přikláním k té druhé variantě (je intuitivnější, jednodušší a vyřeší všechny smysluplné případy opakování - tedy případy s málo zanořenými strukturami).
Ad. pole, tak vzhledem k tomu, že datovou strukturou je (potenciálně nekonečný) stream dvojic, tak se na něj dá samozřejmě dívat jako na pole - stačí třeba použít stejné ID (moje_pole00) pro několik po sobě jdoucích záznamů.
Přijde mi, že se snaží vymyslet "obecně skvělý" formát, což IMHO nejde.Ano, protoze hlavni navrhove kompromisy jsou: - Chci efektivni reprezentaci (binarni) nebo citelnou reprezentaci (textovou)? - Chci samopopisny format (schema dat je jeho soucasti) nebo format bez schematu za ucelem uspory mista, a do jake miry? - Chci primarne text a v nem escapovat strukturovana data (a la treba XML), nebo chci strukturovana data a v nich escapovat text (a la treba JSON)?
- Chci efektivni reprezentaci (binarni) nebo citelnou reprezentaci (textovou)?Mohu mít bez kompromisů obojí zároveň - třeba vedle sebe (text -> nepotřebuji zajistit, aby byl čitelný, protože již čitelný je; binární data -> nepotřebuji zajistit, aby byla čitelná, protože jsou binární; QED).
- Chci samopopisny format (schema dat je jeho soucasti) nebo format bez schematu za ucelem uspory mista, a do jake miry?Mohu mít obojí zároveň (formát bude podporovat schéma, ale plně volitelně - schéma bude vyžadované pouze tehdy, pokud bude tento požadavek odesílatele vyjádřen v metadatech streamu).
- Chci primarne text a v nem escapovat strukturovana data (a la treba XML), nebo chci strukturovana data a v nich escapovat text (a la treba JSON)?Tohle dilema začíná nabývat na důležitosti pouze s rostoucím množstvím syntaktických "vyhrazených" konstruktů. Pokud se však množství těchto konstruktů bude blížit nule (řekněme třeba 1-4), pak to nijak řešit formát nemusí a neomezí to jeho možnosti a upotřebitelnost. Mimochodem, v uSX se lze escapování (statisticky) vyhnout, pokud si vygeneruji náhodně těch 64 oktetů jako oddělovač (pravděpodobnost, že se v jednom přenášeném záznamu objeví 64 po sobě jdoucích oktetů, které jsem si náhodně vygeneroval by měla být výrazně nižší, než že budu přenášet tak obrovský záznam, ve kterém by se nějaká taková posloupnost mohla objevit).
'1.0
.core.askpass'
.core.autocrlf'input
.core.pager'less -FRSX
.core.safecrlf'true
.user.email'zzz@gmail.com
.user.name'Johnny British
' actual value must be this, so
' always use plain prompt disregarding $SSH_ASKPASS value
' until user input something else this value is used
'1.0 .user.email'xxx@gmail.com .user.name'Johnny English .core.pager'less -FRSX .core.autocrlf'input .core.safecrlf'true ' always use plain prompt disregarding $SSH_ASKPASS value .core.askpass' .alias.a'add --all .alias.d'difftool .alias.co'checkout .alias.ci'commit --verbose .alias.st'status .alias.br'branch .alias.sh'show --pretty="format:" --name-only .alias.logg'log --pretty=format:\"%C(auto)%h %cd %s%d [%an]\" --graph --date=short .alias.type'cat-file -t .alias.dump'cat-file -p .commit.verbose'true .diff.tool'vimdiff .diff.indentHeuristic'true .merge.tool'vimdiff .push.default'simple .difftool.prompt'false
The format uses just three characters (' ^ LF) as delimiters. Any character might be used as value (there are no requirements on encoding nor anything else)Jestliže spec neobsahuje požadavky na kódování, můžou ty delimitery být kódovaný třeba v UTF-16, UTF-32 nebo obecně jakýmkoli ASCII-nekompatibilním kódování? Linefeed v UTF-32 je
0x0000000A.
strings), protože je formát čistě binární a nebere ani trochu ohled na lidskou čitelnost.
Mimochodem TOML považuji za extrémně složitý. A už vůbec v porovnání s tím, co poskytuje oproti ostatním lidsky čitelným formátům (YAML, INI, Java resources, JSON, XML, atd.). TOML také nepodporuje streamy (protože to je hash tabulka). I když základní myšlenka TOML je podobná (TOML je hash tabulka key + value; uSX je seznam dvojic key + value).
Mimochodem, všiml jsem si, že ve všech formátech, kde autoři zvolili pro řešení problému "zápis nepovoleného znaku" escapování se strašně špatně cokoliv lidsky píše, protože člověk musí hlídat zanořování znaků, opakování inkriminovaných znaků, escapování escapovaných escapovaných escapovaných znaků, musí znát velmi dobře standard, aby věděl ve kterých kontextech co escapovat a čím, atd. Formáty, které se escapování umí jakž takž vyhýbat považuji za lépe navržené než ty s escapováním.
Ano, zkoušel. Právě TOML byl jeden z několika málo formátů, který mě přiměl k myšlence, že formát nutně musí podporovat jak lidsky čitelná, tak binární data.Docela by mě zajímala motivace / use case pro tenhle požadavek... To jsem asi ještě nikde moc neviděl...
Ano, zkoušel. Právě TOML byl jeden z několika málo formátů, který mě přiměl k myšlence, že formát nutně musí podporovat jak lidsky čitelná, tak binární data.Koukal jsi na Rebol? Sice je to programovací jazyk, ale dá se taky použít na přenos dat, podobně jako třeba lispovské s-expression.
s/INI/TOML
INI je zlo. Nemá nikde žádný standard a každý parser se chová podle svýho. Naposledy, když jsem řešil INI, což bylo před pár lety, zhrozil jsem se, protože INI codec se choval jinak v kdelibs a jinak v čistém Qt.
TOML je INI-like formát, který ale má pořádnou standardizaci.
). Dokonce, světě div se, jsem ještě před započetím psaní uSX specifikace vybral MessagePack pro ten projekt a v projektu pokračoval jako by se nechumelilo.
Kdybys měl zájem dělat na tom projektu za docela pěkné peníze, tak se mi ozvi (já se Ti nemohu ozvat, protože nejsi přihlášený). Chystám se na ábíčku nabídnout dvě nebo tři pracovní pozice, ale ještě jsem se k tomu nedostal.
Vybrání MessagePack mi však nebránilo si zkusit navrhnout specifikaci, která by řešila vše, co mi na existujících formátech silně vadí.
Kravina na kvadrát, výplod šílence, de.ilní paskvil ... neumětelové, nýmandi.Pojďte dál. Prosím, posaďte se. Tak to budeme točit. Už je to v produkci. Všichni jsou nadšení. To byl produkční, ten co tu byl.
BINARY není nijak kódován.container), stejně jako skládáte třídy v OOP. Jak myslíte, že to dělá ten Smalltalk, když posílá zprávu přes síť? Rozloží ji na jednotlivé atomy a na druhé straně zase složí (třeba pomocí ObjectDumper/ObjectLoader či DataStream).BINARY a dát si do něj, co chcete.BINARY bychom ten formát silně degradovali. Ale možnost by to skutečně byla.Jinak me by se libilo XML (tj.markup s mixed tagy) ve stylu TeXu.
Nad tím jsem shodou okolností taky přemýšlel. TeXová syntaxe je jedna z možností, hodí se pro tvorbu dokumentů (text a v něm sem tam nějaká ta značka). Naopak pro popis datových struktur (a konfigurace) by se mi víc líbilo to založit na odsazování.
Každopádně logickým výstupem by byl DOM resp. SAX události, takže by nebyl problém to použít na místě XML nebo dokonce podporovat víc formátů zápisu současně. Něco málo už jsem implementoval v alt2xml.
Každopádně logickým výstupem by byl DOM resp. SAX události, takže by nebyl problém to použít na místě XML nebo dokonce podporovat víc formátů zápisu současně.Ju, s tím uSX počítá - viz. paragraf o obousměrném 1:1 mapování do/z jiných formátů (např. XML).
Jinak me by se libilo XML (tj.markup s mixed tagy) ve stylu TeXu. To asi zatim na trhu chybi.Můžete to rozvést (stačí ukázkový konfigurák)? Docela mě to zajímá.
Nechapu, vadi ti CBOR a nevadi MsgPack? Ja jsem se nakonec rozhodl pro CBOR, protoze ma RFC.CBOR je vlastně "starý MsgPack" popsaný jedním (!) aktivistou jako RFC, aniž by mu to komunita schválila (on tam ještě udělal minimálně jednu docela zásadní změnu zcela dle vlastní vůle, takže to není úplně košér...). Viz. níže.
Te vytce s typy moc nerozumim - z moji zkusenosti je CBOR jednoduchy na generovani i parsovani.Nedopsal jsem předtím větu
.
CBOR je fork MsgPack přesně v době (cca pár měsíců) těsně před tím gigantickým boomem MsgPacku, který způsobil nezanedbatelné zlepšení samotného MsgPacku. Jenomže CBOR byl prostě akorát formálně dle RFC pravidel popsaný MsgPack jedním nezávislým člověkem (který neměl s autory a komunitou MsgPacku prakticky nic společného) z té doby před boomem (a to dokonce s několika změnami, které si komunita nepřála a které byly nakonec v následujících revizích MsgPacku rozhodnuty zcela opačně - např. CBOR podporuje "nekonečný" string, ale MsgPack nikoliv - což je mimochodem chlupa rychlejší na zpracování).
Jinak co chci (požadavky na formát) jsou popsány v blogovém příspěvku a v úvodu samotného draftu specifikace.
Můžete to rozvést (stačí ukázkový konfigurák)? Docela mě to zajímá.Ukazkovy konfigurak nemam, ale tady je mikrospecifikace. Me slo puvodne spis o neco ve stylu Autodocu, ale jednodussiho (konzistentnejsiho) na zapis.
Kex markup is similar to XML or HTML, the markup can intersperse normal text (typically UTF-8).
The normal tags have no meaning and are left untouched unless there is a macro definition that can evaluate it.
The processing of document with Kex syntax will evaluate all the tags that have macros.
Unless define otherwise, the evaluation only happens once (that is, Kex markup can be processed to yield another with Kex narkup).
Kex markup syntax:
\symbol - single tag, symbol is any valid C literal (also character ':' is reserved for namespaces and can occur in symbol)
\symbol{text} - pair tag, text is any Kex markup
\symbol[arg]{text} - pair tag with optional argument (aka attribute), again attributes can have Kex markup
\symbol[arg1|arg2|..]{text} - pair tag with multiple arguments (also character ':' can be used within arguments to separate key and value to represent dictionary)
\symbol. - single tag which symbol would normally blend with the text
\!symbol - metatag, reserved for use in Kex macro language (so the normal tags are solely reserved for the user)
\#{comment} - block comment, comment can contain Kex markup (so the closing brace must match)
\#comment - comment to the end of line (copied/ignored during evaluation)
\\ \{ \} \[ \] \| \. \: - escapes for special symbols
\ - escape for whitespace, causes the whitespace to be ignored (not included in the output)
\%xxxx. - escape for any character, xxxx is Unicode in hex, '.' is optional
\!![endmark]{literal text|endmark} - universal escape, endmark can be user specified sequence of characters, endmark is optional and can be empty
\&location - defines the current location in the document with a name (can be any symbol)
\@location - refers to the named location
Možná to tam někde je (ještě jsem to nepřečetl celé), ale jaká je logická struktura dat popisovaných tím formátem? Např. v případě XML je to strom elementů, atributů, komentářů případně dalších uzlů. Jak to vypadá u tvého formátu? Můžeš to nakreslit? (obrázek hodně pomůže a člověk na první pohled vidí, o co jde)
Tímhle bych každopádně začal a až pak vymýšlel způsob zápisu. Těch může být ostatně víc (např. binární a textový, různé formy), ale logická struktura, které se z toho načte je vždy jedna.
Viz. heslo "sekretářky" v příspěvku výše.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.