<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="/sheet.xsl"?><rss version="2.0"><channel><title>Hacker News</title><link>https://news.ycombinator.com/</link><description>Links for the intellectually curious, ranked by readers.</description><item><title>PGSimCity - How PostgreSQL Works</title><link>https://nikolays.github.io/PGSimCity/</link><pubDate>Mon, 27 Jul 2026 00:19:04 +0000</pubDate><comments>https://news.ycombinator.com/item?id=49063754</comments><description>&lt;a href="https://news.ycombinator.com/item?id=49063754"&gt;Comments&lt;/a&gt;</description></item><item><title>Show HN: Physically accurate black hole you can put in your room</title><link>https://blackhole.plav.in</link><pubDate>Thu, 23 Jul 2026 13:29:24 +0000</pubDate><comments>https://news.ycombinator.com/item?id=49021270</comments><description>&lt;a href="https://news.ycombinator.com/item?id=49021270"&gt;Comments&lt;/a&gt;</description></item><item><title>Decker, a platform that builds on the legacy of Hypercard and classic macOS</title><link>https://beyondloom.com/decker/</link><pubDate>Sun, 26 Jul 2026 18:23:06 +0000</pubDate><comments>https://news.ycombinator.com/item?id=49060856</comments><description>&lt;a href="https://news.ycombinator.com/item?id=49060856"&gt;Comments&lt;/a&gt;</description><ns0:encoded xmlns:ns0="http://purl.org/rss/1.0/modules/content/">&lt;body morss_own_score="1.348314606741573" morss_score="37.34349888242371"&gt;&lt;h1&gt;Decker&lt;/h1&gt;
&lt;p&gt;Decker is a multimedia platform for creating and sharing interactive documents, with sound, images, hypertext, and scripted behavior. You can try it in your web browser &lt;b&gt;&lt;a href="https://beyondloom.com/decker/tour.html"&gt;right now&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Decker builds on the legacy of &lt;a href="https://en.wikipedia.org/wiki/HyperCard"&gt;HyperCard&lt;/a&gt; and the visual aesthetic of classic MacOS. It retains the simplicity and ease of learning that HyperCard provided, while adding many subtle and overt quality-of-life improvements, like deep undo history, support for scroll wheels and touchscreens, more modern keyboard navigation, and bulk editing operations.&lt;/p&gt;
&lt;p&gt;Anyone can use Decker to create E-Zines, organize their notes, give presentations, build adventure games, or even just doodle some 1-bit pixel art. The holistic "ditherpunk" aesthetic is cozy, a bit nostalgic, and provides fun and distinctive creative constraints. As a prototyping tool, Decker encourages embracing a sketchy, imperfect approach. Finished decks can be saved as standalone &lt;fixed&gt;.html&lt;/fixed&gt; documents which self-execute in a web browser and can be shared anywhere you can host or embed a web page. Decker also runs natively on MacOS, Windows, BSD, and Linux.&lt;/p&gt;
&lt;p&gt;For more complex projects, Decker features a novel scripting language named &lt;i&gt;Lil&lt;/i&gt; which is strongly influenced by both &lt;a href="http://www.lua.org"&gt;Lua&lt;/a&gt;, an imperative language popular for embedding in tools and game engines, and &lt;a href="https://en.wikipedia.org/wiki/Q_%28programming_language_from_Kx_Systems%29"&gt;Q&lt;/a&gt;, a functional language in the APL family used with time-series databases. Lil is easy to learn and conventional enough not to ruffle any feathers for users with prior programming experience, but also includes pleasant surprises like implicit scalar-vector arithmetic and an integrated SQL-like query language. A few lines of Lil can go a long way.&lt;/p&gt;
&lt;p&gt;Decker provides a small collection of built-in interactive widgets for building interfaces, as well as a facility for &lt;a href="https://beyondloom.com/decker/decker.html#customwidgets"&gt;defining new ones&lt;/a&gt;. Custom widgets and their definitions can be copied and pasted using the system clipboard, which also makes it possible to share them anywhere you can share or store text. Every deck is a toolkit of reusable parts that can be harvested and repurposed for another project.&lt;/p&gt;
&lt;p&gt;Decker is command-line friendly: when built from source, it comes with &lt;a href="https://beyondloom.com/decker/lilt.html"&gt;Lilt&lt;/a&gt;, a standalone Lil interpreter which can (among other things) read, write, manipulate, and even execute Decker documents "headlessly". Lilt has even fewer dependencies than Decker itself, so it can also be compiled as a cross-platform &lt;a href="https://justine.lol/ape.html"&gt;APE executable&lt;/a&gt;, ready for writing run-anywhere shell scripts. Would you believe there's a Lil interpreter &lt;a href="https://beyondloom.com/blog/lila.html"&gt;that runs on POSIX AWK&lt;/a&gt;? Decks are stored in a line-oriented text format which interoperates well with existing source control tools like Git and SVN.&lt;/p&gt;
&lt;p&gt;Decker includes no advertising, telemetry, gamification, slop-generator integration, or other intrusions on user privacy and autonomy. If you like Decker, please share it with other people who might enjoy it. Build something that makes you happy.&lt;/p&gt;
&lt;h2&gt;Examples&lt;/h2&gt;
&lt;h2&gt;Libraries&lt;/h2&gt;
&lt;h2&gt;Documentation&lt;/h2&gt;
&lt;h2&gt;Additional Resources&lt;/h2&gt;
&lt;p&gt;Browsable source code and a bug-tracker are available on &lt;a href="https://github.com/JohnEarnest/Decker"&gt;GitHub&lt;/a&gt;. Decker is free and open-source, under a permissive &lt;a href="https://mit-license.org"&gt;MIT license&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Periodic binary release downloads for MacOS and Windows are available on &lt;a href="https://internet-janitor.itch.io/decker"&gt;Itch.io&lt;/a&gt;. The Itch page includes a &lt;a href="https://internet-janitor.itch.io/decker/community"&gt;community forum&lt;/a&gt; for discussing Decker and sharing projects made with Decker. We also hold Decker-themed &lt;a href="https://itch.io/t/4124409/the-decker-jam-directory"&gt;"Game Jams" every July and December&lt;/a&gt;; the next upcoming jam will be &lt;a href="https://itch.io/jam/decker-fantasy-camp-2026"&gt;Decker Fantasy Camp, July 2026.&lt;/a&gt;&lt;/p&gt;
&lt;a href="https://beyondloom.com/index.html"&gt;back&lt;/a&gt;
&lt;/body&gt;</ns0:encoded></item><item><title>French firefighters face 'pyrocumulonimbus' for first time</title><link>https://www.france24.com/en/live-news/20260726-french-firefighters-face-pyrocumulonimbus-for-first-time</link><pubDate>Sun, 26 Jul 2026 17:49:44 +0000</pubDate><comments>https://news.ycombinator.com/item?id=49060495</comments><description>&lt;a href="https://news.ycombinator.com/item?id=49060495"&gt;Comments&lt;/a&gt;</description><ns0:encoded xmlns:ns0="http://purl.org/rss/1.0/modules/content/">&lt;div class="t-content t-content--article" id="main-content" tabindex="-1" morss_own_score="4.064073226544623" morss_score="8.085349822289304"&gt;
&lt;div class="t-content__above-sidebar" morss_own_score="5.0" morss_score="14.0"&gt;
&lt;h1 class="t-content__title a-page-title" morss_own_score="8.0" morss_score="8.0"&gt;French firefighters face 'pyrocumulonimbus' for first time&lt;/h1&gt;
&lt;p class="t-content__chapo" morss_own_score="10.0" morss_score="10.0"&gt;
&lt;span&gt;Paris (France) (AFP) – &lt;/span&gt;                    The gigantic wildfire ravaging southwest France has created an extremely dangerous "pyrocumulonimbus" -- a phenomenon never before seen in the country -- the spokesman for the country's National Firefighters Federation of France (FNSPF) told AFP.                &lt;/p&gt;
&lt;/div&gt;
&lt;div class="t-content__with-sidebar" morss_own_score="3.0425531914893615" morss_score="6.542553191489361"&gt;
&lt;div class="t-content__beside-sidebar" data-article-content="" morss_own_score="5.0" morss_score="11.0"&gt;


