7 ms·
One of the best truly micro features I've seen recently (can't remember which langauge unfortunately - it wasn't a mainstream one), is general binary literal sy
by nicoburns 4y ago
One of the best truly micro features I've seen recently (can't remember which langauge unfortunately - it wasn't a mainstream one), is general binary literal syntax of the form:
0x[de ad be ef 00]
So much nicer than the usual condensed format. And I think it'd be valid syntax in any language that allows binary integer literal.
- andix 4y agoA lot of languages allow underscores in numeric literals. Something like 10_000. You can put them anywhere and they get ignored. I don’t know if they also allow it for hex numbers.
- masklinn 4y ago> I don’t know if they also allow it for hex numbers. They do e.g. Python >>> 0x_ab_cd_01_23 2882339107 or >>> 0b_0010_0100 36
- rwmj 4y agoEven C these days, although they chose ' instead of _ :-(
- kwhitefoot 4y agoMy guess is that they did that because there are real human languages where ' is used as a thousands separator.
- xigoi 4y agoThere are also real human languages where a space is used as a thousands separator, and an underscore is kind of the programming equivalent of a space.
- kwhitefoot 4y agoA half space is British Standard for thousands separator if memory serves, also standard in Norway.
- rwmj 4y agoThe reason they used quote is outlined in the proposal: https://open-std.org/JTC1/SC22/WG14/www/docs/n2626.pdf https://open-std.org/JTC1/SC22/WG14/www/docs/n2626.pdf TL;DR is that it's because C++ uses quote. The reason C++ uses quote (they considered underscore) is because of a very obscure feature of C++ called custom literal suffixes which I'd never even heard of, but numbers can be suffixed with a custom identifier, and since single underscore is a valid identifier you can't use that. (https://en.cppreference.com/w/cpp/language/user_literal https://en.cppreference.com/w/cpp/language/user_literal)
- andix 4y agoSwiss German for example. But space, half space and dot is also common in Europe. Just not a comma, because this is used as a decimal separator (fractions) in most countries.
- deleted 4y ago[deleted]
- jbverschoor 4y agoohhh that's cool.. in Ruby you can do 0x_dead_beef_00 or any other combo
- dan-robertson 4y agoIs that giving you a number or a bytestring?
- nicoburns 4y agoA bytestring I think. Although in statically typed languages there's no reason why it couldn't be both depending on the inferred type.
- mncharity 4y agoI like that Elixir bitstrings[1] don't have to be bytes. <<2:3>> is three bits 010. [1] https://elixir-lang.org/getting-started/binaries-strings-and-char-lists.html#bitstrings https://elixir-lang.org/getting-started/binaries-strings-and...
- WalterBright 4y agoD's approach would be: 0xde_ad_be_ef_00
- makapuf 4y agoWouldn't endianness interfere with this notation and the preceding one?
- unsafecast 4y agoOf course it does - endianness interferes with any sort of numeric literal. Doesn't matter if it's hex, decimal, underscored, whatever.
- Wildgoose 4y agoI think you are missing the point - there is no endianness in normal written text, (or code), but there is endianness when that is translated to an actual number - what order are those bytes intended to be used in? (Given they have been listed separately rather than as a single number).
- unsafecast 4y agoWhat order are the bytes in 0xabcd intended to be used in? I don't see how making it 0x[ab, cd] would be ambiguous, it's the same assumption of reading left to right.
- cpurdy 4y agoIt's an interesting mix of "hex" and "array" into one syntactic composition. I do kind-of like it. Here's how we ended up supporting byte strings (# prefix) in Ecstasy, in this case multi-line: Byte[] bytes = #|12 34 56 |78 9a BC |dE f0 ; console.println($|bytes= |{bytes.toHexDump(4)} ); Which prints: bytes= 00: 12 34 56 78 .4Vx 04: 9A BC DE F0 .¼Þð