computatrum 9 hours ago

It not only written in Rust, but they avoid basically any dependencies to third-party crates (beside the obligatory windows-sys/libc), optimizing probably for binary size. To achieve this, they seem to re-implement considerable parts of the rust ecosystem (own TUI library implementation, own unicode handling, own arena implementation, ...).

  • porcoda 6 hours ago

    I’m guessing this isn’t just to optimize for binary size. If you have the resources to avoid third party dependencies you eliminate the burden of having to build a trust case for the third party supply chain. That is the number one reason we sometimes reimplement things instead of using third party packages where I work: the risk from dependencies along with the effort required to establish that we can trust them is sometimes (not always) greater than just replacing it in house.

    • criddell 5 hours ago

      Microsoft has recently said AI writes 30% of their code. Reimplementing things isn’t as expensive as it once was.

      • ItsHarper 5 hours ago

        That was absolutely not what was said. The way it was phrased indicates it only applies to a subset of projects, plus there were weasel words to indicate that maybe it's not actually quite that high, plus AI was not explicitly mentioned and it easily could include a lot of traditionally-generated code.

      • al_borland 4 hours ago

        I ran across the dashboard where I work that is tracking Copilot usage. According to the dashboard 22% of suggestions are accepted. I assume Microsoft is quoting a similar stat. This is VERY misleading, as more often than not, the suggestion is trash, but has 1 thing in it I want for reference to look up something that might actually help me. I accept the suggestion, which increases that stat, but AI didn’t ultimately write the resulting code that went to production.

      • mplanchard 3 hours ago

        I took a glance around this project, and it seems to be really high quality Rust. I would be shocked if it was AI-generated to any significant degree, given my own less-than-impressive results trying to get LLMs to write Rust.

        Edit: I see the author isn’t very familiar with Rust, which makes it even more impressive.

      • dymk 5 hours ago

        Maybe a tenth the total cost is getting the code into the terminal, the other nine tenths is maintaining way more code than you'd otherwise have to.

  • 01HNNWZ0MV43FF 8 hours ago

    I'd say the windows crate is even technically first-party since the OS vendor publishes it

arghwhat 10 hours ago

Yay for finally having a default text editor that works over ssh. Managing windows servers over ssh is a bit of a pain without.

