Surely "1337" is the same as 1337, right?
Surely "1337" is the same as 1337, right?
1 11 111 1111 11111 111111
That’s base 1. By convention, because it doesn’t really fit the pattern of positional number systems as far as I can tell, but it gets called that.
Theoretical computer scientists, historians of mathematics.
I’m not sure where I heard the term exactly, but I know I have multiple times.
Thanks for sharing this, it’s quite interesting. I found a Wikipedia article on it: en.m.wikipedia.org/wiki/Unary_numeral_system
Apparently, as you did suggest, “base 1” is a name that is used, but is somewhat a misnomer.
The article mentions that Church encoding is a kind of unary notation, which I would not have thought of, but I guess it is.
Enjoyable little rabbit-hole to zap my productivity for the day.
“true”
Yes, I know the field isn’t nullable in the database. I’m asking you what you are sending me, jack——
(Directed at a colleague)
“Hey, it appears to be int most of the time except that one time it has letters.”
throws keyboard in trash
Sadly it doesn’t fix the bad documentation problem. I often don’t care that a field is special and either give a string or number. This is fine.
What is not fine, and which should sentence you to eternal punishment, is to not clearly document it.
Don’t you love when you publish a crate, have tested it on thousands of returned objects, only for the first issue be “field is sometimes null/other type?”. You really start questioning everything about the API, and sometimes you’d rather parse it as serde::Value and call it a day.
I disagree a bit in that the schema often doesn’t specify limits and operates in JSON standard’s terms, it will say that you should get/send a number, but will not usually say at what point will it break.
This is the opposite of what C language does, being so specific that it is not even turing complete (in a theoretical sense, it is practically)
Then the problem is the schema being under specified. Take the classic pet store example. It says that the I’d is int64. petstore3.swagger.io/#/store/placeOrder
If some API is so underspecified that it just says “number” then I’d say the schema is wrong. If your JSON parser has no way of passing numbers as arbitrary length number types (like BigDecimal in Java) then that’s a problem with your parser.
I don’t think the truly truly extreme edge case of things like C not technically being able to simulate a truly infinite tape in a Turing machine is the sort of thing we need to worry about. I’m sure if the JSON object you’re parsing is some astronomically large series of nested objects that specifications might begin to fall apart too (things like the maximum amount of memory any specific processor can have being a finite amount), but that doesn’t mean the format is wrong.
Underspecified schema is indeed a problem, but I find it too common to just shrug it off
Also, you’re very right that just using strings will not improve the situation 🤝
What makes you think so?
const bigJSON = '{"gross_gdp": 12345678901234567890}'; JSON.parse(bigJSON, (key, value, context) => { if (key === "gross_gdp") { // Ignore the value because it has already lost precision return BigInt(context.source); } return value; }); > {gross_gdp: 12345678901234567890n}Relax, it’s just JSON. If you wanted to not be stringly-typed, you’d have not used JSON.
(though to be fair, I hate it when people do bullshit types, but they got a point in that you ought to not use JSON in the first place if it matters)
As if I had a choice. Most of the time I’m only on the receiving end, not the sending end. I can’t just magically use something else when that something else doesn’t exist.
Heck, even when I’m on the sending end, I’d use JSON. Just not bullshit ones. It’s not complicated to only have static types, or having discriminant fields
I got nothing against other types. Just numbers/misleading types.
Although, enum variants shall have a label field for identification if they aren’t automatically inferable.
false) to show that the value is not set, and of course null for a missing value that was supposed to be optional all along but go figure that it was