&lt;p&gt;&lt;span&gt;Issued on: &lt;time&gt;26/07/2026 - 16:49&lt;/time&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;





    2 min    &lt;span&gt;Reading time&lt;/span&gt;
&lt;/div&gt;



&lt;span&gt;Share&lt;/span&gt;







&lt;div class="t-content__main-media" morss_own_score="4.0" morss_score="7.0"&gt;
&lt;figure class="m-item-image m-item-image--16x9 m-item-image--has-caption" morss_own_score="6.0" morss_score="9.0"&gt;

&lt;source type="image/webp"&gt;
&lt;img src="https://s.france24.com/media/display/28a20512-8901-11f1-af78-005056bfb2b6/w:1024/p:16x9/dafe7dea5fec7f3a48c4717459bcd02a6f29ce60.jpg"&gt;
&lt;/source&gt;
&lt;figcaption&gt;
                The main wildfire burning in France's southwest has created a 'fire cloud', which generates its own winds        © ROMAIN PERROCHEAU / AFP/File    &lt;/figcaption&gt; &lt;/figure&gt;
&lt;/div&gt;
&lt;div class="t-content__body u-clearfix" morss_own_score="6.0" morss_score="64.0"&gt;
&lt;p morss_own_score="7.0" morss_score="7.0"&gt;Such a formation, also called a cumulonimbus flammagenitus cloud, can be seen during volcanic eruptions -- or, as in this case, when a wildfire roasts the air near the ground, causing it to rise quickly. &lt;/p&gt;&lt;p&gt;The rising air cools and becomes a cloud, or fire cloud: a turbulent mass that can generate its own winds that worsen fires. If it becomes very large it can even generate lightning.&lt;/p&gt;&lt;p&gt;Hitherto, they have only really been seen in wildfire-prone Australia and North America. NASA calls them the "fire-breathing dragon of clouds".&lt;/p&gt;&lt;p&gt;What causes them?&lt;/p&gt;&lt;p&gt;FNSPF spokesman Lieutenant Colonel Eric Brocardi: &lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"The rise in ground temperature at the heart of the blaze is so extreme that the intense heat surges upward in a column, meeting cooler air masses at the top. This contact creates a pyrocumulonimbus -- or fire cloud -- though unfortunately one devoid of moisture. This smoke cloud generates its own weather system, causing anything in its path to spontaneously combust. &lt;/p&gt;&lt;p&gt;"Lightning forms within the cloud, striking the embers on the ground and further fuelling the fire ... It produces a low, rumbling sound. &lt;/p&gt;&lt;p&gt;"While this type of fire occurs regularly in Canada and Australia, it is unprecedented in France."&lt;/p&gt;&lt;p&gt;Can it be brought under control?&lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"We are dealing with a so-called 'convective' fire that creates its own winds -- winds that constantly shift direction, unlike a standard fire that spreads in a conical pattern. The result is that it spreads in every direction and develops multiple fire fronts, making the situation completely unpredictable. &lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"We don't know how the blaze will spread; the fire front is constantly shifting. We cannot fight it directly. It's a David-versus-Goliath scenario: the idea is that, at some point, we'll find a weak spot and strike there.&lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"Salvation will come either from the sky -- in the form of rain, though it would need to pour heavily for three days -- or by finding a way to steer the fire toward a place where it will die out on its own. The sea, for example."&lt;/p&gt;&lt;p&gt;Do the firefighters have any hope?&lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"We have reached a point of 'operational impossibility' that requires us to accept the need for strategic retreat -- to understand and acknowledge a natural force beyond our control. &lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"It calls for ... knowing what can be done and, above all, what cannot. The situation on the ground is defensive rather than offensive; it is a war-like scenario where we are under constant bombardment and must get everyone to safety. &lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"We realise we are facing a situation where we are powerless. Yet, that powerlessness leaves no room for despair. It is certain that all the efforts being made will yield results. It is out of the question for the firefighters to feel that their work on the ground is in vain.&lt;/p&gt;&lt;p morss_own_score="7.0" morss_score="7.0"&gt;"Every single action -- defending critical sites, rescuing animals -- breathes new life into their efforts, driven by their fierce determination. There is a support force ready to relieve them. &lt;/p&gt;&lt;p&gt;"However, not all firefighters from across France can simply converge here, because the risk exists everywhere. We have to hold the line."&lt;/p&gt;&lt;p&gt;(Interviewed by AFP journalist Juliette Collen)&lt;/p&gt;
&lt;p&gt;© 2026 AFP&lt;/p&gt; &lt;/div&gt;
&lt;/div&gt;


