That's great ! I have been looking for such a quick online vim experience for
quite some time.
A month ago I did find what I consider to be even better : make of any textarea
on any page a neovim instance with the firenvim extension (thanks to which
I am writing this comment in neovim in my browser!)
It's not even a vim-like experience, it's literally your configured neovim in
the browser !
Somehow I haven't managed to get it to the front page (this is not my creation
but I am a big fan since I have been looking for this for so long)
I even get autocompletion and all coding niceties in the little code playgrounds that are all the rage
in nowadays tutorials
Wow I just looked into that project and it really seems to work great. I really struggled a lot when typing longer responses in my Browser when trying to input my vim commands, so hopefully that will help.
Love Firenvim. Although I think there are different usecases for a vim-in-a-website and something like firenvim (or emacs-anywhere[1], which is what I'm using nowadays, after I've crossed over to the evil side) - as you can use vim-in-a-website from another machine without any setup, like vscode.dev for vscode, for instance. Self-hosting something like this could mean you could add your dotfiles, or maybe even have the website be able to pull a .vimrc from a publicly available dotfile repository, that would be pretty neat.
If I recall (need to Google it but am out and about at the moment), Safari won’t evict if you’ve installed it as their version of a progressive web app (share button -> “add to Home Screen”).
(I say “their version” because they still lack a number of things most PWAs use, like more robust service workers for background operations, notification support, etc)
A few months ago, I decided to play around with IndexedDb (for the first time) and PWAs and created a Stable Diffusion web interface that stores data in your browser. [1]
I have thousand of images stored as base64 strings in Safari on iOS since the beginning of October and it’s all still there!
Granted… this is a web app installed as an “app” on my iPhone’s Home Screen. So, IndexedDb inside Safari itself may still behave as you say.
It was recently written up in PC World [2] as part of an article about a distributed cluster of Stable Diffusion instances [3].
Looks cool, if it wasn't for the SharedArrayBuffer usage I would use this one over the current one I used for my desktop environment in the browser. I have Vim on there if anyone is interested in checking out a different version.
That is very cool, nice to see vintage editors hosted in a modern environment.
What I'd really like to see return is an online version of EDIT.COM, and maybe also its host binary QBASIC.EXE, not just for the nostalgia but because it was a pretty decent editor for the time, it even supported editing binary files if you didn't have a hex editor to hand, though you had to use Alt+(numpad) for most characters.
Really cool! Excuse me for my naivete but is there a benefit to writing normal JS but then compiling it to wasm? Does that make it faster? Was kinda expecting C or some other language when viewing through the source on github.
It makes me sad every time I try a Vim with a non-zero 'scrolloff' setting. Since I started using Vim I have learned to use H and L efficiently when navigating, but non-zero 'scrolloff' changes where H and L move the cursor to - and somehow non-zero 'scrolloff' is now the default in Ubuntu if a user hasn't created a vimrc file (even an empty file will do).
Note that this seems to work much better in Chrome than in Firefox - when I press Ctrl in Firefox, it activates Visual Block mode (so e.g. Ctrl-D, Ctrl-U, Ctrl-O, Ctrl-I won't work).
Pretty cool. There's a lot of vim nuances to implement. Everyone is going to have their subset that doesn't work quite right. In my short experimenting with it <shift> in command mode moves the caret up a line which is incorrect.
IndexedDB can be purged at any time by the browsers. They all have different rates, but I believe Safari will dump a db if it needs space and that DB hasn't been touched for a week.
Never bothered to learn the other ones. All I do is insert, find, find/replace, start/end of line, save, don't save. Only for when I'm on a server via cli. On my local, I use VSCode, PHPStorm.
The editor should tell you. If you open vim without any configuration and without opening a file directly, it shows you a welcome screen saying “vim: vi (improved)”.
There's nothing here that says that the project in the article is faster than Vim, just that it runs in the browser. To answer your original question: VSCode's internals _already run_ in the browser, so compiling them to WASM for the purposes of portability is moot.
To answer the question that you implied ("why can't vscode be compiled to wasm for performance"): vscode is built at least in part on dynamic languages. There's no compiler for JavaScript (or Python, or Ruby) to WASM, you can only compile the interpreter for these languages to WASM and then run your code in the compiled interpreter. This would be slower than what exists today because it's not replacing the traditionally-slow bits with WASM, it's replacing the fast, native bits with WASM.
The reason there are no compilers for dynamic languages is the same reason you can't compile (the full, canonical) JavaScript/Python/etc. to native code: the dynamic nature of the language prevents the generation of efficient CPU instructions. You'd need to do one of a few things:
1. Rewrite the dynamic code to not use the features that do not compile well to native code. Then write a compiler to compile the efficient subset of your language to native code. This is hard and bad because why use a dynamic language in the first place? You can see examples of this in projects like AssemblyScript and LLJS (for Python, see RPython).
2. Compile everything you can to efficient native code, then make the dynamic bits use less efficient code that does work at runtime that other languages could do at compile time. This is AOT compilation, and building an AOT compiler is hard. Building an AOT compiler that works well for most code is extremely hard. Additionally, you couldn't do things like load dynamic code at runtime (e.g., plugins).
3. Write a compiler that interprets the dynamic code at runtime, and dynamically compiles that code to native code as it is able to identify bits that can be efficiently run on the CPU. This is JIT compilation, and building a JIT compiler is hard. Moreover, you can't do JIT compilation in WASM because it would require WASM to have an API for this, and that seems unlikely right now.
4. Just use a different, more efficient language.
So to answer your question, "why not compile vscode to wasm for performance improvements?" You could, but it wouldn't be faster. Or, you'd rewrite it in a different language, but then it wouldn't be vscode anymore.
That's all a bit beside the point. VSCode is written in TypeScript, and there's no easy way to compile TypeScript to Wasm as it is designed to rely on a full JavaScript runtime.
Your benchmarks are analogous to
Toyota on highway 0-60 8sec
Porche on highway 0-60 3sec
But
Tell me how they perform with load, bumpy terrain, tyre wear.
Just because something runs faster on WASM doesnt mean u have to use it, there are othet things to consider to see if its even worth it. Vscode is based on mono and is written on top of JS/TS. Why woukd you compile it to something and run it on top of WASM, rather than just running it using the native browser engine.
You can even use the VSCodeVim extension (minus neovim-powered features) inside it. You can turn on Settings sync and it will share as many extensions as it can with your Desktop setup, and also your theme and other stuff.
VSCode.dev has a really cool Theme Playground. For instance, if you were curious to see what my current "synthwave-inspired" theme that I like to use looks like (with a variety of different file types open): https://vscode.dev/theme/jaredkent.laserwave
The more interesting and generally most useful way to get to VSCode.dev is from GitHub or Azure Repos. Use the keyboard shortcut "." in a repo file listing to open that Repo on the web in VSCode.dev (or GitHub uses GitHub.dev but it is the same VS Code tech).
Point 3 I don’t quite understand though. Last time I was using Windows, several years ago, I was perfectly able to run gVim on it. I can only imagine that with the subsystem for Linux and other things that have been added since then, surely it has only become easier to run Vim.
Last time I was actively using Windows was in the late WinXP / early Win7 era. But I don’t see why Win 10 / 11 would make running Vim difficult.
ChatGPT is generative word salad with high accuracy. Your previous comment was somewhat doom and gloom without providing interesting content for discussion — like the conversation, output, and a running example as a peer mentioned. There wasn’t much interesting to discuss which hadn’t been said about chatgpt already.
Fwiw, I think it’s a force multiplier, not a replacement. It requires skill to determine the quality of the output, can raise the bar of inexperienced developers by producing output more quickly and accurately than they could, empowers experienced developers by generating boilerplate faster than they can, and can improve learning by providing examples for specific use cases.
But when it’s wrong, it has no idea. It often answers riddles with intuitive but wrong answers. It provides code that doesn’t compile. Explains answers with logic that is entirely wrong. Push it and you’ll see.
It’s impressive but not apocalyptic. See another highly ranked post on the idea of “AGI hard” if you think I’m moving goalposts.
A month ago I did find what I consider to be even better : make of any textarea on any page a neovim instance with the firenvim extension (thanks to which I am writing this comment in neovim in my browser!)
It's not even a vim-like experience, it's literally your configured neovim in the browser !
Somehow I haven't managed to get it to the front page (this is not my creation but I am a big fan since I have been looking for this for so long)
I even get autocompletion and all coding niceties in the little code playgrounds that are all the rage in nowadays tutorials
https://github.com/glacambre/firenvim
https://addons.mozilla.org/en-US/firefox/addon/firenvim/