#codeGenerator

Karsten Schmidttoxi@mastodon.thi.ng
2025-04-07

Thanks to @made I recently learned that dynamic code generation doesn't play nice with certain Content Security Policies (CSP). This has a major impact on a few core packages in #ThingUmbrella, like the thi.ng/vectors package which contains ~900 vector functions, most of them code generated and optimized for different vector sizes/dimensions (incl. n-dimensional versions). This package (and some others using a similar approach) are key dependencies for dozens of other geometry/visualization related packages... However, I found code generation the only way to practically manage & maintain the sheer amount of functionality provided.

Because of this (CSP impact), I've been working on a new code generator, which converts the dynamically generated code into statically generated source code files. This will make the overall initial package size bigger, but this shouldn't be a major problem in practice, since there're also very positive effects, including:

- The new format allows for doc strings for _all_ generated vector ops (with the dynamic approach there was no way to properly attach those in TypeScript)
- The new file structure (single function per source file) massively helps with dead code elimination when using a bundler, resulting in smaller final file/bundle sizes. When NOT using a bundler, similar filesize savings can be had by using direct imports (to individual functions) rather than full package imports
- None of the unused versions need to be code generated at runtime anymore, so also improving startup time

The new codegen is already covering around more than a third of the 900 ops. If you want to keep an eye on progress & discussion, follow this issue:

github.com/thi-ng/umbrella/iss

#ThingUmbrella #CodeGenerator #TypeScript #Vector #PSA

2025-03-01

Lapidary-render 0.12.0 is now released.

To the best of my knowledge it's the only #codeGenerator that properly handles #jsonSchema anyOf and allOf.
Also has support for oneOf, but not per the specs.

github.com/python-lapidary/lap

#pythonLapidary #openAPI #openAPI3 #openAPI30 #programming #python #webAPI

2025-02-26

How to structure a #python project with both generated and authored code?

Python tools don't handle well anything other than $root/$package or $root/src/$package

Code generator removes files that it finds, assuming they're outdated

editors can handle a separate subdirectory, but using linter or tests would required synchronizing that directory with the main source directory.

Each of these solutions sucks.

I'm thinking of designating special sub-package `extras` would do the work, it wouldn't clash with generated code, but perhaps others have better ideas.

#codeGenerator #askFedi #programming #openSource

2025-02-23

I wanted to build a #python client for some #openSource project that offers a good #openApi 3.0 description - just to test my generator on real-live service, but also to support the community.

I looked at @forgejo but it turns out it uses swagger 2. I didn't realise #golang was old enough...

Any way, other ideas would be very welcome.

#programming #codeGenerator #pythonLapidary #askFedi

$(cat /dev/urandom)mattesilver@fosstodon.org
2024-12-20

Generating #python code: #jinja or libcst?

#codeGen #codeGenerator #jinja2

Karsten Schmidttoxi@mastodon.thi.ng
2024-11-10

Did some further updates to the #TypeScript code generator for #WASM bindings (thi.ng/wasm-api-bindgen) and released new versions of all thi.ng/wasm-api packages. The new codegen creates even smaller code (approx. -20%), achieved via better re-use of newly introduced helper functions to reduce boilerplate...

These changes will have compounding effects for larger numbers (or complexities) of generated types, especially those involving structs with string fields and/or arrays/slices...

#ThingUmbrella #WebAssembly #CodeGenerator

Karsten Schmidttoxi@mastodon.thi.ng
2024-07-19

Over the past few days I've been working on extending & re-packaging the procedural text generation engine from one of the old examples into a new package and also just wrote/updated documentation for its various features:

- variable definitions, optionally with multiple value choices
- cyclic & recursive variable references/expansion
- variable assignments
- dynamic, indirect variable lookups (for context specific situations)
- optional preset & custom modifiers (i.e. pointfree/concatenative application of modifier sequences)
- controlled randomness during var expansion

The new package is called: thi.ng/proctext (6.5KB incl. all deps) The text format used relies on a simple parser grammar defined and processed via thi.ng/parse. The resulting document AST is then interpreted via thi.ng/defmulti

