From a40b035d6473da810b1c8ed192778e8c0c570eaa Mon Sep 17 00:00:00 2001 From: Richard Thier Date: Thu, 3 Oct 2024 16:28:51 +0200 Subject: [PATCH] pointer semantics cleanup --- BASED.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/BASED.md b/BASED.md index 31774a0..ed41634 100644 --- a/BASED.md +++ b/BASED.md @@ -169,7 +169,12 @@ A pointerek ahogy fenn írtuk, alapvetően csak @resource és @release függvén és persze a handle-k adattagjai is lehetnek pointerek amiket akkor kezelünk, mert saját pointer állhat értékadás bal oldalán! VISZONT! Kiadhatunk pointereket a user kód / caller felé, de számukra nem "menthetők" le ezek. Tehát alapból egy pointer -nem lesz "menthető", de @resource-os és @release-es függvények esetén, @unsafe kódban és a saját ownership alatt IGEN! +nem lesz "menthető", de @resource-os és @release-es függvények esetén, @unsafe kódban és a saját ownership alatt valamennyire: + +* Menthető saját owningolt pointerbe cím közvetlenül a `int a = 42; ... int *b = &a;` módon (adattag / stack-en ptr) +* Menthető bele @resource-ból visszaadott érték, továbbá @resource-nak átadható ** módon (írásra) is. + +Kapott pointer-t lokális változóba elmenthetjük, de adattagba, vagy globálisba nem menthető el semmi - csak "saját pointer". Még egy fontos kivétel talán: @@ -184,6 +189,10 @@ Még egy fontos kivétel talán: ^^Ennél szerintem engedni kéne, hogy a for/while használhassa talán? De ez egy nagyon jó kérdés, mert speciális eset! Szerintem valahogy ez jó volna, mert praktikus baj nincs vele és C-interop miatt kellhet (főleg az utóbbi pl.) +Megj.: Zsolti hívta fel a figyelmem, hogy ezekkel a szabályokkal a BASED-ben talán többször tudunk jobbérték referenciát + auto-konvertálni (például ha érték szerinti amit a return visszaad és az nem static / threadlocal, szerintem mehet már) + és ezáltal könnyebben kerülhetek automatikus move-olódás helyzetébe. + ## Jobb pointerek 2: speed Valahogy jó lenne elérni, hogy a default a "restrict" kulcsszóhoz legyen közelebb. @@ -268,7 +277,7 @@ Megj.: Szerintem ezzel generálható C-kód -fno-strict-aliasing mellett is aká ## Jobb referenciák * A referenciának lehetne "értéket adni" - nem mint C++ban... -* De ahogy fentebb írtuk másolni csak lokális változóba lehet a stackre +* De ahogy fentebb írtuk másolni csak saját ownolt mezőbe és lokális változóba lehet a stackre * A referencia "lényegében egy pointer, de nincs rajta aritmetika"... szóval nem tömböt jelképez. * Kérdőjel hozzáadásával jelölhető, hogy null lehet-e (default: nem).