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 Changing how we develop Ladybird
I lost all trust in the project since the LLM rewrite. This new step is another red flag to me.
conaclos··on VoidZero Is Joining Cloudflare
Same here. I prefer bet on community-led projects like Node.js, ESbuild and BiomeJS (or Prettier / eslint).
conaclos··on Bijou64: A variable-length integer encoding
This is pretty close to SQLite's varints [0]

[0]: https://www.sqlite.org/src4/doc/1433690d7b/www/varint.wiki

conaclos··on Async Rust never left the MVP state
> For now the best option to write code that wants to live in both worlds is sans-io

Thanks for sharing! Reading the articles, it looks at me, it is a kind of manual reimplementation of the state machine generated by async? This also makes the code harder to reason with. I am unsure if it is worth the complexity.

conaclos··on Async Rust never left the MVP state
One of the issue I face is a blocking function that takes a generic constrained by a `trait` and its async version takes a generic constrained by an `async trait`.
conaclos··on Async Rust never left the MVP state
I recently started working with Rust async. The main issue I am currently facing is code duplication: I have to duplicate every function that I want to support both asynchronous and blocking APIs. This could be great to have a `maybe-async`. I took a look at the available crates to work around this (maybe-async, bisync), but they all have issues or hard limitations.
conaclos··on 4-bit floating point FP4
There is a relevant Wikipedia page about minifloats [0]

> The smallest possible float size that follows all IEEE principles, including normalized numbers, subnormal numbers, signed zero, signed infinity, and multiple NaN values, is a 4-bit float with 1-bit sign, 2-bit exponent, and 1-bit mantissa.

[0] https://en.wikipedia.org/wiki/Minifloat

conaclos··on Firefox profiles: Private, focused spaces for all the ways you browse
Have you tried `firefox --no-remote --profile <path>`?

In my case, I am able to launch several Firefox instances with distinct profiles.

conaclos··on Notes on switching to Helix from Vim
I tried Helix two years ago, unfortunately the default keymap was a bit frustrating to me. I don't mind changing my habits, however I had difficulty I made sense of the keymap design.

For example, typing `w` select the word. However, typing `2w` select the second word and not two words. To select two words you have to enter in visual mode (`v2w`). To remove two words you thus need to type `v2wd` or `wdwd`. In Vim you can type `d2w`. I miss this composability. In Kakoune (one of the main inspiration of Helix), you can type `2Wd` (`2wd` has the same behavior as Helix).

I was also hoping that the use of Ctrl/Alt modifiers be completely removed. Why not fully embrace modal editing?

conaclos··on The evolution of Lua, continued [pdf]
If I remember correctly, TCO is now part of the ECMAScript standard. Safari has implemented it. The issue is that others engines have not because they are concerned about stack unwinding and stacktraces.
conaclos··on A review of Nim 2: The good and bad with example code
UFCS and the implicit `result` variable remember me the Eiffel programming language [0].

[0] https://en.wikipedia.org/wiki/Eiffel_(programming_language)

conaclos··on Trying to get error backtraces in Rust libraries right
The following articles may also be of interest to the audience:

- The definitive guide to error handling in Rust [0]

- Error Handling for Large Rust Projects - Best Practice in GreptimeDB [1]

- Designing error types in Rust [2]

- Modular Errors in Rust [3]

[0]: https://www.howtocodeit.com/articles/the-definitive-guide-to... [1]: https://greptime.com/blogs/2024-05-07-error-rust [2]: https://mmapped.blog/posts/12-rust-error-handling [3]: https://sabrinajewson.org/blog/errors

conaclos··on Show HN: Bolt – A super-fast, statically-typed scripting language written in C
I was quite excited by the description and then I noted that Bolt heavily relies on double floating point numbers. I am quite disappointed because this doesn't allow me to use Bolt in my context: embedded systems where floating point numbers are rarely supported... So I realized that I misinterpreted `embedded`.
conaclos··on Zig's Lovely Syntax
I like the idea of repeating the delimiter on every line. However `//` looks like a comment to me. I could simply choose double quote:

    const still_raw =
        "const raw =
        "    "Roses are red
        "    "  Violets are blue,
        "    "Sugar is sweet
        "    "  And so are you.
        "    "
        ";
        "
    ;
