digitalmars.D - GC and RC
- KnightMare (41/41) Jun 11 2019 Lets discuss two worlds: GC and RC.
 - KnightMare (8/10) Jun 11 2019 - will the compiler be split into 2 parts?
 - rikki cattermole (5/5) Jun 11 2019 Your over thinking it.
 
Lets discuss two worlds: GC and RC.
I want to know how it will be work for self-education. probably 
others will be interested too.
(1)
int[] findSpanWithMaxSum( int[] arr ) { ... return 
arr[someBeg..someEnd]; }
this code will work with GC and with nogc for static arrays
let's rewrite it for nogc:
(2)
auto/*rcspan!int*/ findSpanWithMaxSum( inout ref rcarray!int arr )
{ ... return arr[someBeg..someEnd]; }
where rcspan is struct{.rcarray, .offset, .length} that can 
handle RC.
by ref coz don't needed addref/release. atomic can be expensive.
RC-library:
rcarray!T // and strings
// multidimensional arrays?
// static rcarray? rcspan should be compatible with it too.
rcspan!T // usual slice{.ptr, .length} shouldn't be compatible 
with RC.
rcmap!(K,V) // rcset!K?
rc!T // smart-ptr
what more?
questions and assumptions:
- RC is atomic for shared vars
- what with weak ptrs?
Form { Label{ weak .parent}; Button{ weak .parent}; }
no need addref/release for .parent. ~Form invokes .release for 
children. what the type of .parent better: some rcweak!Form or 
raw Form*?
- how will work ranges for RC-types?
- will be created utility that automatically converts the GC-code 
to nongc? arrays to rcarrays etc.
- can be added classes with C++new/emplace/destroy semantics?
right now I've got error for scoped!ClassA (class obj at stack):
C:\..\..\import\std\conv.d(4489): Error: No implicit garbage 
collector calls allowed with nogc option enabled: 
_d_array_slice_copy
- how can be used different allocators? what exactly they are: 
struct* or interfaces? with what fields? with function ptrs to 
alloc/free?
 Jun 11 2019
On Tuesday, 11 June 2019 at 20:28:51 UTC, KnightMare wrote:- will be created utility that automatically converts the GC-code to nongc? arrays to rcarrays etc.- will the compiler be split into 2 parts? compiler can generate code from (1) to (2) for nogc automatically when it knows rc-types and how handle it. can remove unnecessary addref/release for params, for returns probably. pro: user source code can be same. generated code depends only from compiler version or compiler option - GC or RC. (can be same source for RT?)
 Jun 11 2019
Your over thinking it. RC is a wrapper struct around a bit of memory. It won't require compiler changes and it could be backed by GC for allocation (I use RC for system sensitive handles like windows even though it is GC still).
 Jun 11 2019








 
 
 
 KnightMare <black80 bk.ru> 