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

mrazík

Re:C-čko a zápis mimo proměnnou
« Odpověď #75 kdy: 02. 11. 2017, 10:14:01 »
Citace
Tak tady se obrovsky mýlíš, Rust je na embedded mnohem lepší než C. Malá ochutnávka: http://blog.japaric.io/quickstart/
Podívej se na ten výsledný assembler, z bezpečného high level kódu v Rustu se vygeneruje prakticky optimální kód bez žádných režií navíc.
Ano, to je hezké ale má to podstatnou chybu. Zatím  jsem na webu nenašel příklad pro embedded, který by byl napsán v rustu a něco rozumného dělal. Chybí mi především obsluha přerušení. Až to někdo vyřeší, pak dejte vědět. Do té doby je pro mne rust sice zajímavý a dobře vymyšlený nástroj, nicméně pro embedded nepoužitelný. Věřím, že se v tom dá psát efektivní, bezpečný a hezký kód, ale jen pokud pod tím běží operační systém, který vám poskytne potřebné služby.


lopata

Re:C-čko a zápis mimo proměnnou
« Odpověď #76 kdy: 02. 11. 2017, 10:40:49 »
Ano, to je hezké ale má to podstatnou chybu. Zatím  jsem na webu nenašel příklad pro embedded, který by byl napsán v rustu a něco rozumného dělal. Chybí mi především obsluha přerušení. Až to někdo vyřeší, pak dejte vědět.
No tak se podívej třeba sem: http://blog.japaric.io/fearless-concurrency/

mrazík

Re:C-čko a zápis mimo proměnnou
« Odpověď #77 kdy: 02. 11. 2017, 12:38:18 »
Citace
No tak se podívej třeba sem: http://blog.japaric.io/fearless-concurrency/
Dík, to jsem přehlédl. Kdysi jsem to zkoumal a narazil jsem jen na zinc.rs a ten mi připadá dost mrtvý. Zkusím to prozkoumat, ale připadá mi to dost komplikované. Je to ale pohled C-čkaře, v C/C++ si v podstatě můžete dělat co chcete, takže vaše postupy nemusí být rigorózní, přesto však fungují, pokud alespoň trochu víte co děláte.

lopata

Re:C-čko a zápis mimo proměnnou
« Odpověď #78 kdy: 02. 11. 2017, 12:53:18 »
Dík, to jsem přehlédl. Kdysi jsem to zkoumal a narazil jsem jen na zinc.rs a ten mi připadá dost mrtvý. Zkusím to prozkoumat, ale připadá mi to dost komplikované. Je to ale pohled C-čkaře, v C/C++ si v podstatě můžete dělat co chcete, takže vaše postupy nemusí být rigorózní, přesto však fungují, pokud alespoň trochu víte co děláte.
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.

expert

Re:C-čko a zápis mimo proměnnou
« Odpověď #79 kdy: 02. 11. 2017, 13:58:29 »
smart pointery nic neřeší, překladač nemá informaci o životnosti objektu, všechno je unsafe:
Kód: [Vybrat]
auto ptr = std::make_unique<Objekt>();
ptr->metoda();
ptr.reset();
ptr->metoda();

Kdyby jsi použil const, tak tento problém ani nevznikne:

Kód: [Vybrat]
const auto ptr = std::make_unique<Objekt>();
ptr->metoda();
ptr.reset(); // error pri kompilaci: ptr je const, zatimco reset() je non-const
ptr->metoda();
Takže souhlasím s Ondřejem Novákem, kompilátor tohle pohlídá, je ale potřeba použít správné jazykové prostředky.


lopata

Re:C-čko a zápis mimo proměnnou
« Odpověď #80 kdy: 02. 11. 2017, 14:40:26 »
Takže souhlasím s Ondřejem Novákem, kompilátor tohle pohlídá, je ale potřeba použít správné jazykové prostředky.
Hele experte, bezpečnost nemůže být založena na tom, že někde nezapomenu napsat const. Bezpečné to musí být stále, ať tam ten const napíšu, nebo ne. Rust to splňuje, C++ ne. Nehledě na to, že s const ti přestane fungovat třeba swap, takže jsi tak jako tak v pasti.

