C-čko a zápis mimo proměnnou

lopata

Re:C-čko a zápis mimo proměnnou
« Odpověď #90 kdy: 03. 11. 2017, 12:44:03 »
Celý ten jazyk je jak dort Pejska a Kočičky - totálně přeplácaný, komplikovaný, neortogonální, write-only. Oproti C++ nepřináší žádnou killer-feature, v podstatě na vše, co chce Rust řešit jazykovými prostředky, dnes v C++ existuje nějaká knihovna.
Po pravdě, názor člověka, který zná C, ale nezná Rust, není moc relevantní. Já znám obojí, v C mám odprogramováno hodně, dělal jsem i embedded a výhody Rustu jasně vidím. Říct o Rustu, že je write only, to chce hodně velkou dávku ignorace, zvlášť v kontextu porovnání s C(++). Rust už podruhé vyhrál na stack overflow jako most loved language. To je anketa mezi vývojáři, kteří danou technologii opravdu používají prakticky: https://users.rust-lang.org/t/stackoverflow-developer-survey-result-2017/10038

Pokud nepovažuješ bezpečný kód za killer feature, potom nemá další diskuze žádný smysl


Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #91 kdy: 03. 11. 2017, 12:50:25 »
Bezpecnost nemuzete definovat stylem: kdyz to pouzijete takhle tak je to bezpecne.
Jistěže můžete. Jiný přístup by často vedl k nepřiměřené složitosti. Doprostřed silnice buď můžeme postavit betonovou zeď, nebo tam namalujeme čáru a vedle postavíme značku "zákaz předjíždění". Podobným mechanismem je řešena bezpečnost i v jaderných elektrárnách (barevně odlišené oblasti na podlaze, znamenající prostor pro kontaminované předměty, zákaz přetěžovat operátory v řídícím softwaru apod.), v leteckém provozu, pomocí MISRA pravidel atp.
IEC61508 to vidí trochu jinak
Vidí to přesně jak jsem napsal. Je třeba posuzovat dopady selhání a jejich pravděpodobnost a podle toho volit vhodné nástroje.

v

Re:C-čko a zápis mimo proměnnou
« Odpověď #92 kdy: 03. 11. 2017, 13:01:42 »
Bezpecnost nemuzete definovat stylem: kdyz to pouzijete takhle tak je to bezpecne.
Jistěže můžete. Jiný přístup by často vedl k nepřiměřené složitosti. Doprostřed silnice buď můžeme postavit betonovou zeď, nebo tam namalujeme čáru a vedle postavíme značku "zákaz předjíždění". Podobným mechanismem je řešena bezpečnost i v jaderných elektrárnách (barevně odlišené oblasti na podlaze, znamenající prostor pro kontaminované předměty, zákaz přetěžovat operátory v řídícím softwaru apod.), v leteckém provozu, pomocí MISRA pravidel atp.
IEC61508 to vidí trochu jinak
Vidí to přesně jak jsem napsal. Je třeba posuzovat dopady selhání a jejich pravděpodobnost a podle toho volit vhodné nástroje.
třeba jazyk podle žádané SIL, to co tu píšete vyznívá jako, že na jazyku nezáleží, stačí coding guidelines

Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #93 kdy: 03. 11. 2017, 17:33:58 »
Bezpecnost nemuzete definovat stylem: kdyz to pouzijete takhle tak je to bezpecne.
Jistěže můžete. Jiný přístup by často vedl k nepřiměřené složitosti. Doprostřed silnice buď můžeme postavit betonovou zeď, nebo tam namalujeme čáru a vedle postavíme značku "zákaz předjíždění". Podobným mechanismem je řešena bezpečnost i v jaderných elektrárnách (barevně odlišené oblasti na podlaze, znamenající prostor pro kontaminované předměty, zákaz přetěžovat operátory v řídícím softwaru apod.), v leteckém provozu, pomocí MISRA pravidel atp.
IEC61508 to vidí trochu jinak
Vidí to přesně jak jsem napsal. Je třeba posuzovat dopady selhání a jejich pravděpodobnost a podle toho volit vhodné nástroje.
třeba jazyk podle žádané SIL, to co tu píšete vyznívá jako, že na jazyku nezáleží, stačí coding guidelines
Na jazyku ale opravdu z hlediska těchto standardů a doporučení záleží pramálo. Těžko by taky prošel nějaký konkrétní jazyk. Klidně vám to řeknu, jak to funguje, protože už jsme dodávali více safety-critical software.
Zákazník si stanoví podmínky, obvykle "dle ISO...", "dle DO-178" apod. Tyhle standardy ale nespecifikují žádný konkrétní jazyk. My jen v protokolech pro audit musíme vypsat, jak jsme se vypořádali se všemi požadavky, jež jsou těmito standardy na nás kladeny, pokud jde o vývojový cyklus, o testování, o coding guidelines/policies. Ovšem ani tady to není úplně striktní, požaduje-li něco např. MISRA, stále můžeme zadavateli navrhnout odchýlení se, protože v daném případě nám daný požadavek připadá jako kontraproduktivní, nebo specifikovat jiné požadavky (zákaz podmíněného operátoru, povinnost inicializovat alespoň na neplatnou hodnotu hned při deklaraci, maximální/průměrná cyklomatická složitost...)
Obecně platí, že nejzásadnější je mít k dispozici certifikované produkty třetích stran, tj. překladač a knihovny. Takové najdete pro C, pro C++, Adu, Pascal, Fortran, COBOL, Javu, ale bude mít i Rust a s ním používané knihovny potřebný certifikát dle zadavatelova standardu? Protože pokud ne, tak i kdyby v daném jazyku nebylo možné se ani křivě podívat na zdroják, stejně bude z tohoto hlediska nepoužitelný. Překladač s knihovnami certifikovaný na všechny ty možné standardy najdete snad jen u Ady a - kdo by to řekl - u C/C++.

