Hacker News new | ask | show | jobs
by kramerger 1119 days ago
Why

    uint8_t b = 0b1111'1111;

I would rather have

    uint8_t b = 0b1111_1111;

This ' thing is hard to get right on some non-us keyboards. And yes, I've the same problem with Rust.
5 comments

It could be misinterpreted as a user literal [1], for example with 0xAAAA_BBBB it is unclear whether _BBBB is a user literal. The original proposal discusses some of the alternatives [2].

[1] https://en.cppreference.com/w/cpp/language/user_literal

[2] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n34...

Didn't know about this language feature. Seems neat. The ASM integration is also neat. If you compare that to C...

Still, I have rarely seen C++ compilers for embedded systems. Although the latter definition more and more includes PC hardware.

> Still, I have rarely seen C++ compilers for embedded systems.

What kind of embedded systems? Even AVR has a C++ compiler.

Yeah, that was wrong. I meant there are very few serious projects implemented in C++ for µC that are restricted memory wise.

Yes, AVR has a C++ compiler, but I could imagine it doesn't support all language features. If it does it would still be discouraged to use dynamic memory allocation, which is pretty essential to leverage many advantages of object orientated languages.

Of course embedded systems aren't restricted to that anymore and you are perfectly fine to use C++ for the average ARM system that isn't as restricted memory wise.

Still, C++ is very useful on embedded systems. This article is just about that.
These are all valid Rust:

  0b1111_1111
  0b11111111u8
  0b1111_1111_u8
  0b11_11_11_11_u8
https://doc.rust-lang.org/book/ch03-02-data-types.html
Their problem with rust is probably more all the single quotes you need for lifetimes
I think you can't do that, because the underscore may start a user defined literal suffix.
D doesn't have a special syntax for user-defined literals, which avoids this problem completely. One can use templates for user-defined literals, such as:

    km!1000
for 1000 kilometers. Here, km is a template that takes an integer argument:

    struct Kilometer { int v; }

    template km(int V) { Kilometer km = Kilometer(V); }
Are you sure? ' easily accessible on every layout I've looked it. ´ and ` are usually a pain though. There's probably some layout where it's a pain, but it can't be that many.

But oh how I hate `. I had to edit my layout to make it typable for stupid haskell infix functions

> I would rather have > uint8_t b = 0b1111_1111;

In D, you would have:

    ubyte b = 0b1111_1111;