Announcing Grain DDL: code generation by and for demanding engine developers.
Define your structs and data once. Write custom generators for protocols, save files, language interop, shaders, databases, more.
No macros, no metaprogramming. Generate reviewable code on every keystroke. 300kB compiler exe. Windows, Mac, Linux.
Closed beta applications are now open - link in replies.
This Saturday I will be talking about fred at the first Handmade Expo!
I will be revealing some very exciting work I've been doing on the editor along with some insights into the tech behind it.
HM folks are cooking! @antovsky@nicbarker@gdechichi Leddoo @struc_ture@frogtoss
Announcing Grain DDL: code generation by and for demanding engine developers.
Define your structs and data once. Write custom generators for protocols, save files, language interop, shaders, databases, more.
No macros, no metaprogramming. Generate reviewable code on every keystroke. 300kB compiler exe. Windows, Mac, Linux.
Closed beta applications are now open - link in replies.
It is going to be an inspiring week for programmers in Vancouver. I'll live code with Grain DDL in front of an audience at Handmade Network Expo hosted by @handmade_net at 10 sharp, with video published for everyone later.
Live coding on a language you implemented is a type of performance art only a programmer can pull off.
Going first means I get to hang back and watch demos from @antovsky, @nicbarker, @gdechichi, Leddoo, @starfreakclone and @struc_ture afterwards. Let's go.
Announcing Grain DDL: code generation by and for demanding engine developers.
Define your structs and data once. Write custom generators for protocols, save files, language interop, shaders, databases, more.
No macros, no metaprogramming. Generate reviewable code on every keystroke. 300kB compiler exe. Windows, Mac, Linux.
Closed beta applications are now open - link in replies.
@WilburF42982 I haven't used Metadesk. Primary influence was a DDL Parser released by Insomniac almost 15 years ago, and a personal desire to address pain points from 25 years of multiplayer game development.
I see the paralels. The types in Grain DDL are isomorphic to C, and allow you to specify how and where they are encoded in memory. Any source language would need to be able to express this in order to have a non-lossy representation of the data structures.
Grain->glue would be the first exercise. Possible to write new exporters without changing the source. Best to visit it for the public release when final syntax is locked in.
Warning from Apple to Canada on Bill C-22 "As you know, this may be one of the last times we're permitted to discuss the consequences of this legislation publicly."
"That's because of the bill's secrecy provisions which forbid companies like Apple from even discussing the orders we receive with our users or the public." @Apple
The replies are divided between people who frequent this block and know how little sense this announcement makes as presented and people who live thousands of miles away.
@cmuratori *adding* 94ms to every program launch ever (time-to-cursor) is objectively the opposite of draining the inefficiency swamp. So it is also directionally wrong because the time-to-cursor is now 94 "median" ms higher for every program.
@ScottApogee@scitechgirl I had doctors tell me to dial back D3 for years because of fat soluble concerns. Turns out my absorption was sub-normal, and I was right. Bloodwork is the gold standard for getting into the all-cause mortality prevention range for a lifetime.
@EskilSteenberg@vkrajacic Another thing to consider is that val_str is passed and returned by registers *most of the time* nowadays. Acceptably fast. The exception is on Windows when the symbol needs to be exported, and compliant with x64 calling convention. Then it is stack like old 32bit days.
@EskilSteenberg@vkrajacic I think the takeaway from doing this deep dive with you (thanks) is that you want the length cp'd on the stack (or restrict) before iterating. This is natural with val_str, but can be done manually with fam_str. *If* you are willing to do that with fam_str, that would be optimal.
@EskilSteenberg@vkrajacic Here is a godbolt to hopefully explain myself better. https://t.co/zukPNTQmcL str->length aliasing interferes with loop unrolls. Having length on the stack is a strength. Restrict fixes, or so does making the String.value ptr point into the same cache line, after String.
@EskilSteenberg@vkrajacic You have to pass a struct containing a FAM by pointer, so the indirection moves from the bytes to String*. Same number of indirections. Also, char* FAM is a huge pessimization for aliasing. You want length directly in stack mem if you're looping, or it won't stay in register.