<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: lhecker</title><link>https://news.ycombinator.com/user?id=lhecker</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 25 Apr 2026 18:42:35 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=lhecker" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by lhecker in "Using Microsoft's New CLI Text Editor on Ubuntu"]]></title><description><![CDATA[
<p>The plan is indeed to make it extensible if time and popularity permits it. LSP would be an extension itself, however, instead of being built into the editor. We want to retain a lean core editor so people can ship it everywhere (e.g. even into small Docker images).</p>
]]></description><pubDate>Sat, 21 Jun 2025 18:27:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44339641</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44339641</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44339641</guid></item><item><title><![CDATA[New comment by lhecker in "Using Microsoft's New CLI Text Editor on Ubuntu"]]></title><description><![CDATA[
<p>It's indeed Maple Mono. I love that font!</p>
]]></description><pubDate>Sat, 21 Jun 2025 15:31:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=44338324</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44338324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44338324</guid></item><item><title><![CDATA[New comment by lhecker in "Writing into Uninitialized Buffers in Rust"]]></title><description><![CDATA[
<p>That's a fair workaround for my specific example. But I believe it's possible to contrive a different example where such a solution would not be possible. Put differently, I only tried to convey the overall idea of what I think is a shortcoming in Rust at the moment.<p>Edit: Also, I believe your code would fail my second section, as the `convert` function would have difficulty accepting a `[u8]` slice. Converting `[u8]` to `[MaybeUninit<u8>]` is not safe per se.</p>
]]></description><pubDate>Wed, 21 May 2025 16:14:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=44053039</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44053039</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44053039</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>Back then (a year ago?) I simply included the Windows.h header into a Zig file. Is that not possible anymore? It worked great back then for me IIRC!<p>Overall, I liked the build system. What I found annoying is that I had to manually search for the Windows SDK path in build.zig just so I can addIncludePath it. I needed that so I can add ICU as a dependency.<p>The only thing that bothered me apart from that was that producing LTO'd, stripped release builds while retaining debug symbols in a separate file was seemingly impossible. This was extra bad for Windows, where conventionally debug information is always kept in a separate file (a PDB). That just didn't work and it'd be great if that was fixed since back then (or in the near term).</p>
]]></description><pubDate>Wed, 21 May 2025 10:36:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44050042</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44050042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44050042</guid></item><item><title><![CDATA[New comment by lhecker in "Writing into Uninitialized Buffers in Rust"]]></title><description><![CDATA[
<p>Abstracting away the `assume_init` is a great idea! I think I could use something like that for the editor. The only concern I have is that the `read` function is templated on the parameter type. I'd ideally _really_ prefer it if I didn't need two copies of the same function to switch over `[u8]` and `[MaybeUninit<u8>]` due to different return types. [^1] I guess the approach could be tuned to avoid this?<p>Personally, I also like the simpler approach overall, compared to the `BorrowedBuf` trait, for the same reasons outlined in the article.<p>While this possibly solves parts of pain points that I had, what I meant to write is that in an ideal world I could write Rust while mostly not thinking about this issue much, if at all. Even with this approach, I'd still need to decide whether my API needs to take a `[u8]` or a `Buffer`, just in the mere off-chance that a caller may want to pass an uninitialized array further up in the call chain. This then requires making the call path generic for the buffer parameter which may end up duplicating any of the functions along the path, even though that's not really my intention by marking it as `Buffer`.<p>I think if there was a way to modify Rust so we can boldly state in writing "You may cast a `[MaybeUninit<T>]` into a `[T]` and pass it into a call _if_ you're absolutely certain that nothing reads from the slice", it would already go a long way. It may not make this more comfortable yet, but it would definitely take off a large part of my worries when writing such unsafe casts. That's basically what I meant with "occupy my mind": It's not that I wouldn't think about it at all, rather it just wouldn't be a larger concern for me anymore, for code where I know for sure that this requirement is fulfilled (i.e. similar to how I know it when writing equivalent C code).<p>Edit: jcranmer's suggestion of write-only references would solve this, I think? <a href="https://news.ycombinator.com/item?id=44048450">https://news.ycombinator.com/item?id=44048450</a><p>[^1]: This is of course not a problem for a simple `read` syscall, but may be an issue for more complex functions, e.g. the UTF8 <> UTF16 converter API I suggested elsewhere in this thread, particularly if it's accelerated, the way simdutf is.</p>
]]></description><pubDate>Wed, 21 May 2025 10:05:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=44049900</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44049900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44049900</guid></item><item><title><![CDATA[New comment by lhecker in "Writing into Uninitialized Buffers in Rust"]]></title><description><![CDATA[
<p>What I meant is that if I write a UTF8 --> UTF16 conversion function for my editor in C I can write<p><pre><code>  size_t convert(state_t* state, const void* inp, void* out)
</code></pre>
This function now works with both initialized and uninitialized data in practice. It also is transparent over whether the output buffer is an `u8` (a byte buffer to write it out into a `File`) or `u16` (a buffer for then using the UTF16). I've never had to think about whether this doesn't work (in this particular context; let's ignore any alignment concerns for writes into `out` in this example) and I don't recall running into any issues writing such code in a long long time.<p>If I write the equivalent code in Rust I may write<p><pre><code>  fn convert(&mut self, inp: &[u8], out: &mut [MaybeUninit<u8>]) -> usize
</code></pre>
The problem is now obvious to me, but at least my intention is clear: "Come here! Give me your uninitialized arrays! I don't care!". But this is not the end of the problem, because writing this code is theoretically unsafe. If you have a `[u8]` slice for `out` you have to convert it to `[MaybeUninit<u8>]`, but then the function could theoretically write uninitialized data and that's UB isn't it? So now I have to think about this problem and write this instead:<p><pre><code>  fn convert(&mut self, inp: &[u8], out: &mut [u8]) -> usize
</code></pre>
...and that will also be unsafe, because now I have to convert my actual `[MaybeUninit<u8>]` buffer (for file writes) to `[u8]` for calls to this API.<p>Long story short, this is a problem that occupies my mind when writing in Rust, but not in C. That doesn't mean that C's many unsafeties don't worry me, it just means that this _particular_ problem type described above doesn't come up as an issue in C code that I write.<p>Edit: Also, what usefulcat said.</p>
]]></description><pubDate>Wed, 21 May 2025 09:32:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=44049733</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44049733</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44049733</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>I don't know why, but I'm quite certain it's neither of the two. If anything, it has probably to do with commitment: When a company as large as MS adopts a new language internally, it's like spinning up an entire startup internally, dedicated to developing and supporting just that new language, due to the scale at which things are run across so many engineers and projects.</p>
]]></description><pubDate>Tue, 20 May 2025 19:38:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=44045117</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44045117</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44045117</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>I intended for this editor to be cross-platform and didn't want to take on a large runtime dependency that small Docker images or similar may not be willing to bundle.</p>
]]></description><pubDate>Tue, 20 May 2025 14:58:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=44042376</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44042376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44042376</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>I did use Copilot a lot, just not its edit/agent modes. I found that they perform quite poorly on this type of project. What I use primarily is its autocompletion - it genuinely cured my RSI - and sometimes the chat to ask a couple questions.<p>What you expressed is a sentiment I've seen in quite a few places now. I think people would be shocked to learn how much time I spent on just the editing model (= cursor movement and similar behavior that's unique to this editor = a small part of the app) VS everything else. It's really not all that difficult to write a few FFI abstractions, or a UI framework, compared to that. "Pressure to ship" is definitely true, but it's not like Microsoft is holding a gun to my chest, telling me to complete the editor in 2 months flat. I also consider it important to not neglect one's own progress at becoming more experienced. How would one do that if not by challenging oneself with learning new things, right? Basically, I think I struck a balance that was... "alright".</p>
]]></description><pubDate>Tue, 20 May 2025 11:02:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=44040099</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44040099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44040099</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>What I imagined is that people could load runtimes like node.js as a plugin itself in order to then load plugins written in non-native languages (JavaScript, Lua, etc.; node.js being an extreme example). I wonder if WASM could also be one such "adapter plugin"?<p>But plugins are still a long way off. Until then, I updated the issue to include your suggestion (thank you for it!): <a href="https://github.com/microsoft/edit/issues/17">https://github.com/microsoft/edit/issues/17</a></p>
]]></description><pubDate>Tue, 20 May 2025 10:42:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=44039993</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44039993</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44039993</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>Indeed, we have our own bootstrapped Rust toolchain internally. I think this has to do with (legal) certifications, but I'm not entirely sure about that.</p>
]]></description><pubDate>Tue, 20 May 2025 10:29:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=44039917</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44039917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44039917</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>I'm not familiar with that, so I can't say. If you have any links on that topic, I'd appreciate it.<p>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.</p>
]]></description><pubDate>Tue, 20 May 2025 01:24:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=44036827</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44036827</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44036827</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 20 May 2025 01:22:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=44036808</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44036808</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44036808</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>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.<p>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 <i>so much</i> 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.<p>Apropos custom helpers, I think it may be worth optimizing `Vec::splice`. I wrote myself a custom splice function to reduce the binary size: <a href="https://github.com/microsoft/edit/blob/e8d40f6e7a95a6e19765ff19621cf0d39708f7b0/src/helpers.rs#L199-L253">https://github.com/microsoft/edit/blob/e8d40f6e7a95a6e19765f...</a><p>The differences can be quite significant: <a href="https://godbolt.org/z/GeoEnf5M7" rel="nofollow">https://godbolt.org/z/GeoEnf5M7</a></p>
]]></description><pubDate>Mon, 19 May 2025 23:34:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=44036146</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44036146</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44036146</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>> What do you like about Zig more than Rust?<p>It's been quite a while now, but:<p>- Great allocator support<p>- Comptime is better than macros<p>- Better interop with C<p>- 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<p>- Constructing structs with .{} is neat<p>- 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)<p>- Despite being less complete, somehow the utility functions in Zig just "clicked" better with me - it somehow just felt nice reading the code<p>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.<p>> How did you ensure your Zig/C memory was freed properly?<p>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.<p>> What do you not like about Rust?<p>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.<p>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.<p>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.<p>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.<p>At the end of the day, both Zig and Rust do a fine job in their own right.</p>
]]></description><pubDate>Mon, 19 May 2025 23:18:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=44036021</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44036021</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44036021</guid></item><item><title><![CDATA[New comment by lhecker in "Edit is now open source"]]></title><description><![CDATA[
<p>Hey all! I made this! I really hope you like it and if you don't, please open an issue: <a href="https://github.com/microsoft/edit">https://github.com/microsoft/edit</a><p>To respond to some of the questions or those parts I personally find interesting:<p>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" (<a href="https://nullprogram.com/blog/2023/09/27/" rel="nofollow">https://nullprogram.com/blog/2023/09/27/</a>) and it's really not that difficult to write such an allocator.<p>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.<p>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).<p>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.<p>If you have any questions, let me know!</p>
]]></description><pubDate>Mon, 19 May 2025 21:17:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44034961</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=44034961</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44034961</guid></item><item><title><![CDATA[New comment by lhecker in "Windows NT on 600MHz machine opens apps instantly. What happened?"]]></title><description><![CDATA[
<p>Yeah, you're right, they're related to WinUI. But what I meant is that such features aren't inherently expensive, they're just made expensive due to the choice of UI framework.<p>Display scaling is very fast in GDI apps and has no impact on launch time, a tab bar is essentially just an array of buttons (minimal impact on launch time?) and transparency is a virtually cost-free feature coming from DWM. I wrote a WinUI lookalike using its underlying technology (Direct2D and DirectComposition) directly one time and that results in an application that starts up within ~10ms of CPU time on my laptop, quite unlike the 450ms I'm seeing for WinUI. That is including UIA, localization and auto-layout support.</p>
]]></description><pubDate>Fri, 23 Jun 2023 18:42:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=36450690</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=36450690</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36450690</guid></item><item><title><![CDATA[New comment by lhecker in "Windows NT on 600MHz machine opens apps instantly. What happened?"]]></title><description><![CDATA[
<p>Unfortunately, none of these are responsible for the startup delay. Since version 1.18 effectively ~90% of the startup duration is spent starting up WinUI and having it draw the tab bar and window frame. It still needs a second to start. If it still used GDI like Windows NT did, it would start in well under 100ms even on an extremely old CPU.<p>Fixing this situation is essentially impossible because it requires rewriting almost everything that modern Windows is built on. Someone else in this thread said you couldn't sell 4 quarters worth of work to fix this, but the reality is that it requires infinite quarters, because it requires throwing away the last 10 years of Windows shell and UI work and that will never happen. You could paper over it by applying performance spotfixes here and there, but it'll never go back to how it could be that way. At a minimum, you'd essentially have to throw away WinRT which has an almost viral negative impact on performance. Never before have high latency, but still synchronous cross process RPCs been that prevalent and everything's a heap allocated object, even if it's within the same binary. It's JuniorFootgunRT.</p>
]]></description><pubDate>Fri, 23 Jun 2023 17:31:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=36449873</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=36449873</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36449873</guid></item><item><title><![CDATA[New comment by lhecker in "Coroutines make robot code easy"]]></title><description><![CDATA[
<p>> They're equivalent except that asynchronous callbacks is what actually happens [...]<p>Neither stackful nor stackless coroutines work like this practice. The former suspends coroutines by saving and restoring the CPU state (and stack) and the latter compiles down to state machines, as mentioned in the article. Coroutines are functionally not equivalent to callbacks at all.</p>
]]></description><pubDate>Thu, 22 Jun 2023 10:29:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=36430099</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=36430099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36430099</guid></item><item><title><![CDATA[New comment by lhecker in "When I tell the Windows Terminal team something is simple, I am "misguided""]]></title><description><![CDATA[
<p>I'm not sure editing the article would be the proper thing to do at this point. Someone else suggested to edit in 1-2 weeks for possible future readers.<p>I can add back the sentence where I accredit Alacritty for the general, underlying algorithm/idea then, because that's where I heard about it first. There isn't really any other alternative, performant way to implement GPU-accelerated terminals, so I don't think hearing about it again from Casey changed my perception of what the only alternative to Direct2D is, in case it's fundamentally flawed for our purpose which it turned out to be.</p>
]]></description><pubDate>Fri, 06 May 2022 16:10:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=31286844</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=31286844</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=31286844</guid></item></channel></rss>