pathologically simple hotloading

monkyyy crazymonkyyy at gmail.com
Fri Jun 5 20:18:58 UTC 2026


can anyone imagine any simplifications?

```d app.d
import std;
import core.stdc.stdlib;
import core.sys.posix.dlfcn;

struct enity{
	int i;
	ubyte[100] j;
	//int x;
	//int y;
}
string exe(string input){
	//auto config=0;//Config.stderrPassThrough|Config.retainStdout;
	//input.writeln;
	return input.executeShell(/*null,config*/).output[0..min($,$-1)];
}
void runcompiler(){
	"opend -shared -of=hotload.so hotload.d".exe.writeln;
}
void* handle;
void*[] store;
string[] api;
enum PATH=__FILE_FULL_PATH__[0..$-__FILE__.length];
void loadso(){
	handle=dlopen((PATH~"/hotload.so").toStringz,RTLD_LAZY);
	assert(handle!=null,dlerror.to!string);
	store=[];
	foreach(s;api){
		store~=dlsym(handle,s.toStringz);
	}
}
void hotload(string s,T...)(ref enity e,T args){
	alias F=extern(C) void function(enity*,T);
	auto I=api.countUntil(s);
	if(I==-1){return;}
	if(store[I]==null){return;}
	F call=cast(F)(store[I]);
	call(&e,args);
}
void main(){
	api~="foo";
	api~="bar";
	runcompiler;
	loadso;
	//---
	enity[10] enitys;
	foreach(ref e;enitys){
		hotload!"foo"(e);
	}
	foreach(e;enitys){
		e.i.writeln;
	}
	foreach(ref e;enitys){
		hotload!"bar"(e,true);
	}
}
```

```d hotload.d
import std;
extern(C):
struct thingy{
	int x;
	int y;
}
void foo(thingy* t){
	t.x=uniform(0,10);
	t.y=uniform(20,50);
	(*t).writeln;
}
void bar(thingy* t,bool b){
	(*t).writeln;
}
```

As written I believe ill need to improve my compiler bugs ulities 
to make a ct appendable string[]
i'll need to detect enity-like data types and ensure that

trade off between a uda based like my old version: 
https://codeberg.org/monkyyy/raylib2026/src/commit/e5a7e93cc379981ca44bab70f92f3dfd68653944/hotloadlib.d#L35

I think a void* version is more flexible and should have less 
compile time (as hotload.d isnt even processed) its changing the 
"direction" of the type inference so by not reading `hotload` 
maybe I avoid spooky order of complation issues in exchange for 
less safety?

idk, I feel like this is all under explored, how to best use 
dlsym with template based apis?


More information about the Digitalmars-d-learn mailing list