Jinými slovy - ano, i ten nejkritičtější software je možné psát - a taky se píše - v C, potažmo v C++, a to i přesto, že tu s námi už dávno jsou jazyky, které jsou považovány za blbuvzdornější než tyto dva výše jmenované.

Mimochodem - víte o nějaké statistice, která by dokládala, že software napsaný v nějakém tom "bezpečnějším" jazyce je opravdu spolehlivější a jeho vývoj a údržba stály méně peněz v porovnání s "nebezpečným" jazykem? Mám obavy, že americké ministerstvo obrany postupně ustupuje od Ady právě kvůli tomu, že žádný takový závěr se jim nepodařilo prokázat. Ostatně ani Erlang se v Ericssonu ani zdaleka nestal hlavním vývojovým nástrojem, jak se původně plánovalo - hardware tam dnes programují v C/C++ (snad jsem teď nevyzradil nějaké jejich korporátní tajemství) a Erlang tam spíše jen dožívá na starších projektech.
Praxe zkrátka ukazuje, že ty inherentní bezpečnostní prvky některých jazyků nejsou zas takovou evoluční výhodou, jak by se na první pohled mohlo zdát.

v

Re:C-čko a zápis mimo proměnnou
« Odpověď #94 kdy: 03. 11. 2017, 18:08:52 »
Bezpecnost nemuzete definovat stylem: kdyz to pouzijete takhle tak je to bezpecne.
Jistěže můžete. Jiný přístup by často vedl k nepřiměřené složitosti. Doprostřed silnice buď můžeme postavit betonovou zeď, nebo tam namalujeme čáru a vedle postavíme značku "zákaz předjíždění". Podobným mechanismem je řešena bezpečnost i v jaderných elektrárnách (barevně odlišené oblasti na podlaze, znamenající prostor pro kontaminované předměty, zákaz přetěžovat operátory v řídícím softwaru apod.), v leteckém provozu, pomocí MISRA pravidel atp.
IEC61508 to vidí trochu jinak
Vidí to přesně jak jsem napsal. Je třeba posuzovat dopady selhání a jejich pravděpodobnost a podle toho volit vhodné nástroje.
třeba jazyk podle žádané SIL, to co tu píšete vyznívá jako, že na jazyku nezáleží, stačí coding guidelines
Na jazyku ale opravdu z hlediska těchto standardů a doporučení záleží pramálo. Těžko by taky prošel nějaký konkrétní jazyk. Klidně vám to řeknu, jak to funguje, protože už jsme dodávali více safety-critical software.
Zákazník si stanoví podmínky, obvykle "dle ISO...", "dle DO-178" apod. Tyhle standardy ale nespecifikují žádný konkrétní jazyk. My jen v protokolech pro audit musíme vypsat, jak jsme se vypořádali se všemi požadavky, jež jsou těmito standardy na nás kladeny, pokud jde o vývojový cyklus, o testování, o coding guidelines/policies. Ovšem ani tady to není úplně striktní, požaduje-li něco např. MISRA, stále můžeme zadavateli navrhnout odchýlení se, protože v daném případě nám daný požadavek připadá jako kontraproduktivní, nebo specifikovat jiné požadavky (zákaz podmíněného operátoru, povinnost inicializovat alespoň na neplatnou hodnotu hned při deklaraci, maximální/průměrná cyklomatická složitost...)
Obecně platí, že nejzásadnější je mít k dispozici certifikované produkty třetích stran, tj. překladač a knihovny. Takové najdete pro C, pro C++, Adu, Pascal, Fortran, COBOL, Javu, ale bude mít i Rust a s ním používané knihovny potřebný certifikát dle zadavatelova standardu? Protože pokud ne, tak i kdyby v daném jazyku nebylo možné se ani křivě podívat na zdroják, stejně bude z tohoto hlediska nepoužitelný. Překladač s knihovnami certifikovaný na všechny ty možné standardy najdete snad jen u Ady a - kdo by to řekl - u C/C++.

