I lost all trust in the project since the LLM rewrite. This new step is another red flag to me.
HN user
conaclos
@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
Same here. I prefer bet on community-led projects like Node.js, ESbuild and BiomeJS (or Prettier / eslint).
This is pretty close to SQLite's varints [0]
[0] https://www.sqlite.org/src4/doc/1433690d7b/www/varint.wiki
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.
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`.
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.
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.
Have you tried `firefox --no-remote --profile <path>`?
In my case, I am able to launch several Firefox instances with distinct profiles.
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?
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.
UFCS and the implicit `result` variable remember me the Eiffel programming language [0].
[0] https://en.wikipedia.org/wiki/Eiffel_(programming_language)
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
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`.
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.I got a 404. IS the website still online?
Yes, and I think it's unlikely that it will support other platforms in future because it's based on Safari.
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.
It is a RP2040. We plan to eventually upgrade to RP2350B.
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].
Is Sol2 a Lua VM or just a wrapper to the standard Lua VM?
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.
Sure, but it's an additional dependency. I would prefer it if some of this machinery were added to `core`.
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...
I accept, however this requires to create many types with corresponding implementations (`impl From`, `impl Display`, ...). This is a lot of boilerplate.
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
Our HTML formatter is ready and will be part of the upcoming Biome v2 release.
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.
Another limitation I face is the impossibility of using `usize::from(n)` in `const` context.
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
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.