Another, arguably even more powerful, alternative is Rhino + Grasshopper. Grasshopper is often used for generative designs, but can include arbitrary Python nodes and can even be used for "parametrically" designed functional parts.
Grasshopper can also output gcode directly [1], enabling pretty wild things like [2].
Thanks for sharing!