Jinými slovy - ano, i ten nejkritičtější software je možné psát - a taky se píše - v C, potažmo v C++, a to i přesto, že tu s námi už dávno jsou jazyky, které jsou považovány za blbuvzdornější než tyto dva výše jmenované.

Mimochodem - víte o nějaké statistice, která by dokládala, že software napsaný v nějakém tom "bezpečnějším" jazyce je opravdu spolehlivější a jeho vývoj a údržba stály méně peněz v porovnání s "nebezpečným" jazykem? Mám obavy, že americké ministerstvo obrany postupně ustupuje od Ady právě kvůli tomu, že žádný takový závěr se jim nepodařilo prokázat. Ostatně ani Erlang se v Ericssonu ani zdaleka nestal hlavním vývojovým nástrojem, jak se původně plánovalo - hardware tam dnes programují v C/C++ (snad jsem teď nevyzradil nějaké jejich korporátní tajemství) a Erlang tam spíše jen dožívá na starších projektech.
Praxe zkrátka ukazuje, že ty inherentní bezpečnostní prvky některých jazyků nejsou zas takovou evoluční výhodou, jak by se na první pohled mohlo zdát.
IMHO kdyby na jazyku nezáleželo tak by v 61508 nebyla tabulka s doporučenými jazyky pro jednotlivé SIL
s tím zbytkem celkem souhlasím


mrazík

Re:C-čko a zápis mimo proměnnou
« Odpověď #95 kdy: 05. 11. 2017, 12:27:44 »
Ono to vypadá komplikovaně jenom na první pohled, ve skutečnosti je to docela jednoduché, v podstatě stačí psát tasky. A nabízí to opravdu zajímavé vlastnosti:
  • tasky spouštěné událostí (přerušením)
  • preemptivní multitasking podle priority tasků
  • celé je to memory safe, unsafe se nikde nepoužívá
  • žádné data races (kontrolováno během překladu)
  • žádné deadlocky (kontrolováno během překladu)
  • prakticky žádný runtime overhead
Je to docela nové, na produkční nasazení je ještě asi brzo, nicméně už teď to má vlasnosti, o kterých se může C nebo C++ jenom zdát.
Hele, tak se mi to podařilo zprovoznit. Opravdu je to něco, po čem moderní manažer půjde jak slepice po flusu. Jeden kolega se k tomu vyjádřil velice trefně takto. Ano, obsluhu přerušení lze nazvat preemptivním multitaskingem, data races nejsou, protože žádná data mezi úlohami neputují, ale úsporné to opravdu je. Dokonce je neuvěřitelné, kolik je toho potřeba ve zdrojácích, aby to vygenerovalo cca 1KiB kódu. Ale ty nástroje jsou propracované, celé to budí dojem velmi promyšleného postupu, buzzwordy jsou už vymyšleny, to se asi ujme. I když takový forth kdysi sliboval taky úžasné nové možnosti, dokonce se kvůli tomu začaly vyrábět i speciální zásobníkové procesory (které dodnes létají v kosmu) a kdo to dneska používá, že.
Oni si to lidi přeberou podle své mentality, já stejně jako kolega Kiwi zatím zůstávám u C/C++. Dává mi větší volnost. Teď půjdu do lesa na procházku a helmu si nevezmu i když jsem si vědom, že padají žaludy. Prostě to risknu s tím, že dubinám je lépe se vyhnout. I když může spadnout i smrková šiška.

Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #96 kdy: 05. 11. 2017, 14:34:53 »
buzzwordy jsou už vymyšleny, to se asi ujme.
;D ;D ;D

I když takový forth kdysi sliboval taky úžasné nové možnosti, dokonce se kvůli tomu začaly vyrábět i speciální zásobníkové procesory (které dodnes létají v kosmu) a kdo to dneska používá, že.
Například my, prosím.  :) Ale spíš jen jako takový shell a pískoviště na cílových zařízení. Na Forthu je úžasná jeho minimalističnost a nenáročnost, než že by nabízel nějaké úžasné nové možnosti (na ARMech s Thumb sadou ani ne 4 KB flash a něco přes 0,5 KB RAM). Filosofie s ním spojená, pokud jde o bezpečnost, je založena na tom, že celková pravděpodobnost selhání je úměrná počtu součástí násobeného pravděpodobností, že zrovna tato součást selže, takže zmenšením počtu součástí vzroste celková spolehlivost. A je pravda, že když člověk něco programuje ve Forthu, tak sice musí trochu víc přemýšlet, ale jednoduchostí a elegancí toho, co nakonec stvoří, bývá překvapen i on sám. Navíc ty procesory specializované pro něj jsou taky jednoduché jak kafemlejnek.