They could just have packaged nano, but oh well.

  • red_admiral 8 hours ago

    I was about to say, I use nano regularly, both locally and over ssh (to machines which have it installed, which is pretty much all of them). This looks nice and I love old-style console UIs, I fondly remember EDIT.COM and NC.EXE, and still use `mc` regularly with one pane pointing at a sshfs.

    Ages ago I had to maintain a .BAT file, editing in EDIT.COM, that threw stuff at EDLIN.COM (roughly MS version of `ed`). Those where the ... not-so-good old days.

    These days, with windows versions of `nano` and `busybox` you have some power tools without a full linux install.

  • p4bl0 7 hours ago

    I wholeheartedly agreee. Nano is quite awesome, it is battle-tested and already has more features than needed for a basic text editor. Actually, Nano is too often frowned upon as too-basic, but is actually has a few advanced features that basic editors do not have (e.g., keyboard macros). I'd argue that Nano is simple rather than basic :).

    I tried discussing it here a few months ago but it did not took off: https://news.ycombinator.com/item?id=41289773

  • zozbot234 7 hours ago

    This could be a great text-mode IDE with the addition of some LSP, tree-sitter and DAP support. There is already an open issue about possibly adding support for tree-sitter grammars for fast syntax highlighting, but they do mention that this requires some sort of optional plugin system to avoid bloating up the codebase severely (for example, the tree-sitter grammars within the Helix editor take up hundreds of megabytes, which is obviously unacceptable here).

    • arghwhat 4 hours ago

      That just feels like scope creep. Notepad would also be neat with some better keybinding support, plugins, lsp, ... - but then it wouldn't be notepad, and theres countless not notepads out there.

      Tools like nano (well, pico) exist to provide a reliable and always available minimum feature set. If you expand it, then you end up with something that is neither the minimum nor capable enough to sensibly compete with fully fledged alternatives.

  • 6c696e7578 7 hours ago

    I am truly behind the times. I didn't know you can ssh into a Windows system.

    • emmelaich 2 hours ago

      You can also run a ssh server in WSL2. You'll need to proxy connections to it or run a vpn though to have it visible from the outside. I use tailscale.

    • e12e 7 hours ago

      Since windows 10/windows server 2019 afaik.

      https://news.ycombinator.com/item?id=15904265

      • 6c696e7578 5 hours ago

        Thanks! It always bugged me that Windows didn't have a sshd, since it's so popular outside of Windows. I thought the reason for it not being added would be admitting a failure somewhere - RDP not winning or something. Seemed odd to prevent a way into Windows Server.

        • JdeBP an hour ago

          No. It was a fundamental conceptual difference in the operating system. After Xenix, Microsoft did not use a terminal paradigm in its operating systems. They all had a "console" paradigm, where instead directly attached VDUs, keyboards, and mice had explicit API support as first-class devices. Because they targetted "personal computers" where one knew from the firmware up that the machine had a VDU, a keyboard, and (possibly) a mouse.

          * https://jdebp.uk/FGA/tui-console-and-terminal-paradigms.html

          For a long time, so long that I had a widely used 2 decades old Frequently Given Answer about it, Windows NT had no way to capture console I/O, no way of waiting on consoles for buffer changes and to inject back-end input events. No way to do what a SSH server would need to do in order to capture and send/receive that I/O over a network.

          Then along came Windows Terminal, and I finally got to change the answer in 2018.

          * https://jdebp.uk/FGA/capture-console-win32.html

  • yjftsjthsd-h 8 hours ago

    Ah, that makes sense then; I was really confused at first because I couldn't figure out why Windows would want a built-in text-mode editor. I suppose if folks are seriously using SSH to access Windows machines ... then I have other questions about why not RDP, but if that's a real thing people are doing then adding a built-in editor for them makes sense.

  • 90s_dev 9 hours ago
    • bpshaver 8 hours ago
      • jftuga 4 hours ago

        Micro is nice because it is a single-file, stand-alone executable that has mouse support, macro record/playback and syntax highlighting. (I haven't checked Nano recently). It is great for making quick edits to json configs, shell scripts, python scripts, etc. Syntax highlighting and line numbering are key. If I need to make a really quick edit, it is much faster to use this than waiting for VS Code or PyCharm to load. You also stay focused. By this I mean, your eyes don't leave the terminal window that you are currently working in. This allows me to more quickly complete the task at hand.

  • TZubiri 5 hours ago

    It's such a simple program that it's better to roll a proprietary program that is well integrated with windows

    You can use nano over wsl if you want

    • arghwhat 4 hours ago

      > You can use nano over wsl if you want

      No, not when ssh'ing to a server to manage it. Pulling in a Linux VM to get a simple text editor also makes no sense.

      There is also nothing to integrate - it's a basic text editor for a terminal with no fancy features. It either edits text or it doesn't.

      • TZubiri 25 minutes ago

        you gotta make sure that hotkeys get passed in every keyboard configuration. Ctrl, CTRL Shift, Ctrl Caps, Alt, how do tabs work? Etc..

        That something looks simple but is actually difficult is an error we all make

  • lysace 9 hours ago

    Now that they have a text editor that can be used in a terminal:

    Calling it: 2025 will be the year of Windows on the server. /s

    • dijit 8 hours ago

      Aside from Windows being... "windows" (IE; graphical) and the whole "we will do our own paradigm for nearly everything including file paths (UUNC included) and encoding..." Windows is actually pretty stellar if you're writing high performance software.

      You can go really far with IOCP and it's so nice to write compared to the contemporary kqueue (BSD) or epoll. I will admit to not trying IO_Uring myself though.

      Also the Windows system probes predate any kind of bpf and are easier to use than dtrace.

      This is the maximum amount of love I will ever send in Windows' direction though. Everything else is ball-busting.

    • toast0 7 hours ago

      It's not my idea of a good time, but Windows pioneered some stuff that's really handy for servers.

      Receive side scaling[1] is super handy at high volume, and it came from Windows. And Windows has better apis for it than I saw in FreeBSD or Linux when I needed it (I didn't look too closely at Linux though, so maybe it was there).

      [1] https://learn.microsoft.com/en-us/windows-hardware/drivers/n...

    • TiredOfLife 6 hours ago

      There are more windows servers than linux desktops

      • arghwhat 4 hours ago

        I'm actually not sure, but not because I believe there are many of the latter.

      • Y_Y 5 hours ago

        There are more floating turds than perfect pearls.

        • lysace 4 hours ago

          This is quite plausible.

massysett 8 hours ago

Nitpick - this is a text user oriented (TUI) or a screen editor, not a CLI editor. A CLI editor is ed(1), or ex(1), or EDLIN for MS-DOS lineage.

dbuxton 9 hours ago

I can't wait for the Rust port of QBasic Gorillas

  • red_admiral 8 hours ago

    This is a denial-of-service attack on my productivity :)

    I fondly remember the times of editing the explosion radius to "tactical nuclear banana".

90s_dev 9 hours ago

Interesting how we always go in circles.

edit.cmd was one of the first programs I ever used.

Now it's back rewritten as a Windows 10+ program in Rust?

Yet it looks and works just the same as 30 years ago!

lhecker 6 hours ago

Hey all! I made this! I really hope you like it and if you don't, please open an issue: https://github.com/microsoft/edit

To respond to some of the questions or those parts I personally find interesting:

The custom TUI library is so that I can write a plugin model around a C ABI. Existing TUI frameworks that I found and were popular usually didn't map well to plain C. Others were just too large. The arena allocator exists primarily because building trees in Rust is quite annoying otherwise. It doesn't use bumpalo, because I took quite the liking to "scratch arenas" (https://nullprogram.com/blog/2023/09/27/) and it's really not that difficult to write such an allocator.

Regarding the choice of Rust, I actually wrote the prototype in C, C++, Zig, and Rust! Out of these 4 I personally liked Zig the most, followed by C, Rust, and C++ in that order. Since Zig is not internally supported at Microsoft just yet (chain of trust, etc.), I continued writing it in C, but after a while I became quite annoyed by the lack of features that I came to like about Zig. So, I ported it to Rust over a few days, as it is internally supported and really not all that bad either. The reason I didn't like Rust so much is because of the rather weak allocator support and how difficult building trees was. I also found the lack of cursors for linked lists in stable Rust rather irritating if I'm honest. But I would say that I enjoyed it overall.

We decided against nano, kilo, micro, yori, and others for various reasons. What we wanted was a small binary so we can ship it with all variants of Windows without extra justifications for the added binary size. It also needed to have decent Unicode support. It should've also been one built around VT output as opposed to Console APIs to allow for seamless integration with SSH. Lastly, first class support for Windows was obviously also quite important. I think out of the listed editors, micro was probably the one we wanted to use the most, but... it's just too large. I proposed building our own editor and while it took me roughly twice as long as I had planned, it was still only about 4 months (and a bit for prototyping last year).

As GuinansEyebrows put it, it's definitely quite a bit of "NIH" in the project, but I also spent all of my weekends on it and I think all of Christmas, simply because I had fun working on it. So, why not have fun learning something new, writing most things myself? I definitely learned tons working on this, which I can now use in other projects as well.

If you have any questions, let me know!

  • anacrolix 29 minutes ago

    The quirkiness of Zig is real. I'd love for Zig to win out but it's just too weird, and it's not progressing in a consistent direction. I can appreciate you falling back to Rust.

  • steveklabnik 5 hours ago

    I’d love to hear about the use of nightly features. I haven’t had time to dig into the usage, but that was something I was surprised by!

    • lhecker 4 hours ago

      Up until around 2 months ago the project actually built with stable Rust. But as I had to get the project ready for release it became a recurring annoyance to write shims for things I needed (e.g. `maybe_uninit_fill` to conveniently fill the return value of my arena allocator). My breaking point was the aforementioned `LinkedList` API and its lack of cursors in stable Rust. I know it's silly, but this, combined with the time pressure, and combined with the lack of `allocator_api` in stable, just kind of broke me. I deleted all my shims the same day (or sometime around it at least), switched to nightly Rust and called it a day.

      It definitely helped me with my development speed, because I had a much larger breadth of APIs available to me all at once. Now that the project is released, I'll probably stay with the nightly version for another few months until after `let_chains` is out in stable, because I genuinely love that quality-of-life feature so much and just don't want to live without it anymore. Afterward, I'll make sure it builds in stable Rust. There's not really any genuine reason it needs nightly, except for... time.

      Apropos custom helpers, I think it may be worth optimizing `Vec::splice`. I wrote myself a custom splice function to reduce the binary size: https://github.com/microsoft/edit/blob/e8d40f6e7a95a6e19765f...

      The differences can be quite significant: https://godbolt.org/z/GeoEnf5M7

  • 90s_dev 5 hours ago

    1. What do you like about Zig more than Rust?

    2. How did you ensure your Zig/C memory was freed properly?

    3. What do you not like about Rust?

    • lhecker 4 hours ago

      > What do you like about Zig more than Rust?

      It's been quite a while now, but:

      - Great allocator support

      - Comptime is better than macros

      - Better interop with C

      - In the context of the editor, raw byte slices work way better than validated strings (i.e. `str` in Rust) even for things I know are valid UTF8

      - Constructing structs with .{} is neat

      - Try/catch is kind of neat (try blocks in Rust will make this roughly equivalent I think, but that's unstable so it doesn't count)

      - Despite being less complete, somehow the utility functions in Zig just "clicked" better with me - it somehow just felt nice reading the code

      There's probably more. But overall, Zig feels like a good fit for writing low-level code, which is something I personally simply enjoy. Rust sometimes feels like the opposite, particularly due to the lack of allocators in most of its types. And because of the many barriers in place to write performant code safely. Example: The `Read` trait doesn't work on `MaybeUninit<u8>` yet and some people online suggest to just zero-init the read buffer because the cost is lower than the syscall. Well, they aren't entirely wrong, yet this isn't an attitude I often encounter in the Zig area.

      > How did you ensure your Zig/C memory was freed properly?

      Most allocations happened either in the text buffer (= one huge linear allocator) or in arenas (also linear allocators) so freeing was a matter of resetting the allocator in a few strategical places (i.e. once per render frame). This is actually very similar to the current Rust code which performs no heap allocations in a steady state either. Even though my Zig/C code had bugs, I don't remember having memory issues in particular.

      > What do you not like about Rust?

      I don't yet understand the value of forbidding multiple mutable aliases, particularly at a compiler level. My understanding was that the difference is only a few percent in benchmarks. Is that correct? There are huge risks you run into when writing unsafe Rust: If you accidentally create aliasing mutable pointers, you can break your code quite badly. I thought the language's goal is to be safe. Is the assumption that no one should need to write unsafe code outside of the stdlib and a few others? I understand if that's the case, but then the language isn't a perfect fit for me, because I like writing performant code and that often requires writing unsafe code, yet I don't want to write actual literal unsafe code. If what I said is correct, I think I'd personally rather have an unsafe attribute to mark certain references as `noalias` explicitly.

      Another thing is the difficulty of using uninitialized data in Rust. I do understand that this involves an attribute in clang which can then perform quite drastic optimizations based on it, but this makes my life as a programmer kind of difficult at times. When it comes to `MaybeUninit`, or the previous `mem::uninit()`, I feel like the complexity of compiler engineering is leaking into the programming language itself and I'd like to be shielded from that if possible. At the end of the day, what I'd love to do is declare an array in Rust, assign it no value, `read()` into it, and magically reading from said array is safe. That's roughly how it works in C, and I know that it's also UB there if you do it wrong, but one thing is different: It doesn't really ever occupy my mind as a problem. In Rust it does.

      Also, as I mentioned, `split_off` and `remove` from `LinkedList` use numeric indices and are O(n), right? `linked_list_cursors` is still marked as unstable. That's kind of irritating if I'm honest, even if it's kind of silly to complain about this in particular.

      In all fairness, what bothers me the most when it comes to Zig is that the language itself often feels like it's being obtuse for no reason. Loops for instance read vastly different to most other modern languages and it's unclear to me why that's useful. Files-as-structs is also quite confusing. I'm not a big fan of this "quirkiness" and I'd rather use a language that's more similar to the average.

      At the end of the day, both Zig and Rust do a fine job in their own right.

  • avestura 6 hours ago

    It was very interesting to me that you liked Zig the most. Thank you for making this!

  • karunamurti 4 hours ago

    Why not webassembly ABI?

    • lhecker 2 hours ago

      I'm not familiar with that, so I can't say. If you have any links on that topic, I'd appreciate it.

      Generally speaking, the requirement on my end is that whatever we use is as minimal as it gets: Minimal binary size overhead and minimal performance overhead. It also needs to be cross-platform of course. This for instance precludes the widely used WinRT ABI that's being used nowadays on Windows.

      • karunamurti 7 minutes ago

        Maybe something like https://www.codecentric.de/en/knowledge-hub/blog/plug-in-arc... ?

        Webassembly is the binary spec for the web. But now everyone is using that because it's portable and lightweight.

        The idea is you can create plugin using any language that compiles into webassembly. C, Rust, Pascal, Go, C++. Compile once and it should work in Windows, Linux and Mac. No need to compile to multiple architecture.

        Performance should be great near native, but I guess there's going to be a problem with the added webassembly runtime size. Here is a runtime with estimated sizes: https://github.com/bytecodealliance/wasm-micro-runtime

        And it's sandboxed too, so should be secure.

  • qingcharles 4 hours ago

    Why Rust over a compiled .NET lang? (e.g. C#)

    • lhecker 2 hours ago

      Pretty much exclusively binary size. Even with AOT C# is still too large. Otherwise, I wouldn't have minded using it. I believe SIMD is a requirement for writing a performant editor, but outside of that, it really doesn't need to be a language like C or Rust.

trinix912 9 hours ago

I wonder what prevented them from porting the ms-dos EDIT.COM to 64bit Windows back then. There's still EDLIN.COM in the 32bit version.

  • tadfisher 9 hours ago

    They canceled the 64-bit port of NTVDM (virtual DOS machine), which is what handles all those INT 21h syscalls from DOS applications. Without that, there's honestly not much to port, and it's easier to just make a new NT-native CLI app.

    • 90s_dev 8 hours ago

      Did they cancel it because dosbox exists? If so, that's smart.

      • kmeisthax 8 hours ago

        Most likely because Microsoft didn't consider it a valuable use of engineering time in general.

        AMD's 64-bit extensions explicitly forbade dropping to 16-bit code. Once you enter 64-bit mode you lose access to all the modes which NTVDM needs to run MS-DOS or 3.x apps.

        AFAIK the virtualization extensions added in 64-bit (known as VT-x etc) do allow 16-bit code, but that would require rebuilding NTVDM as a Hyper-V client (ala WSL2) instead of using 32-bit protected mode as a way to virtualize 16-bit code. However, these extensions didn't exist until way later and they didn't get support for booting 16-bit guests until later than that.

        You could software emulate x86 to do NTVDM stuff. In fact, there's a FOSS program that does this, called WineVDM[0]. The MIPS/Alpha/PPC ports of NT used software emulation in NTVDM, so it is feasible.

        [0] https://github.com/otya128/winevdm

        Interestingly, they also recommend using DOSBox for DOS apps.

        • zozbot234 7 hours ago

          It looks like you can switch the processor back to true 32-bit protected mode (not just 32-bit "compatibility mode" within long mode) https://forum.osdev.org/viewtopic.php?t=43127 which in turn gives you access to the old virtual 16-bit mode - but this involves running kernel code too in 32-bit mode, which is kind of a no-go in a modern OS. Using the virtualization extensions will be a lot easier.

          • kmeisthax 6 hours ago

            Interesting - though one other hurdle coming up for this sort of thing is that Intel was threatening to drop real/protected/v8086 entirely and release processors that boot to long mode and don't let you drop out of it. Dunno if they still plan to go through with it or backed down.

  • zozbot234 7 hours ago

    DOS-era codebases are just terrible in a modern context, they would have to rewrite it from scratch anyway. The TUI IDE included within FreePascal is basically bitrotting due to this very reason.

DangitBobby 2 hours ago

I love that it has a toolbar with shortcut keys highlighted at the top. I wish more TUI programs had that, especially vim!

  • jerrygenser an hour ago

    Zellij is a good example of a tui with shortcuts in the UI. Helped me learn them way better than I would have otherwise

andyferris 4 hours ago

I have to say, I really miss MS-DOS TUI apps like edit, the qbasic editor, and xtree-gold.

The linux-terminal based ones just seem a bit off in comparison. Maybe it's mouse and keyboard support in terminals (shift-enter support, anyone?) aren't great? People have different aesthetics? I don't know...

Next stop: VS-EDIT would be pretty cool :) (This with LSPs)

  • JdeBP 3 minutes ago

    It's definitely for that reason. It is amazingly hard to portably do something as trivial in the DOS world as recognize [Shift]+[Ins]. The terminal paradigm is very different to the console paradigm in some areas.

    In the days when a Tektronix terminal was a real physical thing that one sat in front of, the TUIs that one used didn't look at all like the ones in the contemporary personal computer world. Ironically, an old Tektronix or DEC VT user transported into the future would be very at ease with what you get in the Linux-based operating system world today.

    All that said, the Windows Terminal people have worked pretty hard to get even some of the obscure ECMA-48, ITU T-416, DEC VT, and XTerm stuff into Windows Terminal, so at least TUI applications writers who are prepared to write all of the bizarre hooplah to have things like recognition of [Control]+[Home] and correctly operating reverse video, actually will get them.

mayli 2 hours ago

Pretty cool, at least much more user friendly and doesn't lag when opening large files. And more features than notepad.

zerr 6 hours ago

Is there anything in EDIT.EXE for MS-DOS that inherently hinders porting to x64?

I wish they have implemented the same color theme as well.

tored 9 hours ago

Oh nice! Can't wait to replace nano. Plugin support in lua?

  • 90s_dev 9 hours ago

    I hope someone adds typed Lua support and sends a PR!

Bilal_io 4 hours ago

Why didn't they make this a package available ia winget? Did it have to be part of the OS?

andrewstuart 9 hours ago

Edit for DOS was my favorite editor.

All the keys worked as you expect. You could select text with shift. It had find and a replace. That’s a lot more than most editors give you without config fiddling and arcane key commands.

Those simple things get almost everything I need for operating system maintenance.

Edit was the pure distilled essence of an editor.

It was a work of art really.

  • sedatk 9 hours ago

    It was okay when it came out because the alternative was EDLIN (DOS version of ed). But IIRC, it had a 64KB file size limitation which was a problem.

croes 7 hours ago

And again a case of bad naming from MS because it’s too basic to be distinguishable.

thaumasiotes 2 hours ago

Weird choice of name for their new software, given there is already a pretty prominent editor from Microsoft named "edit".

https://en.wikipedia.org/wiki/MS-DOS_Editor

They seem to have given it the same name because they want to preserve the command. But the headline is... misleading.

Ericson2314 8 hours ago

Will the old one from DOS be replaced entirely with this?

  • fredoralive 7 hours ago

    64 bit Windows, the only sort now with W11, doesn’t have MS-DOS support, so doesn’t have the old edit to start with.

    • Ericson2314 7 hours ago

      Didn't know 32-bit Windows was completely gone.

TZubiri 5 hours ago

Very nice, I'll unironically add it to my repertoire of main code editing tools: nano and notepad.

Notepad had recently become infected with ai features and logins and tabs which I just hate, win some lose some ig

GuinansEyebrows 9 hours ago

cute. extremely NIH in a field with many existing options, but very cute :)

mixmastamyk 9 hours ago

What happened to shipping yedit? From the yori project, which I recommend to everyone on windows. Why wait when it has been available for years?

(Someone mentioned ssh, which leads me to believe this one is using ansi instead of the console API.)

QuiCasseRien 10 hours ago

[flagged]

  • lblume 10 hours ago

    I can see why people don't like to write Rust. It is more tedious, harder because of the ownership model, and has a very steep learning curve.

    What I don't get is what people have against programs written in Rust from the bottom up. They are safer to use, introduce far fewer vulnerabilities, and you can even locally reason about the code much better than in typical 'unsafe' languages like C++.

    • eikenberry 9 hours ago

      It seems like your first paragraph answers the question in the second. If it is harder to use and learn then that reduces the value of free software released using it as that software is then harder to modify, fix, contribute to, etc. The tradeoff for Rust being hard should be more security and fewer bugs. The additional cost here, and the one that the OP is probably annoyed with, is that it moves away from the languages/platforms that MS has traditionally used and that developers who work on that platform expect.

      • koakuma-chan 9 hours ago

        Is Rust harder than C++?

        • eikenberry 7 hours ago

          If the OP already knows C++ then it would obviously be harder for them. Given the nature of their post, this was my interpretation.

        • haiku2077 6 hours ago

          It's harder to do simple things and easier to do complicated things.

        • npalli 7 hours ago

          Yes.

          • Guekka 7 hours ago

            That answer lacks some nuance Yes, it is harder to get a Rust program to compile. But it also is easier to accomplish the desired task safely

    • 90s_dev 9 hours ago

      > and you can even locally reason about the code much better than in typical 'unsafe' languages like C++.

      Do you have an example of this? I'm just a TypeScript guy who never had a fair chance to use C++ or Rust for long, so I'd be curious how what you say is true.

      • lblume 6 hours ago

        One of the strongest example for me is newtypes. I strongly believe in Parse, don't validate (https://news.ycombinator.com/item?id=21476261) and think Rust's newtype pattern is able to really enforce this strongly.

        When writing a Rust program, I can often basically express it as a single value (the input) being sequentially converted in type. The typestates, if you choose this name, allow great compile-time verification of most desired properties. You are really forced to describe the way the core logic flows in a modular way.

        However this is just one and likely not even the most prominent aspect making Rust so great. Local reasoning also becomes easier via explicit opt-in mutability, and function signatures always being the only relevant source of truth when regarding their compile-time evaluatability (especially compared to C++ templates). No accessing uninitialized memory, a very simple implied notion of a constructor as merely a method without a self parameter, soundness of all received types, likely much more...

    • teddyh 9 hours ago

      The non-stable ABI, forcing all-statically linked binaries, is also a thing.

      • tadfisher 9 hours ago

        Which has next to zero impact on Windows applications, which ship their own DLLs anyway (besides stuff like DirectX).

  • free_bip 10 hours ago

    What's wrong with a terminal app being written in Rust?

  • sedatk 9 hours ago

    > Why Why Why?

    Less memory overhead and no runtime dependencies?

bitbasher 6 hours ago

It's 2025 and Windows got what *nix got in the 1970s. Better late than never!