Please see readme for notes/examples, as well as the refactored example project below. The tool is very useful for complex source code generation, but also could be useful for bots, interactive fiction etc. The generator is stateful and variable state can be optionally retained/re-used over multiple invocations. Making all modifiers async is also providing a lot of flexibility (e.g. loading external data sources, generating secondary/expanded descriptions etc.)

Demo (incl. 5 examples and can be used as playground):
demo.thi.ng/umbrella/procedura

#ThingUmbrella #RewriteSystem #ProcGen #TextGeneration #CodeGenerator #Parser #DSL #Pointfree #TypeScript #JavaScript #InteractiveFiction

chris@strafpla.netchris@strafpla.net
2024-02-15

I often was wondering if something was “the proper way" of doing it and when commenting, the ideas it had about what I was trying to write were misleading.
It felt like pairing with someone who may have picked up something on stack exchange but never bothered to understand what it actually does.
Still - though it may sound funny - *very* useful to me, but like a very strange and dangerous tool that looks absolutely harmless while cooking your face off.
#copilot #python #LLM #codeGenerator

chris@strafpla.netchris@strafpla.net
2024-02-15

I spent a lot of time today using #copilot, again, to build a prototype for a pet project written in #python.
It was extremely helpful, again, to get started with new libraries. But it is very obvious that neither the concepts nor the meaning of what the code does are available to the #LLM-based #codeGenerator.
The user needs to know very well what they need and what comprises good code.
This takes effort/time, so I fear the quality of code (and hallucinated comments!) I’ll see in the future .

Decathlonistpare@kamu.social
2023-12-18
2023-11-07

The Puppy can now handle both 16 and 8 bit values. I ended up making everything 8-bit. 16 bit operations simply need to work on both halves of their data.

So moving DE to HL know generates solutions using EX HL,DE as well as two LDs. The solution with an extra load is valid since it causes different collateral. The real question is why it doesn't generate the HL L,E alternative.

#CleverPuppy #ThePuppy #z80 #CodeGenerator

Solutions:
0: EX HL, DE

1: LD H,D
EX HL,DE

2: LD H,D
LD L,E
Sharon (she/her)sharon@tech.lgbt
2023-03-15
Karsten Schmidttoxi@mastodon.thi.ng
2022-12-31

@borkdude "Fun" is obviously highly subjective, but here're a few different things I've been using #Ziglang for so far:

thi.ng/wasm-api is a growing suite of #WebAssembly bridge APIs & tooling for hybrid Zig (not exclusively though) and #TypeScript apps. E.g. Check out the thi.ng/wasm-api-dom & thi.ng/wasm-api-canvas child packages and the thi.ng/wasm-api-bindgen, a #CodeGenerator for shared data structures...

art.thi.ng/quasiflock - a generative, animated #WebGL piece (my 1st Zig project)

The attached images are from a WIP #Voxel #PathTracing renderer, mainly built with libraries from github.com/thi-ng/zig-thing...

3D render of a generative voxel model based akin to partially grown (or semi-destroyed) mega architecture. Parts of the model are rendered using a bright orange glowing, lava-like material with the rest of the scene bathed in cold shades of blue lightAn alternative view of the same voxel scene shown in the previous image, here exposing more of the model interior
Karsten Schmidttoxi
2022-08-14

This is gonna be so much fun & will make interop between WebAssembly & TypeScript so much easier... 🤩 Initial release in next few days!

RT @thing_umbrella@twitter.com

🎉 Major progress on data-bindings for thi.ng/wasm-api, a story in 4 pics:

1) Shared (WASM/JS/TS) type definitions, can also be JSON
2) Generated code
3) Generated code excerpt (mem-mapped typed accessors)
4) Example usage

🐦🔗: twitter.com/thing_umbrella/sta

रञ्जित (Ranjit Mathew)rmathew
2022-04-09
Nicolas IriarteNicolasIriarte
2019-10-05

Proyecto de tesis aceptado 🎉

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst