![]() |
|
![]() |
| Imagine if every human had the resource security to do this for a good portion of their lives. Star Trek was fiction but we could have that if a few of us humans weren’t so greedy! |
![]() |
| It's happened in the last couple of months, a clear uptick in aggressive comments. I'd hazard a guess at people using HN as an outlet for feeling angry and helpless about the US political situation. |
![]() |
| The amount of “why would somebody waste their time with this” comments is pretty surprising.
This guy is a legend now. Every developer slack channel at my company is buzzing about it |
![]() |
| A WASM runtime in TypeScript types is impressive in its own right, but I think I can dimly see how it could work with a lot of effort. https://github.com/MichiganTypeScript/typescript-types-only-...
What I don't understand is how this thing does keyboard input. At 3:42, the video simply says, "And, yes, there's a way to do keyboard input," without elaborating on how. What sorcery is that? There must be something outside the type system translating keyboard input into TypeScript types…?? |
![]() |
| If I heard him correctly he stated that it takes A LOT to just render a single frame. It's not playable. It can run DOOM, but you can't actually play it. |
![]() |
| Or more specifically, everything that is Turing complete can run DOOM, but most languages are only Turing complete under certain assumptions which are not met in practice |
![]() |
| > not everything that is Turing complete can run DOOM
Beware with such blanket statements, you might inspire someone to do 18-hour days for a year to prove you wrong. |
![]() |
| At this point the easiest way to know if a system is Turing complete is to check if someone has ported DOOM to it haha
Very impressive! |
![]() |
| Not only is Dimitri an amazing engineer - he's also great at building community and event/video production. Michigan Typescript meetups and videos have a level of polish that goes over and above |
![]() |
| You have coding skills. Some marketing and video production skills. Self discipline and persistence. The time to spend 18hr days on a project. Why look for employment? Start your own business. |
![]() |
| This shouldn’t be possible.. Typescript devs have lost their collective minds and I’m totally here for it.
Edit : TS not front end |
![]() |
| I didn't ask them outright, but I sorta think the TypeScript team might agree with you on this point! haha. At least we can all agree it's not an intended use-case, to play Doom. |
![]() |
| Well we haven't implemented a web browser capable of running javascript in the typescript type system yet.
Quick, someone tell this author it's not possible. |
![]() |
| It looks like they built a WASM runtime in the TS type system. Implement some more OS calls and you should be able to get a browser running. And then WASM on WASM on TS types. Lol |
![]() |
| no audio - correct. technically, in a certain sense, the first frame will contain only one sample of audio, and I did consider that, but a single impulse is the definition of "juice wasn't worth the squeeze", haha.
re the .WAD - the types-only-wasm-engine doesn't know anything at all about Doom (it only knows about what to do with WebAssembly) so actually the .wad is embedded in the WebAssembly exactly like you see in any regular WebAssembly Doom project (e.g. https://diekmann.github.io/wasm-fizzbuzz/doom). There's more to say about what "the WAD" means in this case, because it's a very minimal WAD - but it's all open source and I'll be explaining that in great depth soon! |
![]() |
| Can someone help direct me toward an understanding of what it means for something to be "run in/by TypeScript types"?
A short explanation or link to a resource would really be helpful. :) |
![]() |
| Hats off to the creator big way.
Really amazing stuff, and impressive dedication. To the author: if you would like to work on challenges of similar caliber, ping me (I'm Syrus, from Wasmer) |
![]() |
| Ah nice! Well, hats off this is really impressive. As other commenters mentioned the extent to which it's documented and the restricted scope probably helped. |
![]() |
| But that's all CPU -- he doesn't have to emulate the rest of the computer (video card, IO systems, etc). You provide WASM with your own interface to the outside world. |
![]() |
| I work with a couple type-dense libraries: Elysia and Kysely. Kysely holds up remarkably well. Elysia... Well...
Elysia is a backend framework like express. As you construct your routes — annotating the input structure and return types, it constructs a HUGE MEGA TYPE, that you can then use with a thin query client: https://elysiajs.com/eden/overview If I recall, the query client uses proxies. I did something similar before, this one is a much smaller codebase: But as you can imagine, typescript does begin to lag when your routes enter the hundreds |
![]() |
| The next challenge could be making TypeScript types run an LLM. I wonder how their performance would compare to that of Excel sheets. |
![]() |
| I can’t agree enough. It’s sort of like those massive paintings recreated in CSS. They are a neat achievement, yet sort of reveals a vast emptiness that exists within the author. |
![]() |
| I hope the TypeScript team at Microsoft sees this and goes: "What have we done! We have created a monster... we need to tame and simplify this beast. Or at the very least stop adding more features." |
![]() |
| Honestly every time I worked on TypeScript codebase and the type definition "any" started popping out more and more often, I felt I'm starring into the abyss. |
![]() |
| Sure, there's many other ways to type it, but none adds any kind of additional safety or strictness over Record which was my point that `any` is the correct type in many cases, except when it widens a type.
But in my case it's not widening anything, in Record, B can already be `any`thing. People tend to see it as an unsafe escape hatch (which is how it is abused), but it's just a set of all possible types. |
![]() |
| hi! author here! this doesn't rain on my parade at all! actually I really appreciate what you're saying, so thanks for saying it!
until yesterday, I did this whole thing in isolation (aside from a few of my close friends in a then-private-now-public discord channel patting me on the back every few days when I'd get stuck with no idea how to get unstuck). I realize that what I'm going to say next will be alarming to some people, but as nice as it is to hear all these wonderful just super heartwarming things from people over the last day (thank you!!) I have a kind of brain that would have been roughly equally satisfied if after completing it, I closed VS Code and never mentioned it to anyone again. For a different example, I used to spend most of my time making music and being in many bands and whatnot and I have, not exaggerating, like 200 hours of unreleased finished music - some even with album art (back when we had CDs haha). Probably 50 hours no one but me has ever heard and 50 hours only my wife has heard in the background while I worked on it and the rest just close friends. But when my close friends urge me to just release it... I just.... why? I do really really love to share, and I have (all the MiTS music https://soundcloud.com/michigan-typescript is open source with the BitWig sets available https://github.com/michigantypescript/music), but it honestly doesn't bring me a lot of satisfaction. Creating though... just simply creating and learning how to do new things brings me just a tsunami of satisfaction. I don't know how else to explain it. I'm just wired this way. I can't help it. It's like breathing. If I am lucky enough to grow old, I'm gonna be the grandpa in his basement with all the oscilloscopes trying to fix a Ham radio, even though I have no purpose for fixing it. I can tell you already. That said, I'm relived to say that when it comes to this Doom project I learned SO SO SO many things that have been VERY VERY directly applicable to my career as a software engineer. In that way, ALONE, it was worth the effort. It's like multiple times per week that I'm able to help or contribute to something at my company with my team that was a skill I picked up on this project. I've contributed quite a lot over my career to FOSS and I can tell you that many of the most useful contributions really started in really strange places with strange motivations. What's beautiful is that none of that matters to the user - they see functions and functionality and never know what's behind the curtain for why someone was motivated enough to really make it happen. So to cap it off, I'd say, that actually what you're seeing in this Doom project is literally the best possible path to get what you say you want. There's nothing commercial about this, but if it gets people excited and gives people energy and capabilities to contribute to FOSS (even if it's just me, the author) - then now yer' cookin with gas. |
![]() |
| There is more to hiring than technical competence. I'm not seeing any red flags in his videos, but just saying, ability to work in a team is not obvious from such posts. |
![]() |
| By now there is more than one story how some open source developer wasn't hired because their skills with the project they created was not sufficient for the job. |
![]() |
| Did he tell the interviewer that? Or did he just expect him to have known?
I have had maybe two interviewers ever mention anything on my GitHub, which I usually include on my application/resume. |
![]() |
| The problem is that eventually they outsource key parts of the codebase to a cheap consulting agency where all this reasoning goes to waste anyway. |
![]() |
| I guess you have to ask yourself, what truely gives value in life? The answer is that value is subjective, and this person is wasting his time no less or more than you or I. |
![]() |
| Typescript is for me one of the most overengineered programming languages. Why did JS not follow the way python and php did? Integrate types in the main language but make it optional. |
![]() |
| When typescript came out, you were seen as weird for wanting such a thing. I once had a VP of engineering dm me to tell me to stop discussing typescript in the company dev channel around 2015 (if you're reading this, that was a dick move). Nowadays you're kinda odd man out if you don't want types. So the idea of adding types even optional ones probably wouldn't have gone down well. The closest we ever came was es4 which of course never landed: https://evertpot.com/ecmascript-4-the-missing-version/
|
![]() |
| To be fair, this is graphical, but it's not real-time, not performant, and while it technically takes input, it'll be a while before you see it reflected in the output. |
This is some serious dedication for what at first blush may sound to many to be a completely unserious, or even useless, achievement. But I say to those people: a DOOM proof is just as worthy of praise as any other academic mathematical proof, and has the advantage of being verifiable by laymen.
Congrats on this amazing achievement.