Ah, blockchains, where people realize all those "it doesn't matter bugs" with 3 layers of indirection due to shaky primitives, actually matter. Other bugs like this could be used to execute arbitrary code on the computer that compiles the software, calling random "important looking" stuff into memory (xz backdoor style) to be decoded and executed by the backdoor. Of course, there will never be a day where you can compile untrusted code in Solidity.
> The lesson? Always test critical software under multiple compilers and library versions — especially when enabling a new language standard.
Don't have giga-complicated language jockey stuff backing software that can't afford to even have one bug.
The only one that needs to compile Solidity is the person who wrote the Solidity, right? Same with non-blockchain software. So a bug in a Solidity compiler will have the same impact as a bug in any other compiler. At least with regard to executing untrusted code.
Unfortunately, Solidity itself is a poorly designed language, especially for something as mission critical as contracts.
Back in 2017, I wrote a comment on HN listing the various WTFs and gotchas I found just from skimming the Solidity docs: https://news.ycombinator.com/item?id=14810008. I went and looked at the current docs, and most of what I wrote back then is still applicable (they did make arithmetic checked by default, and fixed scoping for local variables). There's some other stuff that I missed then that is frankly even more insane - e.g. mappings use solely the hash to look things up (i.e. if you get a hash collision, it will just silently return the wrong value!).
This alone is, to me, a good reason to not trust the ecosystem, given that it's run by people who believe this to be a sensible design for something that handles massive amounts of money.
This stuff is cool as hell. I'd break out a CRT TV and try to get it working, but it feels not worth it without official NTSC or PAL broadcasts. Straight from the analog VBI on air or bust.
In Paris a study showed +3 years of life expectancy for cyclists and +2 for public transport users, compared to car commuters. They correlated it with (not a surprise) the benefits of exercice. Sure the pollution effect is worse outside of your car but the gains of daily light exercise offsets the drawbacks of air pollution.
I don't know, classifieds still exist. Obviously internet is superior for this, but not everyone can afford internet of any kind, since the bloat scaled with Moore's law. 500KB/s right will give you the same rate of browsing articles as dial up in the 90s. Phones have been becoming obsolete after 2 years. That doesn't necessarily dictate the market but yeah.
It's funny you mention 500kb/s. I have a painfully slow connection at home currently (long story). It's exactly in the 500kb/s to 800kb/s range and "dial up speed" is exactly how I describe it.
This is happening across all industries, unfortunately. Medical, engineering, pharmaceuticals, law enforcement, military, transportation, law... Thanks for a perfect post that describes the problem! We need more of these. Most people know they're doing it too, they just need to be told more.
I think robots.txt should be ignored. Everyone wants people to not do things they don't like. We don't have to entertain each and every such one. The future is IPFS or something like it, so "crawling" will be a meaningless act.
My peers and I work on a language centered around "constructive data modeling" (first time I hear it called that). We implement integers, and indeed, things like non empty lists using algebraic data types, for example. You can both have a theory of values that doesn't rely on trapdoors like "int32" or "string", as well as encode invariants, as this article covers.
As I understand it, the primary purpose of newtypes is actually just to work around typeclass issues like in the examples mentioned at the end of the article. They are specifically designed to be zero cost, because you want to not pay when you work around the type class instance already being taken for the type you want to make an instance for. When you make an abstract data type by not exporting the data constructors, that can be done with or without newtype.
The alternative to newtypes is probably to go the same route as OCaml and have people explicitly bring their own instances for typeclasses, instead of allowing each type only one instance?
I think OCaml calls these things modules or so. But the concepts are similar. For most cases, when there's one obvious instance that you want, having Haskell pick the instance is less of a hassle.
I like ML-style modules in principle, but in practice I like the ergonomics of typeclasses.
But while I did nearly half of my career in either OCaml or Haskell, I did all of my OCaml programming and most of my Haskell programming before the recent surge of really good autocompletion systems / AI; and I notice how much they help with Rust.
So the ergonomics of ML-style modules might be perfectly acceptable now, when you have an eager assistant filling in the busy work for obvious cases. Not sure.
> avocado, olive, and coconut oil; ten basic spices; honey, maple syrup, apple cider vinegar, soy sauce, miso, and almond butter.
This is what happens when you use Google for recipes. And a good hint that this article does not represent the average demographic; most people outside of her's do not want room mates good reason.
> The lesson? Always test critical software under multiple compilers and library versions — especially when enabling a new language standard.
Don't have giga-complicated language jockey stuff backing software that can't afford to even have one bug.