My wishlist:
- Near-complete HTML 5 support
- Better yet, HTML 5 + CSS support
- (I cringe whenever I see in the TADS docs “supports HTML 4 tags”)
- Improved native math support
- I don’t want to call functions to use floating-point
- Language syntax modernization
- Chaining and destructuring, but also tried-and-true OOP features like public/protected/private access and namespaces
- Any language features that prevent shooting yourself in the foot
- I don’t like multiple inheritance. It’s a time-bomb in the code. The fact that adv3Lite works around it attests to the problem. I prefer single inheritance and mix-ins, which is generally safer and more intuitive to the coder
- Modern presentation features, like real menus, and hyperlinks that do more than submit interp commands or launch the browser
- In general, I would like to see interactive fiction that doesn’t have the user interface of a 1970s VT-100 terminal
- Up-to-date image/audio/video support
- Audio/video playback with real-time events reporting start/running/stopped, etc.
- For Cain and Cognomen, I had to resort to some real ugly hacks to get the music playback to work just as I wanted, such as storing the length of each song in the code
- Thread support is intriguing, but I confess, I’m unsure how it would be used. (Background I/O?)
- I could go on
Some of the above could conceivably be met with newer libraries or intrinsic extensions. Those are the kind of things that the community can provide to keep TADS rolling.
What’s more difficult is extending the language itself. I could see someone taking on interpreter improvements, but compiler improvements are a different beast. And, because TADS is a dynamic language, many of those changes have to be reflected in the virtual machine as well, with bytecode additions and the like, which could very well spill over to the debugger.
It’s a tall order!
Some history
A few years ago, I took a stab at coding a full JS port of TADS 3. My idea was to build a new interpreter that ran TADS natively in a browser.
I’m well aware of other approaches to running TADS in a browser. I hoped that an interp rewrite would open up some of the above, such as better HTML + CSS support. But, as I said, language improvements were still off the table, without changing (or rewriting!) the compiler.
To cut to the chase, I reached the point that the code could read a .t3 image file and start executing the setup code. Esoteric VM features (such as debugging opcodes) were missing. The intrinsics needed to run a basic game are far more work than you would think.
I also toyed with another idea: No more compilation. Make TADS a scripting language. Write a parser that builds the bytecode at startup, rather than first compile it down to disk. The script could be distributed in a standard ZIP file (.t3z?) that the JS could pull the source files from.
(If nothing else, this would reduce the edit-compile-debug cycle. If people still want to distribute compiled images, they can do that as a final step.)
And that’s where I set it aside. It was a valuable exercise, and I learned a great deal about the VM. But I reached a point where I didn’t merely want TADS native in the browser. I wanted a better language, and direct access to modern tech. That wasn’t going to happen without a lot more work.
I’ve got more to tell, but this is getting long-winded, so I’ll leave this here for now.