On Friday, 16 December 2016 at 16:24:18 UTC, Daniel N wrote:
On Friday, 16 December 2016 at 15:17:15 UTC, Ilya Yaroshenko
wrote:
Hi
Is it possible to use classes, which do not have monitor and
other DRuntime stuff?
Object can be allocated/deallocated using allocators, but they
are very complex for betterC mode (monitor, mutex, object.d
dependency).
Can we have something more primitive?
Ilya
extern(c++)
class
Works pretty good in my experience, at least it gets rid of the
monitor, yay!
Thanks,
DRuntime is required anyway, but this is step forward.
ldmd2 -betterC -defaultlib= -O -inline -release -run cppclass.d
extern(C++) class Hw
{
import core.stdc.stdio;
this()
{
}
void hw()
{
printf("hey\n");
}
}
import std.traits;
extern(C)
int main()
{
enum classSize = __traits(classInstanceSize, Hw);
align(16)
ubyte[classSize] payload = void;
auto init = cast(const(ubyte)[]) typeid(Hw).initializer;
foreach(i; 0..classSize)
payload[i] = init[i];
auto object = cast(Hw) payload.ptr;
object.__ctor();
object.hw();
return 0;
}
-------------
Undefined symbols for architecture x86_64:
"__D14TypeInfo_Class6__vtblZ", referenced from:
__D8cppclass2Hw7__ClassZ in cppclass-7ed89bd.o