&lt;aside&gt;

&lt;p&gt;&lt;span&gt;Today's top stories&lt;/span&gt;&lt;/p&gt;

&lt;/aside&gt;



&lt;aside&gt;

&lt;p&gt;&lt;span&gt;Most read&lt;/span&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;


&lt;div&gt;1&lt;/div&gt;
&lt;a href="https://www.france24.com/en/europe/20260725-live-france-orders-evacuations-near-bordeaux-as-wildfires-sweep-through-southwest"&gt;
&lt;h2&gt;Macron says France will ‘rebuild' parts of country ravaged by wildfires&lt;/h2&gt;
&lt;/a&gt;


&lt;div&gt;As it happened&lt;/div&gt;
&lt;div&gt;

                                    Europe
                            &lt;/div&gt;




&lt;/li&gt;&lt;li&gt;


&lt;div&gt;2&lt;/div&gt;
&lt;a href="https://www.france24.com/en/europe/20260724-thousands-forced-to-flee-as-deadly-wildfires-rage-in-parts-of-france-italy-and-spain"&gt;
&lt;h2&gt;Macron mobilises French military as ‘unprecedented’ wildfire approaches Bordeaux&lt;/h2&gt;
&lt;/a&gt;


&lt;div&gt;As it happened&lt;/div&gt;
&lt;div&gt;

                                    Europe
                            &lt;/div&gt;




