<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: tauoverpi</title><link>https://news.ycombinator.com/user?id=tauoverpi</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 16 Apr 2026 21:49:54 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tauoverpi" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tauoverpi in "ReMarkable Paper Pro Move"]]></title><description><![CDATA[
<p>I bought a pinenote after the charing port on the rm2 stopped working. With the rm2 it would refuse to wake sometimes if it's not charged to 100% slowly, the pen ghosting issue continued to get worse the longer it was in use even with a replaced tip, the web interface wasn't the most practical to add new books with (via SSH it's also a bit annoying as forced to reverse engineer their JSON format), deleting files via the interface at one point didn't delete them on disk so had to remove them via SSH, and so on.<p>I never had a subscription and locking features which could be run locally on the device behind a service is rather annoying.<p>And yes, those issues were worse after the a firmware update.</p>
]]></description><pubDate>Sun, 07 Sep 2025 19:13:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45161260</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=45161260</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45161260</guid></item><item><title><![CDATA[New comment by tauoverpi in "Hacker News now runs on top of Common Lisp"]]></title><description><![CDATA[
<p>Experience is relative to the challenges one has faced thus time usually doesn't mean much without context of what it's in relation to.</p>
]]></description><pubDate>Thu, 29 May 2025 08:07:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=44124006</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44124006</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44124006</guid></item><item><title><![CDATA[New comment by tauoverpi in "Hacker News now runs on top of Common Lisp"]]></title><description><![CDATA[
<p>It _does_ matter as those edge cases would be the difference between a working product and something that's trivial to topple over with `"; find . -exec shred -f {} \;` if your agent is used for the backend. There's also a lot of boring problems to solve backend wise (migration, failure mitigation, suitable performance, etc) that need to be considered for a site with significant traffic even for "basic functionality" (a service that's down cannot serve it's users).<p>The frontend of HN doesn't need to be complex and I'd even argue that it's better for being simple as it's then easier to parse, takes less effort from the client to render, certainly less battery on mobile, and so on. Web applications don't _need_ to be more complex than the problem at hand where the frontend itself is just enough of to display content in a comfortable enough format for human consumption.<p>Unrelated to the topic but related to the thread: if you edit a message then please keep the original message around to keep context for others that read this thread if that edit would change how the message was interpreted at the time of the reply. Non-functional edits (e.g spelling corrections) are fine without notice.</p>
]]></description><pubDate>Wed, 28 May 2025 08:08:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=44113744</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44113744</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44113744</guid></item><item><title><![CDATA[New comment by tauoverpi in "Hacker News now runs on top of Common Lisp"]]></title><description><![CDATA[
<p>The question would be how many security exploits and other edge cases would be included in that.</p>
]]></description><pubDate>Tue, 27 May 2025 22:45:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=44111322</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44111322</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44111322</guid></item><item><title><![CDATA[New comment by tauoverpi in "Show HN: Malai – securely share local TCP services (database/SSH) with others"]]></title><description><![CDATA[
<p>How does fastn handle errors? Is is possible to perform the SQL query client side or does it prevent / add friction for such? Can I visit `/foo/";DROP%20TABLE%20users;/` or does it handle inputs properly?</p>
]]></description><pubDate>Tue, 27 May 2025 22:33:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=44111249</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44111249</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44111249</guid></item><item><title><![CDATA[New comment by tauoverpi in "Perverse incentives of vibe coding"]]></title><description><![CDATA[
<p>Well, what would I have to do to please the LLM? Writing code isn't for LLMs to consume but rather to communicate intent for people and for machines to run which provides value for the user at the end of the day. If an LLM fails at being useful within a codebase when it's supposed to be a "works anywhere" tool then the tool is less than useful.<p>Note that language servers, static analysis tooling, and so on still work without issue.<p>The cause (which is my assumption) is that there aren't enough good examples in the training set for anything useful to be the most likely continuation thus leading to a suboptimal result given the domain. Thus the tool doesn't work "everywhere" for cases where there's less use of a language or less code in general dealing with a particular problem.</p>
]]></description><pubDate>Sat, 24 May 2025 20:10:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=44083498</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44083498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44083498</guid></item><item><title><![CDATA[New comment by tauoverpi in "Valve takes another step toward making SteamOS a true Windows competitor"]]></title><description><![CDATA[
<p>I'm sorry if I seem completely out of the loop as I haven't used windows at all for at least a decade at this point.<p>> This is a case of whether the device should be secure by default or if the user should have to opt in to security. Microsoft has chosen the position that account security should be there by default which is why it's not opt in for using an Microsoft account. I think this is a reasonable design decision to make.<p>Opt-out security is the better model to have but I don't see how security features require a microsoft account to function. This isn't the case on any other operating system as security is not bound to having an account for some external service. Rather this seems like an artificial limitation that microsoft has created to push other microsoft services on the user as someone that only uses windows to play steam games that don't use a microsoft account have no use for one regardless if they use windows or not.<p>Can you point to a particualr security feature that would stop functioning and that needs to have an account and that couldn't use a hardware security key for 2FA (if 2FA is a requirement)?<p>> But there are plenty of people who do have a Netflix account and Netflix showing up there is helping them accomplish something they want to do with their new computer. You have to understand that most people are not that good with computers and surfacing these things in more places can legitimately help them out.<p>Helping users use the app store which the majority are capable of should be sufficient unless the app store is so complex that it's practically unusable for the majority. The majority are also capable of using phones to install games, netflix, and other applications without having to be tech savy to do so.<p>Those users which aren't capable of operating the app store (usually the elderly) either have family that help them set things up or simply aren't your customers as they don't own computers.</p>
]]></description><pubDate>Sat, 24 May 2025 09:40:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=44079929</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44079929</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44079929</guid></item><item><title><![CDATA[New comment by tauoverpi in "Mystical"]]></title><description><![CDATA[
<p>This is incredible, what's the license of the work? A derivative of this (using a forth-like with only recursion) would be perfect for the current game project where I'm lacking a visual representation of spells (both written and animated). Mystical provides the missing piece of the puzzle of how users could write their own spells in a structured way within the game and still feel as if it's part of the game world with the same kind of thinking as in regular programming.</p>
]]></description><pubDate>Sun, 18 May 2025 09:36:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=44020130</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=44020130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44020130</guid></item><item><title><![CDATA[New comment by tauoverpi in "Perverse incentives of vibe coding"]]></title><description><![CDATA[
<p>I'm aware of the _why_ but this is why the tools aren't useful for my case. If they cannot consume the codebase in a reasonable amount of time and provide value from that then they generally aren't useful in areas where I would want to use them (navigating large codebases). If the codebase is relatively small or the problem is known then an LLM is not any better than tab-complete and arguably worse in many cases as the generated result has to be parsed and added to my mental model of the problem rather than the mental model being constructed while working on the code itself.<p>I guess my point is, I have no use for LLMs in their current state.<p>> That's because whatever training the model had, it didn't covered anything remotely similar to the codebase you worked on.
> We get this issue even with obscure FLOSS libraries.<p>This is the issue however as unfamiliar codebases is exactly where I'd want to use such tooling. Not working in those cases makes it less than useful.<p>> Unless you provide them with context or instruct them not to make up stuff, they will resort to bullshit their way into an example.<p>In all cases context was provided extensively but at some point it's easier to just write the code directly. The context is in surrounding code which if the tool cannot pick up on that when combined with direction is again less than useful.<p>> What's truly impressive about this is that often times the hallucinated code actually works.<p>I haven't experienced the same. It fails more often than not and the result is much worse than the hand-written solution regardless of the level of direction. This may be due to unfamiliar code but again, if code is common then I'm likely familiar with it already thus lowering the value of the tool.<p>> Again,this suggest a failure on your side for not providing any context.<p>This feels like a case of blaming the user without full context of the situation. There are comments, the names are descriptive and within reason, and there's annotation of why certain things are done the way they are. The purpose of a doc comment is not "this does X" but rather _why_ you want to use this function and it's purpose which is something LLMs struggle to derive from my testing of them. Adding enough direction to describe such is effectively writing the documentation with a crude english->english compiler between. This is the same problem with unit test generation where unit tests are not to game code coverage but to provide meaningful tests of the domain and known edge cases of a function which is again something the LLM struggles with.<p>For any non-junior task LLM tools are practically useless (from what I've tested) and for junior level tasks it would be better to train someone to do better.</p>
]]></description><pubDate>Thu, 15 May 2025 04:54:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=43991965</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43991965</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43991965</guid></item><item><title><![CDATA[New comment by tauoverpi in "Perverse incentives of vibe coding"]]></title><description><![CDATA[
<p>I've had the same issue every time I've tried it. The code I generally work on is embedded C/C++ with in-house libraries where the tools are less than useful as they try to generate non-existant interfaces and generally generate worse code than I'd write by hand. There's a need for correctness and being able to explain the code thus use of those tools is also detrimental to explainability unless I hand-hold it to the point where I'm writing all of the code myself.<p>Generating function documentation hasn't been that useful either as the doc comments generated offer no insight and often the amount I'd have to write to get it to produce anything of value is more effort than just writing the doc comments myself.<p>For my personal project in zig they either get lost completely or gives me terrible code (my code isn't _that_ bad!). There seems to be no middle ground here. I've even tried the tools as pair programmers but they often get lost or stuck in loops of repeating the same thing that's already been mentioned (likely falls out of the context window).<p>When it comes to others using such tools I've had to ask them to stop using it to think as it becomes next to impossible to teach / mentor if they're passing that I say to the LLM or trying to have it perform the work. I'm confident in debugging people when it comes to math / programming but with an LLM between it's just not possible to guess where they went wrong or how to bring them back to the right path as the throught process is lost (or there wasn't one to begin with).<p>This is not even "vibe coding", I've just never found it generally useful enough to use day-to-day for any task and my primary use of say phind has been to use it as an alternative to qwant when I cannot game the search query well enough to get the search results I'm looking for (i.e I ignore the LLM output and just look at the references).</p>
]]></description><pubDate>Thu, 15 May 2025 03:30:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=43991565</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43991565</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43991565</guid></item><item><title><![CDATA[New comment by tauoverpi in "Microservices are a tax your startup probably can't afford"]]></title><description><![CDATA[
<p>> You need tests either way.<p>The argument isn't that with static types you don't need tests but rather with static types you can focus on testing what actually matters which is the fuction itself along with it's integration into the program. Tests won't cover 100% of the surface area of a function taking `any` as that is by definition infinite with the constraint on the shape specified in the body of the function dependent on the path taken at runtime (it might never be hit). I urge you to take a look at languages other than TS for this as TS is in the strange place of bolting on a static type system to rather messy language as what may be issues with TS may not be for the rest of the space of languages with static type checking (e.g haskell effectively requires no type annotations at all in theory but in practice it's often better to use them and with extensions it's required).<p>To add to that, try looking at Go, Elm, Zig, C#, mercury, and Idris to see different type systems at play rather than assuming TS and Rust are all that's available in this design space.<p>> Simply running the problematic code will most likely throw an exception.<p>The issue here is "most likely" which during a large refactor (and due to a wide spread use of duck typing) can hide many faults within the application that go without being noticed until a user hits that path. Static types turn this into a compile-error thus it won't ever reach production. If you have 100% path coverage and test every possible type that can be passed and ensure truthy values don't change behaviour (e.g `if ("")`, `if ([])`, ...) when passed (need to test the space where all of them evaluate to `false` in addition to `true`) you're still short of the number of variations that can be passed to your function and thus may end up in a situation in future where the wrong behaviour causes failure at runtime post deployment. This is not to say you should use types only and not tests (still test even with static types) but rather that the domain of possible things passed is reduced to a testable set of values instead of always being the largest path-dependent set possible.<p>> It's hard to write a test that checks behavior but misses a wrong-type.<p>It's incredibly easy to write such tests as most don't test the negative space of such functions nor is it easy to know what the minimal shape of an object may be for your function as it depends on which logic it hits inside. If a truthy value is used or a branch is made on a field or method call of the object then anything unused in the consequent branch is not checked by your test. You'd effectively have to resort to fuzzing to find what the minimal shape is for each possible path to have an idea of what your function doesn't catch in tests to get even close to static type checking (which is still far off as in some cases the set is so large it will never finish / enumerate all possible shapes).<p>> SQL type autogen is limited to full rows, so any query returning an aggregate or something isn't going to work with that.<p>Ask _why_ tooling doesn't work with that and you may notice it's due to a lack of specification or just insufficient tooling. Take F# [1] as the example here which can do far more [2] and doesn't suffer from the mentioned problem. F# is a language with static type checking.<p>[1]: <a href="https://learn.microsoft.com/en-us/dotnet/fsharp/tutorials/type-providers/" rel="nofollow">https://learn.microsoft.com/en-us/dotnet/fsharp/tutorials/ty...</a><p>[2]: <a href="https://fsprojects.github.io/SQLProvider/" rel="nofollow">https://fsprojects.github.io/SQLProvider/</a></p>
]]></description><pubDate>Tue, 13 May 2025 03:12:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43969375</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43969375</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43969375</guid></item><item><title><![CDATA[New comment by tauoverpi in "Microservices are a tax your startup probably can't afford"]]></title><description><![CDATA[
<p>I forgot to add that "like I don't need to keep asserting that a for-loop counter is an int." is exactly what is happening with a dynamically typed language that is exactly what the runtime ends up doing unless it has a built-in range type to avoid that overhead and the loop variable cannot change while looping. With a static type checker that can be eliminated upfront as the compiler knows that it's an int and not suddenly a string as it's impossible to change the variable's type once it's defined thus all of the overhead of RTTI can be erased.<p>Javascript has to check on each iteration that the item is an int and for arrays that the length of those arrays hasn't changed underneath along with a bunch of other things as the language doesn't guarantee that it can't change. Even the JIT compiler in use has to check "is this path still that I expect" as at any point the type of the variable used in the loop can change to something else which invalidates the specialization the JIT compiler emitted for the case of it being an int. When you don't use languages with static types you push all of this work on runtime which makes the program slower for every check it needs to do while offering none of the advantages you have with static types.<p>Thus with a for loop in say C you don't assert that it is an int each time you statically constrain it to be an int as the loop condition can well be based on something else even if int is the more common to use. For example in zig `for` only takes slices and integer ranges with any other type being a compile-error:<p><pre><code>    var example: [1 << 8]usize = @splat(0);
    for (&example, 0..) |*num, int| num.* = int;
</code></pre>
This is not more work than what you'd do in a dynamically typed language.</p>
]]></description><pubDate>Fri, 09 May 2025 15:28:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=43937911</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43937911</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43937911</guid></item><item><title><![CDATA[New comment by tauoverpi in "Microservices are a tax your startup probably can't afford"]]></title><description><![CDATA[
<p>Yep, I missed it as I don't often work in haskell anymore but with the correction the rest of the above still stands (haskell syntax is still the most efficient I'm aware of for talking about this). Also, it being unimplementable is also a nice property of having such a type system as you can prove that your specification is impossible to implement (more applicable in Lean, ATS2, Idris, Agda) or make invalid states impossible to even write (consider state transition rules at the type level).</p>
]]></description><pubDate>Fri, 09 May 2025 10:37:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=43935337</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43935337</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43935337</guid></item><item><title><![CDATA[New comment by tauoverpi in "Microservices are a tax your startup probably can't afford"]]></title><description><![CDATA[
<p>The type system doesn't replace unit/snapshot/property/simulation tests as it's only job is specification. The type system is meant to be used in addition to testing to reduce the set of possible inputs to a smaller domain such that it's easier to reason about what is possible and what isn't. The same would be true even if you go as far as formal verification of programs, you always need to test even when you have powerful static types!<p>For example `foo :: Semigroup a, Traversable t => t a -> a` I already know that whatever is passed to this function can be traversed and have it's sum computed. It's impossible to pass something which doesn't satisfy both of those constraints as this is a specification given at the type level which is checked at compile-time. The things that cannot be captured as part of a type (bounded by the effort of specification) are then left to be captured by tests which only need to handle the subset of things which the above doesn't capture (e.g `Semigroup` specifies that you can compute the sum but it doesn't prevent `n + n = n` from being the implementation of `+`, that must be captured by property tests).<p>Another example, suppose you're working with time:<p><pre><code>    tick :: Monad m => m Clock.Present

    zero    :: Clock.Duration
    seconds :: Uint -> Clock.Duration
    minutes :: Uint -> Clock.Duration
    hours   :: Uint -> Clock.Duration

    add :: Clock.Duration -> Clock.Present -> Clock.Future
    sub :: Clock.Duration -> Clock.Present -> Clock.Past

    is :: Clock.Duration -> Clock.Duration -> Bool

    until :: Clock.Future -> Clock.Present -> Clock.Duration
    since :: Clock.Past   -> Clock.Present -> Clock.Duration

    timestamp :: Clock.Present -> Clock.Past

    compare :: Clock.Present -> Clock.Foreign.Present -> Order

    data Order = Ahead Clock.Duration | Equal | Behind Clock.Duration
</code></pre>
From the above you can tell what each function should do without looking at the implementation and you can probably write tests for each. Here the interface guides you to handle time in a safer way and tells a story `event = add (hours 5) present` where you cannot mix the wrong type of data ``until event `is` zero``. This is actual code that I've used in a production environment as it saves the team from shooting themselves in the foot with passing a `Clock.Duration` where a `Clock.Present` or `Clock.Future` should have been. Without a static type system you'd likely end up with a mistake mixing those integers up and not having enough test coverage to capture it as the space you must test is much larger than when you've constrained it to a smaller set within the bounds of the backing integer of the above.<p>In short, types are specifications, programs are proofs that the specification has a possible implementation, and tests ensure it behaves correctly for that the specification cannot constrain (or it would be too much effort to constrain it with types).<p>As for SQL, I'd rather say the issue is that the SQL schema is not encoded within your type system and thus when you perform a query the compiler cannot help you with inferring the type from the query. It's possible (in zig [1] at least) to derive the type of a prepared SQL query at compile-time so you write SQL as normal and zig checks that all types line up. It's not that types cannot do this, your tool just isn't expressive enough. F# [2] is capable of this through type providers where the database schema is imported making the type system aware of your SQL table layouts solving the "redundant specification" problem completely./<p>So with all of that, I assume (and do correct me if I'm wrong) that your view on what types can do is heavily influenced by typescript itself and you've yet to explore more expressive type systems (if so I do recommend trying Elm to see how you can work in an environment where `any` doesn't even exist). What you describe of types is not the way I experience them and it feels as if you're trying to fight against a tool that's there to help you.<p>[1]: <a href="https://rischmann.fr/blog/how-i-built-zig-sqlite" rel="nofollow">https://rischmann.fr/blog/how-i-built-zig-sqlite</a>
[2]: <a href="https://github.com/fsprojects/SQLProvider">https://github.com/fsprojects/SQLProvider</a></p>
]]></description><pubDate>Thu, 08 May 2025 21:50:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=43931724</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43931724</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43931724</guid></item><item><title><![CDATA[New comment by tauoverpi in "Microservices are a tax your startup probably can't afford"]]></title><description><![CDATA[
<p>Statically typed languages, when used correctly, save engineering time both as you extend your service and when thing go wrong as the compiler helps you check that the code you've written, to some degree, meets your specification of the problem domain. With a weak type system you can't specify much of the problem domain without increased labour but with a more expressive type system (and a team that understands how to use it) you can embed enough of the domain specification that implementing part of the business logic incorrectly or violating protocols turns into compile errors instantly rather than possibly leaking to production.<p>As for your comment on `any`, the reason why one doesn't want to fall back on such is that you throw out most of the gains of using static types with such a construct when your function likely doesn't work with `any` type (I've never seen a function that works on absolutely anything other than `id :: a -> a` and I argue there isn't one even with RTTI).<p>Instead you want to declare the subset of types valid for your function using some kind of discriminated union (in rust this is `enum`, zig `union(enum)`, haskell ADTs/GADTs, etc etc) where you set a static bound on the number of things it can be. You use the type system to model your actual problem instead of fighting against it or "lying" (by saying `any`) to the compiler.<p>The same applies to services, APIs, protocols, and similar. The more work the compiler can help you with staying on spec the less work you have to do later when you've shipped a P1-Critical bug by mistake and none of your tests caught it.</p>
]]></description><pubDate>Thu, 08 May 2025 18:22:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=43929493</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43929493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43929493</guid></item><item><title><![CDATA[New comment by tauoverpi in "Ask HN: Memory-safe low level languages?"]]></title><description><![CDATA[
<p>Comptime is a gateway to partial evaluation, precomputing tables, and data layout optimization using the same language zig that you're familiar with when you need it and just a convenient way to handle generics when you don't.<p>As an example from my unfinished project, I use it to select the encoding to use [1] when resolving pointers to components [2] to reduce code size [3] as much as possible while keeping a high-level interface [4] where you don't need to care about any of it, just "map" a system over every matching entry within the database and it computes the "best" traversal for a single-thread. This is something that's generally difficult to both keep simple enough to work with and for it to generate good enough code to be worth it while retaining type safety.<p>Comptime enables such without much cognitive overhead as you're working in the same language as before just with lazy evaluation [5] and slightly more lenient rules around memory management making it easier to focus on working towards the desired the data model.<p>[1]: <a href="https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bcbc15a0e6f10837876fb29d43b49/modules/aecs/src/root.zig#L972" rel="nofollow">https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...</a><p>[2]: <a href="https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bcbc15a0e6f10837876fb29d43b49/modules/aecs/src/root.zig#L732" rel="nofollow">https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...</a><p>[3]: <a href="https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bcbc15a0e6f10837876fb29d43b49/modules/aecs/test/build.zig#L110" rel="nofollow">https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...</a><p>[4]: <a href="https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bcbc15a0e6f10837876fb29d43b49/modules/aecs#systems-move" rel="nofollow">https://codeberg.org/tauoverpi/game/src/commit/77ec827ec93bc...</a><p>[5]: <a href="https://godbolt.org/z/P64Ezcrb7" rel="nofollow">https://godbolt.org/z/P64Ezcrb7</a></p>
]]></description><pubDate>Tue, 06 May 2025 19:49:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=43908934</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43908934</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43908934</guid></item><item><title><![CDATA[New comment by tauoverpi in "Reflecting on a Year of Gamedev in Zig"]]></title><description><![CDATA[
<p>Discord will arbitrarily ban users for using a VPN making it next impossible to access prior conversations on given topics where support takes anywhere from a week to two months to review tickets related to it (they then go "whoops" and lift the ban only to apply it again days later).<p>Not being searchable outside of Discord is the problem (matrix / telegram also suffer from this) as it places useful Q&A and discussion behind a wall.</p>
]]></description><pubDate>Sat, 03 May 2025 10:17:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43878042</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43878042</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43878042</guid></item><item><title><![CDATA[New comment by tauoverpi in "C++26: more constexpr in the core language"]]></title><description><![CDATA[
<p>Yep, there's the range <a href="https://github.com/rcalixte/libqt6zig">https://github.com/rcalixte/libqt6zig</a> to <a href="https://microzig.tech" rel="nofollow">https://microzig.tech</a> and soon <a href="https://github.com/ziglang/zig/issues/2683">https://github.com/ziglang/zig/issues/2683</a> then follow-up issues are resolved.</p>
]]></description><pubDate>Thu, 24 Apr 2025 09:37:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=43780782</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43780782</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43780782</guid></item><item><title><![CDATA[New comment by tauoverpi in "Deus Lex Machina: releasing a new compacting Zig tokenizer"]]></title><description><![CDATA[
<p>I may seem overly negative but I don't like it when projects beg for stars. It will get one if it's interesting and that's for the reader to decide.<p>That aside, the suggestion to pin to a core should likely be anything above core 0 at least [1] as otherwise the results will be quite noisy. This might not matter as much for such a short running process but using other cores doesn't hurt.<p>[1]: <a href="https://manuel.bernhardt.io/posts/2023-11-16-core-pinning/" rel="nofollow">https://manuel.bernhardt.io/posts/2023-11-16-core-pinning/</a></p>
]]></description><pubDate>Sat, 19 Apr 2025 08:49:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=43735130</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43735130</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43735130</guid></item><item><title><![CDATA[New comment by tauoverpi in "ZCS – An Entity Component System in Zig"]]></title><description><![CDATA[
<p>Nice,<p>I've found that using an iterator for this often generates quite a bit of extra code and prevents vectorization in general which is why I switched to an API using inversion of control for the `forEach` case (I don't have iterators).<p>Working on one item at a time (which the iterator causes) resulted in quite a bit of overhead defeating partially the gains from having a more compact memory layout  (SoA) with a more complex code path while preventing use of SIMD over multiple components at a time.<p>Is this an issue observed in this implementation and what is the general design space that this implementation targets? How it works now is partially how mach had it at least a year or more ago if I remember correctly while they still had an ECS.</p>
]]></description><pubDate>Mon, 14 Apr 2025 22:30:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=43686990</link><dc:creator>tauoverpi</dc:creator><comments>https://news.ycombinator.com/item?id=43686990</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43686990</guid></item></channel></rss>