HNHacker News
TopNewBestAskShowJobs

conaclos

1,178 karma · joined February 20, 2017

@biomejs founder & lead maintainer - @Inria R&D engineer - PhD in Computer Science

TypeScript & Rust programmer. Researcher in distributed systems, CRDT, embedded systems.

Github: @Conaclos Bluesky: @Conaclos Biome: https://github.com/biomejs/biome GPG: http://pgp.mit.edu/pks/lookup?search=victorien+elvinger

submissionscomments
conaclos··on Exploring Dynamic Dispatch in Rust
> Well I have no idea what your parent meant, but existential types (types which we assert to exist but don't specify) is in fact already used in Rust

Yes, but it is still quite limited: they are not yet supported as associated type in traits or in type aliases.

conaclos··on Crabtime: Zig’s Comptime in Rust
Actually we have a command to do exactly what you want: `expand macro`. Crabtime claims to have the same thing.
conaclos··on Imagine telling 2010 devs that in 2025, collapsing a div would require $8/ month
> If you're developing open source software because you believe in the commons, license it under (A)GPL to ensure the propagation of the commons. If you're developing open source because it looks good on a resume, then you've already been paid for it in reputation. But if you're developing open source because you think you'll get paid for it, I don't know what to tell you except that that is not how the world works.

This is not so simple. Even in the FOSS community, some people are allergic to copyleft licenses. I usually choose a license based on the practice of a community. Also, if you make the choice of copy-left in a world or copy-free is king, you are just isolating yourself from others. Often in big projects, you cannot alone, and the decision of license is a collective one.

I prefer the idea of regulating this mess: enforcing that everyone who has contributed to the success of a project - directly or indirectly - gets paid. It looks more fair and is based on merit - which this society seems to value.

conaclos··on Imagine telling 2010 devs that in 2025, collapsing a div would require $8/ month
One of the problems I have with paid solutions is that they generally use open source softwares and don't contribute a dime to them once their paid solutions are generating cash.
conaclos··on Ask HN: Are you afraid to travel to US to tech conferences?
[0] is the article from LeMonde (in french) for anyone interested.

[0] https://www.lemonde.fr/international/article/2025/03/19/etat...

conaclos··on Austral: A Systems Language with Linear Types and Capabilities (2022)
An interesting design choice of Austral is the use of second-class references [0] in place of first-class references like Rust does. This makes the implementation of a borrow checker simpler at the cost of reduced expressiveness. Hylo (previously Val) [1] tries also to find a way of avoiding first-class references using value semantic and subscripts.

[0] https://borretti.me/article/second-class-references; [1] https://www.hylo-lang.org/

conaclos··on Recommendations for designing magic numbers of binary file formats

   SHOULD include a zero byte
I guess it is expected to be at the end of the magic number to act as a null-termibated string?

   MUST include a byte sequence that is invalid UTF-8
I guess it is to differentiate a text file from a specific format?

   MUST include at least one byte with the high bit set
Any reason?
conaclos··on Trees not profits: we're giving up our right to ever sell Ecosia (2018)
Does anyone use Ecosia every day? How does it compare with DuckDuckGo and Qwant?
conaclos··on How Core Git Developers Configure Git
Some extra options I like:

  [apply]
    # Remove trailing whitespaces
    whitespace = fix
  [color "diff"]
    whitespace = red reverse
  [diff]
    colorMovedWS = allow-indentation-change
  [format]
    pretty = fuller
  [log]
    date = iso
  [pull]
    ff = only
conaclos··on Firing programmers for AI is a mistake
This is also problematic in cases where navigation apps are not updated and drivers start taking routes they are no longer authorized to take.
conaclos··on Undergraduate shows that searches within hash tables can be much faster
Actually they propose two algorithms: Funnel Hashing and Elastic Hashing. Funnel Hashing is "greedy" and defeats the Yao's conjecture that concerns greedy hash mechanisms. Elastic Hashing is "non-greedy" and provides a better amortized time than greedy algorithms.
conaclos··on FOSDEM 2025: The state of Rust trying to catch up with Ada [video]
At my engineering school they taught Ada. I never had the opportunity to learn Ada because they switched to Java a decade before I started.
conaclos··on Google Pixel 4a's old firmware is gone, trapping users on buggy battery update
> Once you have Magisk stabilized, install the Advanced Charging Controller, and configure it to halt charging at 80%.

If we install LineageOS, should we worry about Google's firmware update? Then why bother with all these steps?

conaclos··on Paxo: A DIY Phone
Maybe I was wrong to share the project at its early stage. I hope the Paxo's team doesn't get discouraged by all these negative comments. Personally, I was really impressed with the project and wanted to share it here.
conaclos··on Paxo: A DIY Phone
The project is still in early stages. More and more people are getting involved, including people with some expertise.
conaclos··on Paxo: A DIY Phone
They are working on a new version that will include 4G.
conaclos··on TypeScript enums: use cases and alternatives
Thanks for the reply. I was not aware of this.

In this case, I could write this:

  type Activation = "Active" | "Inactive";
  const Activation = {
    __proto__: null,
    Active: "Active",
    Inactive: "Inactive",
  } as { [K in Activation]: K };
This completely hides `__proto__` and avoid using utility types like `Exclude`.

Note that it is safe because TypeScript checks that the type assertion is valid. If I mistype a value, TypeScript will complain about the assertion.

conaclos··on TypeScript enums: use cases and alternatives
The suggested alternative looks overly complex to me. Moreover, it uses the `__proto__` property that is deprecated [0] and never was standardized. I could write something like this instead:

  type MyEnum = typeof MyEnum[keyof typeof MyEnum];
  const MyEnum = {
    A: 0,
    B: 1,
  } as const;
Unfortunately I found it still more verbose and less intuitive than:

  enum MyEnum {
    A = 0,
    B = 1,
  }
TypeScript enum are also more type-safe than regular union types because they are "nominally typed": values from one enum are not assignable to a variable with a distinct enum type.

This is why I'm still using TypeScript enum, even if I really dislike the generated code and the provided features (enum extensions, value bindings `MyEnum[0] == 0`).

Also, some bundlers such as ESbuil are able to inline some TypeScript enum. This makes TypeScript enum superior on this regard.

In a parallel world, I could like the latter to be a syntaxic sugar to the former. There were some discussions [1] for adopting a new syntax like:

  const MyEnum = {
    A: 0,
    A: 1,
  } as enum;
[0] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

[1] https://github.com/microsoft/TypeScript/issues/59658

conaclos··on Ghostty 1.0
I am a happy foot user and I am considering switching from Sway to Niri. What has been your experience with Niri? One thing that concerns me about Niri is that it is not wlroots based. This means that many tools I accustomed to don't work with Niri. Do you have some dedicated tools for screen sharing, screen recording, screen printing, multi-monitor management, ...?
conaclos··on JSON5 – JSON for Humans
I agree 100%. It is such a pain to write tools that have to account for all these exceptions.
conaclos··on Show HN: Graphite, a Blender-inspired 2D procedural design Rust app
Does Graphite support baseline grids as Scribus does?
conaclos··on Steve's Jujutsu Tutorial
> The auto committing behavior is a bit weird at first

I am a bit skeptical about this, because this requires a jj daemon?

conaclos··on Mondragon as the new city-state
The anarchist culture of the 1800s and 1900s in Spain, especially the emergence of anarcho-syndicalist structures [0], is certainly one of the reasons for Mondagon's existence.

[0] https://en.wikipedia.org/wiki/Anarcho-syndicalism

conaclos··on Small Strings in Rust: smolstr vs. smartstring (2020)
compact_str is a fantastic crate, used by many projects. Do you know the byteyarn crate [0]? This could be nice to add this to the `Similar Crates` section if it makes sense.

[0] https://docs.rs/byteyarn/latest/byteyarn/

conaclos··on Small Strings in Rust: smolstr vs. smartstring (2020)
Readers who like this article may also like a more recent one [0]. It designs a compact string with extra capabilities. The crate was released under the name byteyarn [1]

[0] https://mcyoung.xyz/2023/08/09/yarns/

[1] https://docs.rs/byteyarn/latest/byteyarn/

conaclos··on I prefer rST to Markdown
In computer science, we still need LaTeX because conferences and journals require the use of their official LaTeX template.
conaclos··on I prefer rST to Markdown
Maybe Typst (https://typst.app/) is a good in-between?
conaclos··on Pallene: A statically compiled companion language for Lua
For those wondering what the difference is between Pallene and Teal [1], I found a 2021 comment [2] that gives some clues.

[1] https://github.com/teal-language/tl

[2] https://news.ycombinator.com/item?id=26263759

conaclos··on Node.js adds experimental support for TypeScript
I tested it a few months ago. However, the output isn't very human friendly.
conaclos··on Automerge: A library of data structures for building collaborative applications
> I’d love to have a “SQLite of local first software”

We have recently published a new research paper on replicating SQLite [1] in a local-first manner. We think it goes a step closer to that goal.

[1] https://inria.hal.science/hal-04580135/document

← PreviousPage 2 of 11Next →