Microsoft: Ideje abbahagyni a C és a C++ használatát az új projektekhez

Microsoft: Ideje abbahagyni a C és a C++ használatát az új projektekhez
2022-09-23T10:13:28+02:00
2022-11-16T11:56:12+01:00
2022-11-16T12:42:01+01:00
  • Ennek ellenére szerinte új eszközeit ő is Rust-ban tervezi megírni.

    Ja, hogy csak tervezi... Így rögtön hitelesebb
    Mutasd a teljes hozzászólást!
  • Itt a buffer a heap-en lesz, nem?
    Mutasd a teljes hozzászólást!
  • 3. variáns:

    struct BUFFER; typedef char (*get_fn_t)(struct BUFFER* buffer); typedef void (*put_fn_t)(struct BUFFER* buffer, char c); typedef struct BUFFER { get_fn_t get; put_fn_t put; char buffer_memory[]; } buffer_t; inline buffer_t *create_buffer(size_t size){.........}
    De ez azon kívül, hogy néha overkill solution C-ben, olykor túl sok mozgásteret ad és feledékeny kódereknek nem is túl biztonságos.... Cserébe viszont simán lehet vele tetszőleges buffer területet
    és get/put függvényeket használni. :)
    Mutasd a teljes hozzászólást!
  • Szerintem (olyan környezetben, ahol a C++/Rust/akármi elérhető) a C fölött elhaladt az idő.

    Például itt az alábbi kód, ami bemutat egy beágyazott rendszerekben hasznos feature-t:

    template <int BUFFER_SIZE> class Buffer { char buffer[BUFFER_SIZE]; public: void put(char c); char get(); };
    Ez a kódvázlat csinál egy olyan buffert, aminek a memóriája statikusan van foglalva és mégis minden példány igényei szerint méretezhető.

    C-ben két választásod van:
    Vagy csinálsz egy struct-ot fix buffermérettel:

    struct StaticBuffer { char bufferMemory[BUFFER_SIZE]; // BUFFER_SIZE is a macro or a global constant }; void put(StaticBuffer *buffer, char c); char get(StaticBuffer *buffer);
    Vagy csinálsz egy struct-ot, ami csak mutat a buffer területére és az API felhasználójának a dolga, hogy adjon neki egy megfelelő (globális) memóriaterületet és beállítsa a méretét:

    struct MemorilessBuffer { char *bufferMemory; int bufferSize; }; void put(MemorilessBuffer *buffer, char c); char get(MemorilessBuffer *buffer);
    Az első memóriapazarló, a második pedig túl sok mindent hagy az API felhasználójára.
    Mutasd a teljes hozzászólást!
  • Mindig a hányinger kerülget, amikor egy rossz programozó miatt egy nyelvet ócsárolnak.

    Ennyi erővel be kellene tiltani a kések gyártását és használatát mert pár idióta embert öl vele.
    Mutasd a teljes hozzászólást!
  • Rust sem mindenható. Az viszont biztos, hogy izgalmas színfoltja lett a programozási nyelveknek. Alapjaitól radikálisan hozzá mertek nyúlni.
    Ami tényleg érdekessége, hogy garbage collector nélkül kínál biztonságos módon automatikus memóriamenedzsmentet és sok más jóságot.

    Makró C++-os példádhoz, Rust-ban így néz ki a makró: Compiler Explorer - Rust (rustc 1.64.0)
    Bonyolultabb szintaktikájú, de sokkal univerzális lett. A biztonságot ugyanakkor szintén szem előtt tartották.
    Mutasd a teljes hozzászólást!
  • Nincs az az Isten se az a pénz!

    Akkor jöhetne szóba, ha a szintaxisa nem valami fehérzajra emlékeztetne némi BASIC parancsokkal (FN, LET) közzé ékelve.
    Ha már mindenképpen memória biztonság kell akkor 1000-szer inkább ADA.

    Maradok C/C++-nál!
    Mutasd a teljes hozzászólást!
  • Az egyik Bevy tag ezt irja
    "Hi! I'm one of the Bevy maintainers. We're making a Rust game engine, and I've spoken to a number of game companies, large and small, about Rust. In my experience, the concerns are:

    • Existing engines (for AAA, this means Unreal or an in-house engine) are not written in Rust.

    • No one has shipped a Big Game in Rust, and they don't want to try being the first.

    • Existing Rust engines (like Bevy) are very immature and thus missing features, docs and stabilities. The more mature/stable engines (like macroquad) tend to be tiny and focused on hobbyist game development.

    • No console support.

    • Scripting integration is quite challenging, due to the existing

    • Foundational libraries like winit, wgpu, gilrs or [insert audio library here] are too immature, and have frustrating bugs or platform limitations.

    • Their devs don't know Rust, and it's hard to find people with both Rust and games experience.

    There's a few tiny-to-small game (and game-adjacent) companies building in Bevy right now, but they know that they're very much living on the bleeding edge, and usually have very unique needs that aren't well-served by the big engines."

    Az Unreal atyja meg ezt:
    "Rust is C++ minus powerful template abstraction features plus stronger safety guarantees through shifting proofs of liveness to the programmer. Kind of one step backward and one step forward, not any closer to ideal."

    Nezegettem egyebkent, ez a cargo egesz jo, olyan mintha a cmaket a google testet meg a vcpgt osszeintegraltak volna, csak sokkal kenyelmesebb.

    Amig nem latom azt, hogy elkezdik beepiteni egy komolyabb motorba a nyelvet azzal, hogy majd a jovoben atallnak ra teljesen en nem asom bele magam.
    Mutasd a teljes hozzászólást!
  • Egyébként itt a main függvényben lévő első sum hívás nincs garantálva, hogy fordítási időben ki lesz értékelve, mivel nem olyan helyen van használva ahol szükséges lenne tudni az értéket fordítási időben. C++20-tol van consteval, azzal már igaz lenne, de azt a függvényt nem is lehetne fordítási időben nem ismert változóval meghívni, amíg a constexpr-t igen.

    (Persze ezt az egyszerű függvényt ha nincs előtte semmi se, minimális optimalizáció mellett fordítási időben fogja kiértékelni)
    Mutasd a teljes hozzászólást!
  • Game engine terėn is látni a Rust szárnypróbálgatásait: 5 Rust game engines to consider for your next project - LogRocket Blog
    De az egyre komolyabb projekteknél kiderül, hogy csak fellángolás, vagy tėnyleg jó. Illetve mik a tényleges alkalmazási határai.
    Mutasd a teljes hozzászólást!
  • Kerdes hogy mit irunk a nyelvvel milyen architekturat. Kernel fejleszteshez eddig se c++ t hasznaltak hanem c t, embedded programolnal se a c++ volt legtobb esetben eddig se a fo alternativa. Ami nagyobb architectura mint peldaul egy game engine ott meg a rust nem alternativa a konzol tamogatas miatt, esetleg server oldalon service hez de ha a rendszer tobbi resze c++ akkor ugyis azt az fw t hasznaljak, nem irjak ujra egy masik nyelven. Uzleti alkalmazasnal meg inkabb a go vagy nodejs akkor mar. Nekem ez a rust erosen kiserleti nyelvnek tunik amivel inkabb csak kiserleteznek es az igy szerzett tapasztalatot beepitik majd a c++ ba valoszinuleg, ahogy a c# es egyeb nyelvektol is mar vett at bevalt elemeket.
    Mutasd a teljes hozzászólást!
  • Nem ismerem a Rust-ot biztos nagyon jó nyelv és valóban sokat segíthet az öntökönlövés elkerülésében.
    Viszont a nyelv önmagában nem fog megvédeni egy rossz programozótól.

    A C++ nyelv szerencsére szépen fejlődik és remélhetőleg marad a pozíciójában. Peresze haladni kell a korral..

    #include <iostream> #include <concepts> using namespace std; // C++11 parameter pack & constexpr // C++14 return type deduction // C++17 fold expression // C++20 concepts & constratined function template constexpr auto sum( integral auto&&... args ) { return (args + ...); } int main() { cout<<sum(1, 3, 5); // -> evaluated compile time // cout<<sum(3, 1.3); won't compile }

    Tudom, ez nem makró, de pont ez az, hogy igazából egy átlag programozónak nem nagyon kell használnia és rosszul használja a nyelvet, ha feleslegesen makró varázsol 2022-ben.
    Személyes tapasztalatom szerint akik szídják a C++-t ők általában nincsenek tisztában a nyelv modern aspektusaival, valamint ha használták, akkor is kvázi C standard programokat írtak vele. Az valóban nem versenyképes a 'modernebb' nyelvekkel és implicit alájuk tolt keretrendszerekkel.
    Mutasd a teljes hozzászólást!
  • Van egy nyelvi szintaktikája a Rust makrónak, amit bizony meg kell tanulni és frankón érthető.
    Az is biztos, hogy nem egy faék egyszerűnek látszó

    #define SUM(a,b,c) a + b + c
    Aztán persze jön a C makrót felhasználó fejlesztő és

    int x = 1, y = 2, z = 3; int eredmeny1 = SUM(x, y, z); // hurrá, tényleg 6. Teszi a dolgát a C makró. // aztán az idők folyamán kicsit tovább bonyolódik a helyzet int eredmeny2 = 10 * SUM(x, y, z); // és ezért kezdődhet a teljes // C programban a hosszas hibakeresés
    Na ez nem ugyanúgy van a Rust makrónál. És további sok öntökönlövés lehetőséget is segít elkerülni.
    Mutasd a teljes hozzászólást!
  • Biztos annyira magától értetődő a használata, hogy itt nincs varázslás úgyanúgy.
    Mutasd a teljes hozzászólást!
  • Rust esetén mikor és miért használnak makrót?

    Nézem, a Linux kernelbe is bemászott a Rust. Állítólag a 6.1-es kerneltől már fixen C+Rust lesz a kernel nyelve.
    print.rs « kernel « rust - kernel/git/next/linux-next.git - The linux-next integration testing tree
    A kernel/print.rs állományban is látni lehet több makrót.
    Mutasd a teljes hozzászólást!
  • ugyanúgy

    Nem tudom, számodra mit jelent ez a szó, de ha még nem tetted, érdemes lenne összehasonlítanod a két nyelv makró rendszerét.
    Mutasd a teljes hozzászólást!
  • A C meg a C++ nekem nagyjából kimaradt, a rust-t viszont már 3 éve érdekel, előbb utóbb írok is benne valami komplexebb cuccot.

     A mindennapi munkám során jó pár rustban írt cli segít: zoxide, tokei, swc, ripgrep
    Mutasd a teljes hozzászólást!
  • cargo watch -x 'run' -q -c -d 1
    Ez az egy sor kell konzolba és máris megy VS code alól a hot reloading.
    Mutasd a teljes hozzászólást!
  • Köszi. Nézegettem már a Rust-ot, de még nem nyert meg. Bár majd egyszer beleölök egy kicsit több időt.
    Mutasd a teljes hozzászólást!
  • Makrózás terén a Rustban sincs hiány, úgyhogy folytatódik a varázslás ugyanúgy.
    Mutasd a teljes hozzászólást!
  • STM32 mikrovezérlő szépen programozható Rust-ban, kipróbáltam.
    Itt van egy lista, hogy mely mikrovezérlő családokkal lehet már szerencséd: GitHub - rust-embedded/awesome-embedded-rust: Curated list of resources for Embedded and Low-level d
    Mutasd a teljes hozzászólást!
  • Ha a C++-t nem is, a C-t már nagyon el kellene felejteni. A rosszullét kerülget, amikor egy embedded projectben (ami valamilyen gcc-vel fordít, tehát bármilyen nyelven lehetne nyomulni) a C-s makróvarázslatokat meg procedurális(nak sem mindig nevezhető) szemléletmóddal írt globális állapotterekkel operáló programokat látom.

    Egy mikrovezérlőből nem az STL-t hiányolom, de azért egy-két egyszerűbb template csodákat tud tenni. (Főleg olyankor, ha statikusan akarom a memóriát foglalni.)
    Mutasd a teljes hozzászólást!
  • IDE van Rust-hoz. Itt egy csokor: Tools
    Dokumentáció: maga a nyelv igen jól dokumentált, a honlapról kiindulva minden van.
    A crate-ek (közösség által fejlesztett frankó modulok) doksija sajnos gyakran szegényesebb.

    Az első lépések egyébként parancsorból sem kényelmetlenek, a cargo nagyon jó tool lett.

    $ cargo new tesztprojekt
    $ cd tesztprojekt
    $ cargo run
    Hello, world!
    Ez sokkal kényelmesebb, mint ahogy egy GNU projekt esetében C-ben kellett annó megküzdeni mindennel. Beépített unit test, doksi készítő és sok egyéb jó dolog van a cargo-ban. Külön bőséges leírása van a cargo-nak is.
    Mutasd a teljes hozzászólást!
  • Majd először az elavult C++ DirectX-et írják át Rust-ra.
    Mutasd a teljes hozzászólást!
  • A VS nem támogatja a Rust-ot alapból, úgyhogy az MS ennyire akarja nyugdíjazni a C++ t. Ami pedig az alkalmazásokat illeti, ahogy a weboldalán is írja "Command line, WebAssembly, Networking, Embedded" célokra szánják. A többit itt láthatod. (egyébként, akit korán temetni akarnak sokáig él. Nem hiszem, hogy mostanában az EA, meg az Epic Games például áttérne Rust-ra bármilyen kis tool erejéig is)
    Mutasd a teljes hozzászólást!
  • Kimaradt a refrén: így végre ki lehet vezetni az elavult Win32 API-t.
    Mutasd a teljes hozzászólást!
  • Én még nem ismerem a Rust-ot. Van hozzá IDE? Például a Visual Studio tudja? Gondolok itt a beállításokra is: solution/project: property pages: nem csak linker, hanem nyelvi beállítások is vannak. Van hozzá rendes help is? Grafikus felhasználói felületű program is írható benne? Ahhoz rendes help, grafikus felület szerkesztő? Nekem abból is GC nélküli kellene. Gondolom Windows kernelt hívni lehet benne. Sablon (template) osztályok, függvények is vannak? Ha mindre igen a válasz, én nemsokára át is állhatnék rá.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd