A direct, line by line port of the C implementation works in D: ==== import core.stdc.stdlib; import core.stdc.stdio; import core.stdc.time; import sdl.SDL;
uint frames = 0; uint t_acc = 0; void print_fps () { static Uint32 last_t = 0; Uint32 t = SDL_GetTicks(); Uint32 dt = t - last_t; t_acc += dt; if (t_acc > 1000) { uint el_time = t_acc / 1000; printf("- fps: %g\n", cast(float) frames / cast(float) el_time); t_acc = 0; frames = 0; } last_t = t; } void blit_noise(SDL_Surface *surf) { uint i; long dim = surf.w * surf.h; while (1) { SDL_LockSurface(surf); for (i=0; i < dim; ++i) { (cast(ubyte *)surf.pixels)[i] = ((rand() & 1) ? 255 : 0); } SDL_UnlockSurface(surf); SDL_Flip(surf); ++frames; print_fps(); } } void main() { SDL_Surface *surf = null; srand(time(null)); SDL_Init(SDL_INIT_TIMER | SDL_INIT_VIDEO); surf = SDL_SetVideoMode(320, 240, 8, SDL_DOUBLEBUF | SDL_HWSURFACE); blit_noise(surf); } ==== That's 50 lines. This is my big "meh" about Rosettacode - virtually everything C can do, D can do in an almost identical fashion, using the same libraries and everything. I made only a small handful of edits there. Change include to import, add the keyword cast to the casts, and change -> to . Done.