mrazík

Re:C-čko a zápis mimo proměnnou
« Odpověď #81 kdy: 02. 11. 2017, 17:13:23 »
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.
Velké nadšení to ve mně nebudí. Přeložit to neumím, natolik jsem do rustu ještě nepronikl. Japaric má na githubu několik příkladů, které přeložit jdou, ale třeba zápis jednoho znaku na usart bez přerušení v release verzi sežere 10KiB flash. Ono je to zřejmě tím, že nejsou ošetřeny všechny výjimky (třeba dělení 0 při výpočtu baudrate) a tohle s sebou táhne spoustu balastu, ale i na tom je zřejmé, že programování přímo na železo má svá specifika. Možná se to časem nějak uladí, ale zatím bych rust na nový projekt nenasadil. Bylo by to moc práce s velmi nejistým výsledkem. Na akademické půdě ať si s tím hrají, proč ne, ale v praxi potřebujete předvídatelný výsledek a to zatím rust nedává. Ono na něj (nebo něco podobného) dojde i v tom embedded, tak jak roste kapacita použitelných pamětí a rychlost procesorů, roste i složitost aplikací, ale zatím je ještě brzy. Dáme tomu ještě nějaký ten rok, třeba umře sám od sebe a objeví se něco lepšího. Ale dost o tom pochybuji, počítám, že C/C++ se ještě nějakou tu dobu udrží. Mně osobně vyhovuje C++, ale spousta lidí v oboru zůstává u čistého C, které je přece jen jednodušší. Hodně lidí, co dělají s jednočipy začínali jako návrháři hardware a v oblasti software jsou v podstatě samouci. Problémy, které jsme řešili doposud také nevyžadovaly nějakou velkou teorii, byly jednoduché, protože nic složitého se do čipu prostě nevešlo.

Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #82 kdy: 02. 11. 2017, 19:19:35 »
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.
Velké nadšení to ve mně nebudí. Přeložit to neumím, natolik jsem do rustu ještě nepronikl. Japaric má na githubu několik příkladů, které přeložit jdou, ale třeba zápis jednoho znaku na usart bez přerušení v release verzi sežere 10KiB flash. Ono je to zřejmě tím, že nejsou ošetřeny všechny výjimky (třeba dělení 0 při výpočtu baudrate) a tohle s sebou táhne spoustu balastu, ale i na tom je zřejmé, že programování přímo na železo má svá specifika. Možná se to časem nějak uladí, ale zatím bych rust na nový projekt nenasadil. Bylo by to moc práce s velmi nejistým výsledkem. Na akademické půdě ať si s tím hrají, proč ne, ale v praxi potřebujete předvídatelný výsledek a to zatím rust nedává. Ono na něj (nebo něco podobného) dojde i v tom embedded, tak jak roste kapacita použitelných pamětí a rychlost procesorů, roste i složitost aplikací, ale zatím je ještě brzy. Dáme tomu ještě nějaký ten rok, třeba umře sám od sebe a objeví se něco lepšího. Ale dost o tom pochybuji, počítám, že C/C++ se ještě nějakou tu dobu udrží. Mně osobně vyhovuje C++, ale spousta lidí v oboru zůstává u čistého C, které je přece jen jednodušší. Hodně lidí, co dělají s jednočipy začínali jako návrháři hardware a v oblasti software jsou v podstatě samouci. Problémy, které jsme řešili doposud také nevyžadovaly nějakou velkou teorii, byly jednoduché, protože nic složitého se do čipu prostě nevešlo.
Taky z toho nijak odvařený teda nejsem. Nic, co by mě motivovalo k ústupu od C.

lopata

