pointer semantics cleanup
This commit is contained in:
parent
b04bc8736e
commit
a40b035d64
13
BASED.md
13
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).
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user