Kit

Re:C-čko a zápis mimo proměnnou
« Odpověď #97 kdy: 05. 11. 2017, 15:18:27 »
Na Forthu je úžasná jeho minimalističnost a nenáročnost, než že by nabízel nějaké úžasné nové možnosti (na ARMech s Thumb sadou ani ne 4 KB flash a něco přes 0,5 KB RAM). Filosofie s ním spojená, pokud jde o bezpečnost, je založena na tom, že celková pravděpodobnost selhání je úměrná počtu součástí násobeného pravděpodobností, že zrovna tato součást selže, takže zmenšením počtu součástí vzroste celková spolehlivost. A je pravda, že když člověk něco programuje ve Forthu, tak sice musí trochu víc přemýšlet, ale jednoduchostí a elegancí toho, co nakonec stvoří, bývá překvapen i on sám. Navíc ty procesory specializované pro něj jsou taky jednoduché jak kafemlejnek.

Ve Forthu si také občas něco zkouším a z hlediska návrhu mi připadá velmi sympatický. Procesory specializované na Forth bývají konstrukčně ještě jednodušší, než standardní procesory, protože si vystačí s chudší instrukční sadou.

mrazík

Re:C-čko a zápis mimo proměnnou
« Odpověď #98 kdy: 05. 11. 2017, 15:47:47 »
Například my, prosím.  :)
Proč ne, když to pro daný účel vyhovuje. Určitě bude pro nějaký účel vyhovovat dobře i ten rust. Já jsem tím chtěl jen říct, že se jednou za čas objeví nějaký "univerzální všelék", který podle autorů vyřeší všechny problémy. Obvykle však tomu tak není. Nějaké problémy to vyřeší, jiné zase přinese. Nevíme co přinese budoucnost. Možná přijde éra kvantových výpočtů a tyhle problémy nám za pár let přijdou směšné.
A abych jen nekritizoval - ten rust vymýšleli zjevně chytří lidé, lze se z něj dost poučit. Například mě to utvrdilo v tom, že psát v C(++) ten otravný modifikátor const všude, kde je to jen trochu možné vůbec není od věci. A v Cortex-M3,4 jsem našel mechanizmus ldrex/strex pro vytváření zámků, který mi připadá hezčí než obvyklé cpsid/cpsie převzaté z osmibitů.

Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #99 kdy: 05. 11. 2017, 16:40:33 »
A v Cortex-M3,4 jsem našel mechanizmus ldrex/strex pro vytváření zámků, který mi připadá hezčí než obvyklé cpsid/cpsie převzaté z osmibitů.
... a clrex ;) Vždyť přesně kvůli tomu tam ty instrukce také jsou. :) Ale není to žádný armí vynález, podobné instrukce měla myslím už IBM 360 ze 60. let.

mrazík

Re:C-čko a zápis mimo proměnnou
« Odpověď #100 kdy: 05. 11. 2017, 17:14:43 »
... a clrex ;) Vždyť přesně kvůli tomu tam ty instrukce také jsou. :) Ale není to žádný armí vynález, podobné instrukce měla myslím už IBM 360 ze 60. let.
No jo, ale musíte o nich vědět. A když přecházíte na ARM z osmibitu, tak použijete to, co znáte a obvykle nepátráte po všech tajích architektury. Ale přiznávám, jsou i tací. Co si budeme povídat, většina lidí tady kolem používá STM32 protože jsou na to klikací nástroje, "knihovny" a mohutná marketingová kampaň. Co se děje uvnitř, lidi až tak moc nezajímá. Alespoň do doby než to přestane fungovat. Nebo, když už je někdo hodně velký šťoura, když mu přijde divné, že to naklikané blikátko sežere půlku flešky, když se to dá dostat do nějakých 50. bytů.

naseptavac

Re:C-čko a zápis mimo proměnnou
« Odpověď #101 kdy: 05. 11. 2017, 19:25:35 »
Proč ne, když to pro daný účel vyhovuje. Určitě bude pro nějaký účel vyhovovat dobře i ten rust. Já jsem tím chtěl jen říct, že se jednou za čas objeví nějaký "univerzální všelék", který podle autorů vyřeší všechny problémy. Obvykle však tomu tak není. Nějaké problémy to vyřeší, jiné zase přinese. Nevíme co přinese budoucnost. Možná přijde éra kvantových výpočtů a tyhle problémy nám za pár let přijdou směšné.

Tohle je teda ulet. Sam sis zvyraznil, co sis taky sam vymyslel a nekomu jinemu sam podsunul. Gratulki.