This cannot be confused with a string literal because a string literal cannot contain newline feeds.
conaclos··on Requesting Funding for 90s.dev
I got a 404. IS the website still online?
conaclos··on Bits 0x02: switching to Orion as a browser
Yes, and I think it's unlikely that it will support other platforms in future because it's based on Safari.
conaclos··on He Rewrote Everything in Rust – Then We Got Fired
> Rust didn’t fire us. But a Rust rewrite without team buy-in can change who the team even is.

Perhaps the most valuable paragraph of this sad story.

conaclos··on Lua beats MicroPython for serious embedded devs
It is a RP2040. We plan to eventually upgrade to RP2350B.
conaclos··on Lua beats MicroPython for embedded devs
I am currently working on an embedded system with 264Kb of RAM and 4Mb of flash. Do you think Lua could be used in such limited settings? I am also considering the berry scripting language [0].

[0] https://berry-lang.github.io/

conaclos··on Lua beats MicroPython for serious embedded devs
Is Sol2 a Lua VM or just a wrapper to the standard Lua VM?
conaclos··on Optimizing a Math Expression Parser in Rust
I am a bit surprised that the author didn't try to implement a stream parser. This could avoid loading the entire file in memory or relying on OS features like memory-mapped files.
conaclos··on Error handling in Rust
Sure, but it's an additional dependency. I would prefer it if some of this machinery were added to `core`.
conaclos··on Error handling in Rust
Thanks for sharing!

The only thing I disagree with is error wrapping. While I agree that the main error should not expose dependencies, I find it useful to keep a `cause` field that corresponds to the inner error. It's important to trace the origin of an error and have more context about it. By the way, Rust's [Error] trait has a dedicated `cause` method for that!

[Error] https://doc.rust-lang.org/nightly/core/error/trait.Error.htm...

conaclos··on Error handling in Rust
I accept, however this requires to create many types with corresponding implementations (`impl From`, `impl Display`, ...). This is a lot of boilerplate.
conaclos··on Biome v2–Codename: Biotype
Hi! Biome core contributor here.

It could be nice to have a more descriptive title like:

    "Biome 2: first type-aware linter that doesn't require TSC"
Some details about this reelase:

- Type-aware lint rules

- Plugins

- Monorepo support

- Revamped, configurable import sorting

- Linter domains

- Bulk suppressions

- Analyzer assist

conaclos··on Migrating a JavaScript Project from Prettier and ESLint to BiomeJS
Our HTML formatter is ready and will be part of the upcoming Biome v2 release.
conaclos··on Parser Combinators Beat Regexes
I once tried to use parser combinators and I was quite disappointed by the result. I find it harder to read and to handle error than regular recursive descendant parsers.
conaclos··on Pitfalls of Safe Rust
Another limitation I face is the impossibility of using `usize::from(n)` in `const` context.
conaclos··on Pitfalls of Safe Rust
I find it strange that the article doesn't talk about the alternative to checked arithmetic: explicit Wrapping [0] and Saturating [1] types, also provided as methods on numeric types (e.g. `usize::MAX.saturating_add(1)`).

Regarding `as` casting, I completely agree. I am trying to use safe `From::from` instead. However, this is a bit noisy: `usize::from(n)` vs `n as usize`.

[0] https://doc.rust-lang.org/std/num/struct.Wrapping.html [1] https://doc.rust-lang.org/std/num/struct.Saturating.html

conaclos··on Why does JSON have commas?
I kinda disagree with the conclusion. Punctuation is important to humans, it makes it more parsable/readable. I just accept that in a multi-line context they are not so useful, because the newline acts like a kind of punctuation. So I could make them optional and provide some recommendations: use them in a single line, and don't use them when a newline follows.
Page 1 of 11Next →