pointer semantics cleanup

This commit is contained in:
Richard Thier 2024-10-03 16:28:51 +02:00
parent b04bc8736e
commit a40b035d64

View File

@ -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).