&lt;/li&gt;&lt;li&gt;


&lt;div&gt;5&lt;/div&gt;
&lt;a href="https://www.france24.com/en/middle-east/20260723-why-iran-targeting-kuwaits-desalination-plants"&gt;
&lt;h2&gt;Why Iran is targeting Kuwait's desalination plants as part of its war strategy&lt;/h2&gt;
&lt;/a&gt;


&lt;div&gt;Explainer&lt;/div&gt;
&lt;div&gt;

                                    Middle East
                            &lt;/div&gt;




&lt;/li&gt;&lt;/ol&gt;
&lt;/aside&gt;
&lt;/div&gt;
&lt;/div&gt;
</ns0:encoded></item><item><title>Scriptc by Vercel: TypeScript-to-Native compiler, no JavaScript engine in binary</title><link>https://github.com/vercel-labs/scriptc</link><pubDate>Sun, 26 Jul 2026 22:46:10 +0000</pubDate><comments>https://news.ycombinator.com/item?id=49063175</comments><description>&lt;a href="https://news.ycombinator.com/item?id=49063175"&gt;Comments&lt;/a&gt;</description><ns0:encoded xmlns:ns0="http://purl.org/rss/1.0/modules/content/">&lt;article class="markdown-body entry-content container-lg" itemprop="text" morss_own_score="9.910634495084897" morss_score="63.274783503970745"&gt;&lt;h1&gt;scriptc&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Zero-runtime TypeScript.&lt;/strong&gt; scriptc compiles ordinary TypeScript into small, fast native executables — no Node, no V8, no JavaScript engine in the binary.&lt;/p&gt;
&lt;pre&gt;$ &lt;span&gt;cat fib.ts&lt;/span&gt;
&lt;span&gt;function fib(n: number): number {&lt;/span&gt;
&lt;span&gt;  return n &amp;lt; 2 ? n : fib(n - 1) + fib(n - 2);&lt;/span&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;span&gt;console.log(fib(30));&lt;/span&gt;

$ &lt;span&gt;scriptc run fib.ts&lt;/span&gt;
&lt;span&gt;832040&lt;/span&gt;

$ &lt;span&gt;scriptc build fib.ts &lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt; ls -la fib&lt;/span&gt;
&lt;span&gt;-rwxr-xr-x  178K  fib        # a self-contained native binary, ~2ms startup&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;No changes to your code. No annotations, no dialect — the same TypeScript you run on Node, type-checked by the real TypeScript compiler and compiled to native. What compiles behaves byte-for-byte like Node.&lt;/p&gt;
&lt;h2&gt;Install&lt;/h2&gt;
&lt;pre&gt;$ &lt;span&gt;npm install -g scriptc&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Requires clang (preinstalled with Xcode Command Line Tools). macOS arm64 is the primary platform; Linux and Windows binaries build by cross-compilation, each verified by its own differential test lane.&lt;/p&gt;
&lt;h2&gt;The idea: staticness you can see&lt;/h2&gt;
&lt;p&gt;Most TypeScript is far more static than the ecosystem assumes. scriptc decides, construct by construct, what can compile to native code — and tells you:&lt;/p&gt;
&lt;pre&gt;$ &lt;span&gt;scriptc coverage app.ts&lt;/span&gt;

&lt;span&gt;  statements analyzed   4481&lt;/span&gt;
&lt;span&gt;  compile statically    4451  (99%)&lt;/span&gt;

&lt;span&gt;  blockers:&lt;/span&gt;
&lt;span&gt;      ×2  functions with optional parameters as values   SC1090&lt;/span&gt;
&lt;span&gt;      ×1  Promise.reject                                 SC2020&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Three tiers, always explicit:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Compiled statically&lt;/strong&gt; — native code, no engine. The default, and the only mode unless you opt out.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runs dynamically&lt;/strong&gt; (&lt;code&gt;--dynamic&lt;/code&gt;) — an embedded JavaScript engine (&lt;a href="https://github.com/quickjs-ng/quickjs"&gt;quickjs-ng&lt;/a&gt;, ~620KB) executes what can't be static: npm dependencies' shipped JS, &lt;code&gt;any&lt;/code&gt;-typed code. Every value crossing back into static code is validated at runtime — a lying type throws a catchable &lt;code&gt;TypeError&lt;/code&gt; instead of corrupting memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rejected&lt;/strong&gt; — everything else fails with a specific error code, a code frame, and usually a rewrite hint. Nothing is ever silently miscompiled.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;What compiles&lt;/h2&gt;
&lt;p&gt;The static surface covers the language and the standard library real programs use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The language&lt;/strong&gt; — classes with single inheritance and true dynamic dispatch (devirtualized when provably safe), closures with JS capture semantics, generics (monomorphized), discriminated unions as tagged values driven by TypeScript's own narrowing, &lt;code&gt;async&lt;/code&gt;/&lt;code&gt;await&lt;/code&gt; on stackful fibers with JS-exact scheduling, exceptions with &lt;code&gt;finally&lt;/code&gt;, destructuring, spread, optional/default/rest parameters, getters/setters, iterators over strings/arrays/Maps/Sets, template literals, regular expressions (the engine is the same ECMAScript-exact bytecode interpreter QuickJS uses, linked only into regex-using binaries).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The standard library&lt;/strong&gt; — strings with UTF-16-exact semantics, arrays/Maps/Sets with JS-exact ordering and identity, &lt;code&gt;JSON&lt;/code&gt; with runtime-validated casts, &lt;code&gt;Math&lt;/code&gt;, typed arrays and &lt;code&gt;Buffer&lt;/code&gt;, &lt;code&gt;Error&lt;/code&gt; hierarchies with typed &lt;code&gt;catch&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Node's API surface&lt;/strong&gt; — &lt;code&gt;fs&lt;/code&gt; (sync and promises), &lt;code&gt;path&lt;/code&gt; (byte-exact port), &lt;code&gt;process&lt;/code&gt;, &lt;code&gt;child_process&lt;/code&gt; with piped streams, &lt;code&gt;os&lt;/code&gt;, &lt;code&gt;crypto&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;/&lt;code&gt;URL&lt;/code&gt;, &lt;code&gt;zlib&lt;/code&gt;, timers and signal handlers on a dependency-free event loop — and the server stack: &lt;strong&gt;&lt;code&gt;net&lt;/code&gt;, &lt;code&gt;http&lt;/code&gt;, &lt;code&gt;https&lt;/code&gt;, &lt;code&gt;tls&lt;/code&gt;&lt;/strong&gt; (vendored mbedTLS), &lt;code&gt;dgram&lt;/code&gt;, &lt;code&gt;dns&lt;/code&gt;, &lt;code&gt;fs.watch&lt;/code&gt;, &lt;code&gt;readline&lt;/code&gt;. Real proxy servers compile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;/strong&gt; and the WHATWG web subset (streams, &lt;code&gt;Headers&lt;/code&gt;, &lt;code&gt;AbortSignal&lt;/code&gt;) over the same native net/TLS stack — redirects, gzip, &lt;code&gt;AbortSignal.timeout&lt;/code&gt;, Node-shaped error causes; no libcurl, no system HTTP dependency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;npm dependencies&lt;/strong&gt; (with &lt;code&gt;--dynamic&lt;/code&gt;) — packages resolve with Node's own algorithm, typecheck against their shipped &lt;code&gt;.d.ts&lt;/code&gt;, and their JS is embedded into the binary at build time. Binaries never read &lt;code&gt;node_modules&lt;/code&gt; at runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Programs typecheck against TypeScript's real &lt;code&gt;es2025&lt;/code&gt; lib (plus &lt;code&gt;@types/node&lt;/code&gt; when your project has it), and your &lt;code&gt;tsconfig.json&lt;/code&gt; governs checker strictness. Anything reached that has no lowering is a precise diagnostic, never a surprise.&lt;/p&gt;
&lt;h2&gt;Correctness&lt;/h2&gt;
&lt;p&gt;Two enforcement mechanisms run on every change:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Differential testing&lt;/strong&gt; — every corpus program (800+ tests) runs under Node &lt;em&gt;and&lt;/em&gt; as a native binary; stdout, stderr, and exit codes must match byte-for-byte. Number formatting is JS-exact (shortest-roundtrip, fuzz-verified against Node on a million doubles). Servers are tested with live client drivers against both implementations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Memory-safety lane&lt;/strong&gt; — the entire corpus re-runs under AddressSanitizer with a reference-count audit; leaks and use-after-free are build failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The deliberate divergences from Node (there are a few dozen, mostly around timing internals and error-object properties) are documented and numbered; nothing diverges silently.&lt;/p&gt;
&lt;h2&gt;Performance&lt;/h2&gt;
&lt;p&gt;Measured on Apple M-series against the same workloads in Node, Go, Rust, and Zig (all byte-identical output, verified):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;dimension&lt;/th&gt;
&lt;th&gt;scriptc&lt;/th&gt;
&lt;th&gt;context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;startup&lt;/td&gt;
&lt;td&gt;~2.4ms&lt;/td&gt;
&lt;td&gt;Node: ~47ms; on par with Zig, ahead of Go/Rust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;binary size&lt;/td&gt;
&lt;td&gt;170–200KB static, ~3MB with &lt;code&gt;--dynamic&lt;/code&gt; + embedded deps&lt;/td&gt;
&lt;td&gt;Go: ~2MB; Node SEA: 60–100MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;memory (RSS)&lt;/td&gt;
&lt;td&gt;1–4MB typical&lt;/td&gt;
&lt;td&gt;Node: 67–116MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;runtime&lt;/td&gt;
&lt;td&gt;JS-faithful f64 semantics; competitive with the systems languages on most workloads&lt;/td&gt;
&lt;td&gt;integer inference and ownership analysis are on the roadmap&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Escape hatches&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;comptime(() =&amp;gt; ...)&lt;/code&gt;&lt;/strong&gt; runs TypeScript at build time (in an isolated VM inside the compiler) and bakes the result into the binary as a literal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Native FFI (&lt;code&gt;--ffi&lt;/code&gt;)&lt;/strong&gt; binds signature-only TypeScript declarations to direct C ABI calls and links manifest-declared archives, objects, and system libraries. The boundary is explicit and length-delimited; see the &lt;a href="https://scriptc.dev/ffi"&gt;Native FFI guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--dynamic&lt;/code&gt;&lt;/strong&gt; embeds the engine for npm deps and &lt;code&gt;any&lt;/code&gt; code. &lt;code&gt;scriptc coverage --dynamic&lt;/code&gt; reports exactly which statements run where and what the remaining blockers are. Static stays the default: a binary never silently grows an engine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Checked casts&lt;/strong&gt; — &lt;code&gt;JSON.parse(...) as Config&lt;/code&gt; inserts a runtime validation that throws a catchable error naming the offending path (&lt;code&gt;expected number at $.port, got string&lt;/code&gt;). TypeScript's &lt;code&gt;as&lt;/code&gt; is a promise; scriptc verifies it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Architecture&lt;/h2&gt;



&lt;pre&gt;flowchart LR
    TS[TypeScript] --&amp;gt;|tsc: parse + typecheck| L[lowering]
    L --&amp;gt; IR[typed IR]
    IR --&amp;gt; C[C]
    C --&amp;gt;|clang| BIN[native executable]
&lt;/pre&gt;







 &lt;span&gt;Loading&lt;/span&gt;



&lt;ul&gt;
&lt;li&gt;&lt;code&gt;packages/compiler&lt;/code&gt; — frontend (tsc API → IR), the IR with validator/serializer, the LLVM and C backends. The IR is the only interface between the ends; LLVM is the default code generator (with a transparent fallback for programs outside its tier), and C is the reference backend forever (readable, source-line-annotated output via &lt;code&gt;--backend c&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;packages/runtime&lt;/code&gt; — the C runtime: refcounted values with a cycle collector, stackful fibers and the event loop (kqueue), the server stack, JS-exact number formatting. Feature units are link-gated: binaries pay only for what they use.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;packages/cli&lt;/code&gt; — &lt;code&gt;scriptc build | run | coverage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Development&lt;/h2&gt;
&lt;pre&gt;$ &lt;span&gt;pnpm install &lt;span&gt;&amp;amp;&amp;amp;&lt;/span&gt; pnpm build&lt;/span&gt;
$ &lt;span&gt;pnpm &lt;span&gt;test&lt;/span&gt;                      &lt;span&gt;&lt;span&gt;#&lt;/span&gt; differential corpus + diagnostics snapshots&lt;/span&gt;&lt;/span&gt;
$ &lt;span&gt;SCRIPTC_SAN=1 pnpm &lt;span&gt;test&lt;/span&gt;        &lt;span&gt;&lt;span&gt;#&lt;/span&gt; the same corpus under ASan + RC audit&lt;/span&gt;&lt;/span&gt;
$ &lt;span&gt;pnpm scriptc build x.ts --emit-ir   &lt;span&gt;&lt;span&gt;#&lt;/span&gt; keep .scriptc/x.c and x.ir.json&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Every feature lands with differential tests; both lanes green is the merge bar.&lt;/p&gt;
&lt;/article&gt;</ns0:encoded></item></channel></rss>