<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>Wed, 28 Oct 2026 19:05:54 +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 "Coreutils for Windows"]]></title><description><![CDATA[
<p>...huh, true. It's weird what kind of mistakes one can do sometimes. This one was almost comically on the nose.</p>
]]></description><pubDate>Wed, 03 Jun 2026 17:50:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=48387260</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48387260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48387260</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>Yup! echo is a CMD builtin and doesn't exist as a dedicated executable.</p>
]]></description><pubDate>Wed, 03 Jun 2026 10:51:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=48382306</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48382306</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48382306</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>I apologize for asking, but did you also understood the "Shell conflicts" section as being the complete list of utilities? The project ships the majority of core utilities (~75%).</p>
]]></description><pubDate>Tue, 02 Jun 2026 19:19:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374911</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374911</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>Any command not listed under the "Shell conflicts" section is included. In my testing `ln` works great.</p>
]]></description><pubDate>Tue, 02 Jun 2026 19:05:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374720</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374720</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374720</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>It should work on Windows 10. If you're using PowerShell, you do need to have v7.4 or later installed, however.</p>
]]></description><pubDate>Tue, 02 Jun 2026 18:30:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374250</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374250</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374250</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>We actually open-sourced DOS sort and published a port of the DOS find command. The suite then dispatches to the GNU/DOS variant based on heuristics. The installer allows you to pick what variant to use by default if the invocation is ambiguous.</p>
]]></description><pubDate>Tue, 02 Jun 2026 18:29:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374226</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374226</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374226</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>> I would have liked to see head, tail, tr, uniq, and cut.<p>The project includes all of those. Or were you talking about the past?</p>
]]></description><pubDate>Tue, 02 Jun 2026 18:27:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374197</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374197</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374197</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>As hex4def6 said, the idea was that DOS command conflicts are not a good idea, while overriding PowerShell builtins in interactive sessions (PSReadLine) is acceptable, if not a good idea. We open-sourced DOS sort and published a port of the DOS find command. The suite then dispatches to the GNU/DOS variant based on heuristics.</p>
]]></description><pubDate>Tue, 02 Jun 2026 18:25:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374172</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374172</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374172</guid></item><item><title><![CDATA[New comment by lhecker in "Coreutils for Windows"]]></title><description><![CDATA[
<p>The intent was simply to give people coming from macOS and Linux more of the CLI tools they're familiar with. In other words, agents weren't the focus at all.
But if it ends up helping them, that's a good added benefit of course.</p>
]]></description><pubDate>Tue, 02 Jun 2026 18:22:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=48374127</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=48374127</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48374127</guid></item><item><title><![CDATA[Microsoft Edit 2.0.0 – A compiler for syntax highlighting]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/microsoft/edit/releases/tag/v2.0.0">https://github.com/microsoft/edit/releases/tag/v2.0.0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47936344">https://news.ycombinator.com/item?id=47936344</a></p>
<p>Points: 6</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 28 Apr 2026 16:05:52 +0000</pubDate><link>https://github.com/microsoft/edit/releases/tag/v2.0.0</link><dc:creator>lhecker</dc:creator><comments>https://news.ycombinator.com/item?id=47936344</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47936344</guid></item><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></channel></rss>