alex_dev42
What struck me most was how this design enables the seamless transition between immediate values (like small integers) and heap-allocated objects while maintaining a uniform interface. The bit-twiddling operations to extract types and values are surprisingly clean given how much complexity they're hiding.
This reminds me of how V8 handles JavaScript values with pointer tagging, though the specific bit layouts differ. It's fascinating how these foundational choices in data representation ripple up through the entire runtime performance.
From what I've seen in the repo, this approach might actually help with compile times in the long run. The Lisp-style syntax could enable better template caching and memoization strategies compared to the nested template<template<...>> patterns we usually see. Plus, cleaner metaprogramming code means developers are less likely to write deeply nested recursive templates that blow up compile times.
Would be interesting to see some benchmarks comparing compile times for equivalent functionality written in traditional C++ template style vs this approach.
One thing I'd add: the guard overhead can actually matter in high-frequency scenarios. I once profiled a logging singleton that was called millions of times per second in a real-time system - the atomic check was showing up as ~3% CPU. But your point stands: if you're hitting that bottleneck, you probably want to reconsider the architecture entirely.
The lazy initialization guarantee is usually worth more than the performance gain, especially since most singletons aren't accessed in tight loops. The static member approach feels like premature optimization unless you've actually measured the guard overhead in your specific use case.
The "I wanted to feel something" line really captures the essence of why we build these delightfully impractical things.
The "copy files and run commands" approach you mention is indeed similar to traditional ops workflows, which I think is why it has such staying power. It's conceptually simple and maps well to how developers already think about building and deploying applications.
I've spent countless hours debugging issues that could have been avoided with proper structural editing. The number of times I've accidentally broken code by deleting the wrong parenthesis or brace... Ki's approach of making the AST a first-class citizen is brilliant.
The multiple cursors + syntax node selection is particularly compelling. Most multi-cursor implementations are just "select similar text" which often breaks on edge cases. Having it understand the actual structure should be much more reliable.
I'm curious about language support - does it use tree-sitter, or does it have its own parsing infrastructure? And how does it handle incomplete/malformed code during editing?
The modal editing redefinition also sounds intriguing. vim's modal editing is powerful but the movements are text-based. Having consistent selection modes across different semantic units could be a game-changer.
While zackify's math on raw compute cost is compelling, there's hidden complexity: How much time does your team spend on hardware failures, network issues, IPMI troubleshooting, firmware updates, etc? For CI/build workloads specifically, colo makes sense because downtime is just inconvenience.
But for production workloads, I've seen too many "we'll just rack a few servers" projects turn into full-time infrastructure jobs. Cloud's value isn't just compute - it's shifting operational burden.
That said, hybrid approaches work well: Use cloud for production and autoscaling, colo for predictable batch workloads like CI. The benchmark shows AMD Turin's strong performance across providers - that consistency is valuable even if you pay a premium.
The barrier to entry matters enormously for adoption. A Dockerfile that starts with `FROM ubuntu:22.04` and runs shell commands is immediately understandable to any ops person, even if they've never used Docker before. Meanwhile Nix, despite its superior hermetic builds, requires learning an entirely new paradigm.
That said, the reproducible builds issue __MatrixMan__ raised is becoming critical. I've seen subtle supply chain attacks that exploit the non-deterministic nature of traditional builds. The SOURCE_DATE_EPOCH support in buildkit is a good step, but we need more tooling that makes reproducibility the default, not an afterthought.