Re:C-čko a zápis mimo proměnnou
« Odpověď #83 kdy: 03. 11. 2017, 07:20:49 »
Taky z toho nijak odvařený teda nejsem. Nic, co by mě motivovalo k ústupu od C.
Ještě to není dostatečně dobré pro produkční nasazení, ale dřív nebo později na Rust (nebo něco podobného) v embedded dojde, protože je hodně oblastí, kde se bezbečnost opravdu řeší (automotive, aerospace, medicine...). Co by tě mohlo motivovat už jsem psal:
  • paměťová bezpečnost
  • žádné data races
  • vysoká míra abstrakce (generika, closures...)
  • prakticky žádný runtime overhead
Pořád nic? Starého psa novým kouskům nenaučíš ;)

Re:C-čko a zápis mimo proměnnou
« Odpověď #84 kdy: 03. 11. 2017, 09:25:22 »
Pořád nic? Starého psa novým kouskům nenaučíš ;)

O co ti jde? Koukl na to a vyjádřil se, že ho to nepřesvědčilo. Ty pak sám uznáš, že na nasazení to teď není, pak napíšeš tohle? Jestli chceš starého psa učit novým kouskům, tak by ty nové kousky neměly být horší (momentálně "nenasaditelné") než ty, které už umí. To není o tom, kdo je a není starý pes, ale o vhodnosti volených technologií.

lopata

Re:C-čko a zápis mimo proměnnou
« Odpověď #85 kdy: 03. 11. 2017, 10:20:58 »
O co ti jde?
O nic, jen ztrácím čas v diskuzích na rootu.

Koukl na to a vyjádřil se, že ho to nepřesvědčilo.
Že ho to nepřesvědčilo, beru. Ale vyjádřil se, že nevidí nic, co by ho motivovalo k ústupu od C. To neberu. Motivací k ústupu od C je hodně, hlavně v oblastech, kde jde o bezpečnost (automotive, aerospace...). Tam se C(++) používá spíše z historických důvodů, protože nic lepšího nebylo. Nějakou dobu to tak ještě zůstane, ale tlaky ústup od C(++) jsou silné. Z pohledu vhodnosti technologie je C(++) na tyto účely naprosto nevhodné.

neruda

Re:C-čko a zápis mimo proměnnou
« Odpověď #86 kdy: 03. 11. 2017, 10:48:55 »
Lopata ma samoztejme pravdu.

Bezpecnost nemuzete definovat stylem: kdyz to pouzijete takhle tak je to bezpecne.

Tady je spis smutne (celkove na rootu)  kolik lidi tu namyslene a sebevedome placa rozumy.

Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #87 kdy: 03. 11. 2017, 12:05:56 »
Taky z toho nijak odvařený teda nejsem. Nic, co by mě motivovalo k ústupu od C.
Ještě to není dostatečně dobré pro produkční nasazení, ale dřív nebo později na Rust (nebo něco podobného) v embedded dojde, protože je hodně oblastí, kde se bezbečnost opravdu řeší (automotive, aerospace, medicine...). Co by tě mohlo motivovat už jsem psal:
  • paměťová bezpečnost
  • žádné data races
  • vysoká míra abstrakce (generika, closures...)
  • prakticky žádný runtime overhead
Pořád nic? Starého psa novým kouskům nenaučíš ;)
Starý pes už se v branži pohybuje dost dlouho na to, aby pamatoval hromadu podobných "nových kousků", které skončily v zapomenutí. Ale když se v embedded nechytla Ada, tak tohle se neuchytí zcela určitě. Mimochodem, dost pochybuji, že se to nějak výrazněji prosadí na PC.

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.

Rust údajně vznikl jako frustrace autorů webového prohlížeče z C++. To naprosto chápu, protože nechápu, jak dnes někomu může připadat normální, když má webový prohlížeč 18 milionů LOC.

Lidi dnes prostě místo přemýšlení plodí kód, to je celý problém. Ostatně hned v prvních 10 minutách to mnohem pregnantněji vyjádřil mnohem povolanější:

https://www.youtube.com/watch?v=ubaX1Smg6pY

Kiwi

Re:C-čko a zápis mimo proměnnou
« Odpověď #88 kdy: 03. 11. 2017, 12:39:08 »
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.

v

Re:C-čko a zápis mimo proměnnou
« Odpověď #89 kdy: 03. 11. 2017, 12:42:20 »
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