The Gladwellian direct/indirect dichotomy (or continuum) is a misapprehension of how language works. All communication is indirect in some sense because we don't have mind control powers over our fellow humans. Even saying ‘I want to buy this bread’ is indirect in a sense: you're not causing the baker to sell you the bread, nor even explicitly instructing them to, but just stating your personal internal desires. It is a cultural construct that being told someone's internal desire is supposed to function as a ‘direct’ instruction to satisfy it, and even in that there is a lot of room for ambiguity depending on context etc. For example, if I were speaking not to the baker but to my friend as we peruse the bakery together, ‘I want to buy this bread’ could have a variety of intended impacts on their actions. It could mean ‘let's come to an agreement about whether we should collectively buy this bread’. It could mean ‘pass me my wallet so I can pay for the bread’. It could mean ‘go and find me a shopkeep who can legally sell me the bread’. It could just mean ‘you are my friend and I'm telling you my internal monologue so that you can understand me better’.
If you interpret the language of a different culture (separated by space or time — try reading the ‘flowery’ language of Victorian or Elizabethan literature) too literally, it reads as ‘indirect’. But that doesn't mean that the native speakers from that culture consider it so. You're simply missing the cultural context that makes their phrasing as ‘direct’ to them as ‘I want to buy this bread’ is to you.
> The Gladwellian direct/indirect dichotomy (or continuum) is a misapprehension of how language works. All communication is indirect in some sense because we don't have mind control powers over our fellow humans. Even saying ‘I want to buy this bread’ is indirect in a sense
If you take 'direct' vs. 'indirect' literally, you are right. Everything is somehow indirect, because language tries to represent reality, but isn't identical to reality.
But you are missing the point. The real issue is information density. Indirect communication generally has lower information density: You give examples of various possible interpretations of one phrase, and the more possible interpretations there are, the lower the information density is. The longer the phrase is, the lower the information density. One can come up with a few counter-examples, where for example a very long and very indirect phrase might just have one very unique and direct interpretation, but those are rare. In general, direct communication conveys more information with less words.
Sure, if we want to shift topic from directness to density, but that's not a cultural difference either: all (spoken) languages famously transmit at about 39 bits per second [1]. Specific idioms, especially newer ones, might be a bit more or less information-dense, but there will always be others that make up for it. And if an idiom falls too far below the 39 B/s rate it'll get worn down over time to something shorter.
If you are shortening your communication you are doing it by reducing the information content. In some cultures it's acceptable to spend longer buying bread than in others, so you might take the time to exchange more information with the baker. But that is a (to them, if not to you) valuable interaction that they have chosen to have, filled with information whose exchange is (to them) just as important as the price of bread.
> Are you implying other people's emotional immaturity is exclusively my problem to solve?
Emotional maturity (from most standpoints) does not mean being completely emotionally unaffected by other people's communication. Insofar as it is emotional immaturity that gives rise to a particular emotional response it might be ethically that person's duty to work on it, if that's how your personal ethics works. But from a pragmatic perspective if you want to get something done that involves that person as a colleague or collaborator it's probably not going to be productive to continually bash your head on their psychological quirks until they go to therapy. You'll have much more luck adapting your own communication to be more aligned with their needs, regardless of how reasonable you personally think those needs are.
If you can't or don't want to put in the effort to do that your other option is to make sure you surround yourself with people who can already communicate effectively and relatively comfortably in the communication style you consider natural. You can cut off relationships, move jobs, or fire people to purge everyone else from the circle of people you have to interact with. But you'll be missing out on all the positive contributions of those people, who probably bring viewpoints alien to you, and you run the risk of sycophancy. Plus you'll have a harder time finding people to date/collaborate with/employ/… if you restrict your pool that way.
In practice I think people tend to end up somewhere in the middle of that spectrum. They'll decide a maximum investment of energy they're willing or capable of putting into accommodating other people's needs, and make sure that work × time doesn't exceed that threshold.
I agree with the pragmatism. I think pragmatically yes, it is my responsibility. In a very real sense, I am able to respond, being aware of the emotions, even if perhaps the person I am speaking to is not.
I guess I have a hard time viewing this as anything but intentional emotional manipulation.
Adapting your communication doesn't have to imply deception or even insincerity, it just means understanding what's important to your target audience and making sure to address it. Sometimes that's something like financial impact or user focus; sometimes it's emotional reassurance or intellectual challenge.
Sometimes what you're trying to get them to do is understand something that you (think you) understand.
There's a reason software has tutorials as well as reference documentation. Sometimes telling someone something directly isn't as effective at getting them to understand it as explaining it more slowly or obliquely. Sharing your learning journey to arrive at the understanding is (one possibility for) presenting a working path to understanding.
It's also the case that, especially when someone's knowledge diverges a lot from your own, it may not be obvious to them what information is relevant to you — and it may even be surprising to you. As an extreme example, there was a bug where OpenOffice wouldn't print on Tuesdays [1]. This happens a lot with non-technical users, but can also happen with other technical people who don't have the same level of understanding of a particular subsystem (in both directions — if you understand it better they may not know what information is key to understanding its behaviour, and if they understand it better they may not realize what information they're taking for granted that you don't know — e.g. the famous joke about ‘monads are just monoids in the category of endofunctors, what's the problem?’). As I've spent more time in technical discussions I've got better at homing in on the information I need — but I can't materialize information that wasn't given to me in the first place. So I'd rather people shotgun information at me than narrow it down to just the one point that they think is relevant.
Message passing is a type of mutable shared state — but one that's restricted in some important way to eliminate a certain class of errors (in Erlang's case, to a thread-safe queue with pairwise ordering guarantees so that all processing on a particular actor's state is effectively atomic). You can also pick other structures that give different guarantees, e.g. LVars or CRDTs make operations commutative so that the ordering problems go away (but by removing your ability to write non-commutative operations). The big win for the actor model is (just) that it linearizes all operations on a particular substate of the program while allowing other actors' states to be operated on concurrently.
Nobody argues that any of these approaches is a silver bullet for all concurrency problems. Indeed most of the problems of concurrency have direct equivalents in the world of single-threaded programming that are typically hard and only partially solved: deadlocks and livelocks are just infinite loops that occur across a thread boundary, protocol violations are just type errors that occur across a thread boundary, et cetera. But being able to rule out some of these problems in the happy case, even if you have to deal with them occasionally when writing more fiddly code, is still a big win.
If you have an actor Mem that is shared between two other actors A and B then Mem functions exactly as shared memory does between colocated threads in a multithreaded system: after all, RAM on a computer is implemented by sending messages down a bus! The difference is just that in the hardware case the messages you can pass to/from the actor (i.e. the atomicity boundaries) are fixed by the hardware, e.g. to reads/writes on particular fixed-sized ranges of memory, while with a shared actor Mem is free to present its own set of software-defined operations, with awareness of the program's semantics. Memory fences are a limited way to bring that programmability to hardware memory, but the programmer still has the onerous and error-prone task of mapping domain operations to fences.
Since I am not familiar enough with Erlang to know, is that actually the same as concurrent code? I can certainly see how it would share many of the same logical issues, but does sharing an actor imply that you can have non-atomic operations on the actor, like inconsistent writes and reads? I was under the impression that it would at least be atomic because actors are single-threaded. It even guarantees message ordering, while memory does not in some widely used hardware architectures.
You can of course rebuild data races inside Erlang with the right set of messages, but it's not surprising that you can emulate a Turing-complete computer in a Turing-complete language.
The operations are atomic because of the single-threaded nature of actors. But the operations can be arbitrarily ordered, except for the pairwise ordering constraint (which mirrors the happens-before relation on memory within a thread). If your memory actor has operations like ‘read address’ and ‘write address’ then yes, you precisely get the behaviour we enjoy from shared memory: if you read one address A then address B someone might have changed both of them in the meantime, and if you write A then read it back it might have been changed in the meantime.
The difference is that you're not limited to just ‘read address’ and ‘write address’ operations: the shared actor gets to define higher-level operations that are atomic over larger sections of code.
tbh I think "concurrently shared memory that has no data races" is pretty significantly different from practically every other example of shared memory out there. you'll get Mem's behavior in single threaded async system with immutable data (because another actor can't mutate the data you've already received), but I can't think of anything else. that misses on both concurrency and "shared memory" since it's not actually shared. it's shared-readable or something along those lines.
Mem as I set it out above is an example of multi-threaded, mutable data. Another process can't alter the data you've received, indeed, just as in a shared-memory system another thread can't alter the data after you copy it out of shared memory into your registers or an unshared memory space. But if you're storing the data in shared memory (a.k.a. requesting it from Mem every time) then you are racing with other actors who have access to Mem.
A data race implies getting results that are not allowed by the single-threaded semantics of the API - corruption, basically. It sounds like that's not possible because the API is strictly single threaded, and any data you receive is copied (I think?) so it can't be mutated afterward. Which also means it's not shared memory - you are not sharing ownership of it, you're exclusively using copies.
You're describing a logical race, something unintended but allowed due to interleaving behavior, not a data one. Logical races are a heck of a lot harder to prevent without going fully proof-oriented.
The shared memory in the Mem setup is not the local copies of the values after reading from Mem (just as the registers or private memory ranges of a thread are not shared) but (the internal state of) the Mem actor itself.
To phrase my point here a bit differently, the distinction between a data race and a logical race is purely the scope of the expected consistency. In the standard multi-threaded case as well, if you read a single word from the memory it will definitely be consistent — you'll get the result of either one write or another, never half of the word from one write and half from the other. But values in real programs are usually bigger than a single word, and once you read two words from the memory it becomes possible (ignoring for the sake of argument the facilities modern memory provides for reading larger memory ranges atomically; feel free to replace ‘word’ with your atomic unit of choice) to get one word from one write and one word from another. As words these are consistent — they're both valid words and they both come from an intentional write — but put together they may not form a coherent value of the higher-level type you meant to read. This is how you get ‘corrupted’ data: the notion of corruption comes not from the memory semantics but from the semantics of the type that the memory is being used to represent. This applies exactly the same to Mem: each word is, as you say, consistent, but if you try to read a value by doing two reads, the resulting value may be ‘corrupt’ (formed by the interleaving of two writes) depending on what other threads are doing with Mem at the time.
>you can emulate a Turing-complete computer in a Turing-complete language
If you've created semantics that allow for incomplete reads/writes, you allow incomplete reads/writes.
The semantics don't seem to exist natively though - if you write a large object in one message and read it in another, is it possible to read part of your object, and part of another that some other message wrote, meaning you get data that no message ever wrote? Or is it always some "real" value?
No, a message is always consistent, both in the actor model and in hardware memory. My point is just that if you restrict your messages to those supported by hardware memory, you get exactly the same semantics when sharing the actor as you do for hardware shared memory. However, the actor model _also_ allows you to define higher-level messages that are consistent in a way that is defined by the application semantics.
>> you can emulate a Turing-complete computer in a Turing-complete language
> If you've created semantics that allow for incomplete reads/writes, you allow incomplete reads/writes.
That's true, but isn't entirely relevant to the discussion for a few reasons. First, Turing-completeness does not require the existence of race conditions; it is perfectly possible to have a Turing-complete language (for example, standard Turing machines!) that doesn't have the ability to define data races. Second, my entire point here is that you don't have to ‘create semantics that allow for incomplete reads/writes’. That semantics is a subset of the standard actor semantics. In fact, I am claiming more broadly that all reads/writes are either complete or incomplete (to borrow your terminology) depending on your semantic perspective. The reads/writes of standard hardware shared memory are also ‘complete’ from the perspective of reading/writing individual words; the problem is just that almost all applications need a notion of ‘completeness’ that is higher-level than that, which gives rise to the (relativistic!) notion of ‘data race’.
> a thread-safe queue with pairwise ordering guarantees so that all processing on a particular actor's state is effectively atomic
> The big win for the actor model is (just) that it linearizes all operations on a particular substate of the program while allowing other actors' states to be operated on concurrently.
Came here to say exactly those two things. Your comment is as clear as it could be.
The problem with precise law enforcement is that the legal system is incredibly complex. There's a tagline that ‘everybody's a criminal’; I don't know if that's necessarily true but I do definitely believe that a large number of ‘innocent’ people are criminals (by the letter of the law) without their knowledge. Because we usually only bother to prosecute crimes if some obvious harm has been done this doesn't cause a lot of damage in practice (though it can be abused), but if you start enforcing the letter of every law precisely it suddenly becomes the obligation of every citizen to know every law — in a de facto way, rather than just the de jure way we currently have as a consequence of ‘ignorance of the law is no excuse’. So an increase of precision in law enforcement must be preceded by a drastic simplification of the law itself — not a bad thing by any means, but also not an easy (or, perhaps, possible) task.
The reason speed limits make such a great example for these arguments is because they're a preemptive law. Technically, nobody is directly harmed by speeding. We outlaw speeding on the belief that it statistically leads to and/or is correlated with other harms. Contrast this to a law against assault or theft: in those kinds of cases, the law makes the direct harm itself illegal.
Increasing the precision of enforcement makes a lot more sense for direct-harm laws. You won't find anyone seriously arguing that full 100% enforcement of murder laws is a bad idea. It's the preemptive laws, which were often lazily enforced, especially when no real harm resulted from the action, where this all gets complicated. Maybe this is the distinction to focus on.
This unwritten distinction exists only to allow targeted enforcement in service of harassment and oppression. There is no upside (even if getting away with speeding feels good). We should strive to enforce all laws 100% of the time as that is the only fair option.
If a law being enforced 100% of the time causes problems then rethink the law (i.e. raise the speed limit, or design the road slower).
> If a law being enforced 100% of the time causes problems then rethink the law (i.e. raise the speed limit, or design the road slower).
Isn't this the point of the whole conversation we are having here?
Laws on copyright were not created for current AI usage on open source project replication.
They need to change, because if they are perfectly enforced by the letter, they result in actions that are clearly against the intent of the law itself.
The underlying problem is that the world changes too fast for the laws so be fair immediately
What would really help is for people to understand that that's the "spirit of the law" and the "letter of the law".
People don't want the letter of the law enforced, they want the spirit. Using the example from above, speed limits were made for safety. They were set at a time and surprise, cars got safer. So people feel safer driving faster. They're breaking the letter of the law but not the spirit.
I actually like to use law as an example of the limitations of natural languages. Because legalese is an attempt to formalize natural language, yet everyone seems to understand how hard it is to write good rules and how easy it is to find loopholes. But those are only possible if you enforce the letter of the law. Loopholes still exist but are much harder to circumvent with the spirit of the law. But it's also more ambiguous, so not without faults. You have to use some balance.
In general cars have also gotten safer for pedestrians[0]. Modern cars are lighter and made of plastic. There's better visibility, sensors, and for most vehicles the shape of the car has improved things.
American trucks are an interesting counter example but that's a more complicated issue. (The source has a comment that you can infer this being a concern with trucks but there's also a lot of sources on this that you can easily find)
The reason that has to be done is precisely that the law has no common, well-architected rationale. The vast majority of law in common-law jurisdictions is ad hoc precedent from decades or centuries ago, patchwork laws that match current, ephemeral intuition about what the law should be, etc. Perfect and inevitable enforcement makes this situation a nightmare, given the expectation that the average US citizen commits multiple felonies per day. Something will have to give.
The speed limit example is a great one. Consider a road that has a 35mph limit. Now - which of the following scenarios is SAFER:
a) I'm driving on the road in a brand new 4x4 porsche on a sunny day with great visibility and brand new tyres. Doing 40mph.
b) I'm driving on the same road in a 70s car with legal but somewhat worn out tyres, in the dark, while it's raining heavily. Doing 35mph.
Of course technically option a is violating the law but no sane police officer will give you a fine in this case. Nor should they! A robot will, however. This is stupid.
The Cayenne would be safer going 35 instead of 40 regardless of all other variables. It's a trivial physics question, kinetic energy is a function of mass and velocity.
The Cayenne would not be safer going 35 instead of 40 "regardless of all other variables": it's statistically safer to go closer to the flow of traffic because you're then "at rest" with respect to other drivers (assuming a controlled access road without pedestrian traffic). If the speed limit is 55 and the flow of traffic is 70–80 (as is the case with the Beltway around DC, despite automated enforcement), then going 55 is more dangerous than "speeding". The issue with 100% enforcement is every law assumes certain circumstances or variables and the real world is infinitely more complex than any set of variables that can reasonably be foreseen by law (and laws that attempt to foresee as many variables as possible are more complicated and, consequently, harder for normal people to apply, which is another reason for latitude in enforcement).
The reason we have speed limits isnt due to vehciles being unable to 'handle' certain speeds though, it's to minimise the damage of an incident at that speed, which is entirely a matter of physics.
No, that is not true. I used to work on road signage systems, where we would use test vehicles, sensors, and math to figure out what the correct signage should be for various sections of road. The standards are primarily concerned with maintain a margin of error for the "worst" cars on the road, i.e. the ones that meet only the minimum inspection requirements. What happens once that margin of error is exceeded was anyone's guess, but practically could be wildly different for specific scenarios that had more to do with the off-road environment than the exact parameters of the road. Two roads with identical bends would receive the same signage regardless of whether under steering through the curve would land you on a sidewalk or in a field or over a cliff.
AFAICT at least 2 people in this thread don't seem to think that visibility -- a function of, among other things, weather and time of day -- influences driving safety. I find this amazing.
The point of terryf's example was to point out that for practical reasons, existing laws don't capture every relevant variable. I (but not everyone, it seems) think that visibility obviously influences safety. The point I want to make is that in practice the "precision gap" can't be perfectly rectified by making legality a function of more factors than just speed. There will always be some additional factor that influences the probability of a crash by some small amount -- and some of the largest factors, like individual driving ability, would be objected to on other grounds.
If there was an accident an officer might give you a fine in both cases where I live. In the Porsche case they can say you broke the law and were speeding that led to the accident. But also in the case of old car for failing to adjust your speed to your skills, the state of your vehicle and conditions of the road and weather regardless of the speed limit.
The classic. In Bulgaria they used to do that (and maybe still do). Every time there was an accident they'd often write up everyone for "speed not matching the conditions" with the idea that all accidents are avoidable, you just weren't going fast/slow enough so git gud and don't forget to pay in the next 2 weeks to get a discount.
Yes! This is exactly the point - machinistic enforcement makes no sense in case of speed limits. All laws about driving explicitly say that at the end of the day it's the driver's responsibility to drive safely and if they cause an accident, then they are at fault in some cases even if they followed the speed limit.
The point is that whether you drove dangerously is not a strict, machinistic "if-then" assessment. Automatic enforcement of speeding is ridiculous when viewed in this context.
And the people saying "yes but there is more energy in a faster vehicle" have clearly not felt the difference between driving a car with drum brakes vs modern brakes.
If speed limits were automated rigidly enforced 100% of the time, it would be impossible to drive.
>only to allow targeted enforcement in service of harassment and oppression
That's absurd hyperbole. A competent policeman will recognise the difference between me driving 90 km/h on a 80 km/h road because I didn't notice the sign. And me driving 120 km/h out of complete disregard for human life. Should I get a fine for driving 90? Yea, probably. Is it a first time offence? Was anyone else on the road? Did the sign get knocked down? Is it day or night? Have I done this 15 times before? Is my wife in labour in the passenger seat? None of those are excuses, but could be grounds for a warning instead.
> If speed limits were automated rigidly enforced 100% of the time, it would be impossible to drive.
Why? Plenty of people drive in areas with speed cameras, isn't that exactly how they work?
> That's absurd hyperbole. A competent policeman will recognise the difference between me driving 90 km/h on a 80 km/h road because I didn't notice the sign.
I'm not sure it is hyperbole or that we should assume competence/good faith. Multiple studies have shown that traffic laws, specifically, are enforced in an inconsistent matter that best correlates with the driver's race.
Please shred your drivers license immediately, if you at any point in your life have exceeded the speed limit by any amount, or otherwise violated the traffic regulations in any way whatsoever.
Why? 1) If grandparent commenter got a moving violation, shouldn't they just face the corresponding - why posit a made-up penalty for the violation? 2) And if people know there is perfect enforcement, wouldn't they be expected to adjust their behavior going forward, such as driving enough below the limit that they won't accidentally exceed it?
>driving enough below the limit that they won't accidentally exceed it
That is precisely why traffic would effectively grind to a halt. Because going even 0,0001 over the limit is so easy, you would have to turtle through traffic to get anywhere while making certain you never go above the limit. 50km zone is now 30km, and you didn't decelerate quickly enough and were going 32km at the threshold. 60km zone, but you accelerated too quickly and hit 61km for a moment. And sometimes, rarely, but sometimes you have to accelerate yourself out of a dangerous situation.
Honestly if you are arguing for this idea, I strongly suspect you have no experience driving. I've driven for about 25 years. I've received two speeding tickets. One in Germany (I'm danish), where I got confused due to unfamiliar signage and got dinged for going 112km in a 100km zone. And once here I got a ticket for going 54 in a 50 - my mom was at the hospital, possibly about to die (she didn't). Both of those were speed traps.
How close to your desired speed are you able to maintain?
> 50km zone is now 30km, and you didn't decelerate quickly enough and were going 32km at the threshold.
Is the argument that you and others would be unable to safely achieve the posted speed within the speed limited area? For example, if you feel you can't drive more precisely than 40-50 when you are aiming for 45, in the above scenario, you could start with your goal being 45, then in the 30 zone aim for 25, knowing that you'd be going no faster than 30 when your intend to drive 25.
> 60km zone, but you accelerated too quickly and hit 61km for a moment.
Should you aim for 55, if for example the most precise you can do is +/- 5? Or adjust correspondingly for how precise you are able to keep within a desired range.
And of course:
* In a world where enforcement was more consistent, we might expect speed limits to eventually be adjusted - i.e. are speed limits currently set lower than what is technically safe because we assume that some portion of people will currently break the law?
* With self-driving, or at least automated speed-keeping (but not steering) there will no longer be the issue of someone having the problem of being unable to stay within x km/h of the speed they're targeting.
I know how to drive a car. I usually set speed limiter to the posted speed +3km. Measured with GPS, this hits the desired speed accurately. The point in this absurd scenario is that perfect enforcement of the speed limits is asinine, because if you make any mistake at all, no matter how insignificant, you get fined.
>automated speed-keeping
My car displays what it thinks is the speed limit on the dashboard, and it gets it wrong all the time. If I relied on that in this hypothetical, I would be broke and homeless - possibly in prison, after it once said the limit was 110km on a narrow residential street.
Are the scenarios you laid what you honestly expect the world would turn out to be like if the world changed in the coming years so that speed laws are consistently applied? It seems like you believe that if the law was consistently applied, nothing else would change -- not the laws, speed limits, conservative behavior, etc (whether based on lawmakers' actions nor voters' demands) (other than the enforcement/penalty frequency going up to match how often people break the law)?
Isn't that like saying "What would the effects be if time travel existed" but assuming that doesn't then prompt any changes in human behavior, laws, other technologies, etc. from what people were doing everyday and what existed before it? When discussing "What if x changed", I think we need to also take into account the other changes in laws, behaviors, etc. that one expects that to then prompt - whether big or small.
> perfect enforcement
Isn't consistent enforcement of the law far better than the current inconsistent and unequal enforcement, where people already face unequal enforcement for 'driving while black', where if an officer is having a bad day or doesn't like you they can already cite you strictly, and where other people are regularly able to get away with 20 mph over a limit, where every driver and officer guesses/decides for themselves about whether the current limit should be strictly enforced vs allow 5 over, 15 over, etc etc?
> I usually set speed limiter to the posted speed +3km. Measured with GPS, this hits the desired speed accurately.
So instead of aiming for 33 in a 30 km zone, couldn't you aim for a slightly lower number in order to avoid the scenario you expect for yourself where if the law was consistently applied you would be "would be broke and homeless - possibly in prison"?
That is completely different argument. Yes, I exceeded speed limit here and there. I am not deluded enough to think it was "unavoidable" or "impossible to drive slower".
It is perfectly possible to drive and obey all speed limits. It is even technically easy. Us people choosing not to do so, because we are impatient, feeling competitive against other drivers or because we just think we can get away with it now does not make it impossible.
Laws can't be enforced 100% of the time because many laws require intent, which is unknowable. You have to make an educated guess behind it. Even if someone tells you their intent, straight up, you still don't know their intent. You just know what they want you to think their intent is, which may or may not be the same thing. It's legitimately unknowable.
Ideally, for a lot of things we want to punish people who knowingly do bad stuff, not people who do bad stuff because they thought it was good.
Very true but not in all cases. In case of speed limit intent does not matter; "I didn't know I was speeding" is no excuse. Same with DUI.
In fact DUI should be a mitigating circumstance, because when you're drunk your ability to make decisions is impaired -- but the opposite happens, DUI is an aggravating circumstance.
Same argument applies. Driving slowly for 1km 0.01 under the speed limit, over legal blood alco limit is safer than driving at the speed limit for 10kms just under the alco limit.
It's very easy to come up with thought experiments to show that technically illegal scenarios are not necessarily more dangerous than some legal scenarios.
The law is often made to be easy to apply, not for precision. Hard to see how anyone could see otherwise.
That's not say that the laws are necessarily problematic. You have to draw the line somewhere.
I think I would expect certain laws that are currently considered statutory / strict-liability laws, to be shifted to instead constitute only "evidence of negligence" and/or act as "aggravating conditions."
So, in the case of speeding:
- Speeding on its own would only automatically "warrant" the police to stop you / interview you / tell you off, and perhaps to follow you around for a while after they pull you over, to ensure you don't start speeding again (and to immediately pull you over again if you do.) I say "warrant" here because this doesn't actually give them any powers that private citizens don't have; rather, it protects them from you suing them for harassment for what they're doing. (Just like a "search warrant" doesn't give the police any additional powers per se, but rather protects them from civil and criminal damages associated with them breaking-and-entering into the specified location, destroying any property therein, etc.)
- But speeding while in the process of committing some other "actual" crime, or speeding that contributes to some other crime being committed, may be an aggravating factor that multiplies the penalty associated with the other act, or changes the nominal charge for the other act.
We might also then see a tweak for "threshold aggravations", such that e.g.
- Speeding while also doing some other dumb thing — having your brake-lights broken, say — may be considered to "cross a threshold" where they add up to an arrest+charge, even though none of the individual violations has a penalty when considered independently.
This would, AFAICT, translate well into a regime where there are little traffic-cop drones everywhere, maximizing speeding enforcement. If speeding is all they notice someone doing, they'd just be catch-and-release-ing people: pulling them over, squawking at them, and flying away. Literal slap-on-the-wrist tactics. Which is actually usefully deterrent on its own, if there are enough of these drones, and they just keep doing it, over and over again, to violators. (Do note that people can't just "not pull over" because they know there are no penalties involved; they would still be considered police, and "not complying with a police stop" would, as always, be a real crime with real penalties; if you run from the drone, it would summon actual cars to chase you!)
---
Oddly, I think if you follow this legal paradigm to its natural conclusion, it could lead to a world where it could even be legal to e.g. drive your car home from the bar while intoxicated... as long as you're driving at 2mph, with your hazards on, and avoiding highways. But miss any of those factors, and it "co-aggravates" with a "driving recklessly for your reaction speed" charge, into an actual crime.
>(Do note that people can't just "not pull over" because they know there are no penalties involved; they would still be considered police, and "not complying with a police stop" would, as always, be a real crime with real penalties; if you run from the drone, it would summon actual cars to chase you!)
Or perhaps people will not be able to just "not pull over" because the police drones will be given the power to remotely command their car to stop. Heck, why even have the drones? Just require that the car monitor speeding infractions and report them for fines. Serious or repeat offenders can have their throttles locked out to the speed limit of the current road.
Sure, in the same way that vehicles without backup cameras or even airbags still exist. They will become less common over time. Vehicles don't have to be fully autonomous to provide this "service". They just need to have a reliable grasp of which road segment they are on and what the speed limit is. It will take some time but it won't be long before there are no cars left on the road that lack the (at least theoretical) ability to be controlled via cell radio. Heck, even without a police incentive, this will happen just because remotely disabling a car is a great way to simplify repossession.
I personally happen to think this is a terrible idea, just one cyber attack or regime change away from crippling everyday Americans ability to get around and live their lives, but that probably won't stop it from happening.
I would note that motorcycles, ATVs, tractors, etc. still don't have seatbelts or airbags. And sure, that's partly because, for some combinations of safety feature x vehicle class, they fundamentally can't. But we could have just outlawed public road use by those vehicle classes because of that. We didn't, because the lack of much more basic safety features (e.g. a roll cage) was already "priced in" to our decision to allow those vehicle classes on the road to begin with. These vehicle classes represent different trade-offs in safety-space, that operators of all vehicles sharing the road are highly aware of, maintaining a sort of mutual understanding of vulnerability of the different types of vehicles they're sharing the road with.
(That is: it's not just that motorcyclists themselves are more aware that they could be fatally T-boned (and so drive more defensively / keep more distance to avoid that outcome); it's also that drivers of heavier vehicles who encounter a "trolley problem" where they can either veer to hit a car, or to hit a motorcyclist, are aware that there's far less metal protecting the motorcyclist from the impact — so they are very likely to choose to veer to hit the car instead.)
And because of this, I would expect that we would never truly see the elimination of speed-limiter-less road vehicles, even if all cars were mandated to have them. There's just too many other things on the road (motorcycles, ATVs, tractors and construction equipment, e-bikes, etc) that are designed with these different safety trade-offs, such that they would likely never end up having the speed limiting imposed on them.
And that's enough things still on the road that could be dangerous if they hit someone, that would need to be pulled over for speeding, that I wouldn't imagine we'd see "off-board" speeding enforcement go away any time soon.
A guy on a literbike can drive at such stupidly fast speeds that he can't actually be pulled over already. By and large, society continues to function despite the occasional scofflaw doing 180 in a 55. They don't even tend to kill bystanders all that often.
I would imagine that if, say, 95% of vehicles on the road were incapable of speeding, there would be very little reason for the police to attempt to stop the other 5%. You'd probably still have token speed enforcement, but without the revenue raising potential of frequent speed tickets, it would likely make sense to direct enforcement resources elsewhere.
To wit, in some places you will be issued a DUI (of sorts) for riding a bicycle home from the bar. And it's actually enforced. Talk about the police shooting themselves in the foot.
> I do definitely believe that a large number of ‘innocent’ people are criminals (by the letter of the law) without their knowledge.
Because of that (or rather, to sort out the mess), I always felt that citizens should have a right to be informed of every law that they are expected to obey so that at least in principle, they'd be able to comply (to be effective, plain language explanations would need to be included).
Imagine an app that told you, whenever you cross state boundaries, what is different in the law now from your previous location.
They certainly have the right. All laws are (effectively?) public in every country I can think of, even when the law is ‘don't upset the not-so-benevolent dictator’. The problem is that to try to cover all the corner cases the sheer amount of law in effect in rule-of-law countries is too much for any one human to realistically consume, and that's before getting into the various _interpretations_ of the laws given by case law, precedent, etc. Any ‘plain-language’ explanation would be a) still gigantic and b) wrong in new and exciting ways — this is why the entire profession of ‘lawyer’ exists.
To make this more practicable you might be able to drastically narrow the context of the information, e.g. to the current task. So you could have an app that watches everything you do and tells you if you're (possibly) about to break a law. The extreme version of this looks like wearing a body camera at all times and having a little ‘voice of the state’ in your ear that tells you what your legal options are on every circumstance. Maybe a little dystopian, especially if it starts reporting you if you don't follow its guidance.
Precise law enforcement would motivate political will to proactively law change to be more precise and appropriate, or tuned, to the public sentiment.
Imprecise law enforcement enables political office holders to arbitrarily leverage the law to arrest people they label as a political enemy, e.g. Aaron Swartz.
If everyone that ever shared publications outside the legal subscriber base was precisely arrested, charged, and punished, I dont think the punishment amd current legal terrain regarding the charges leveraged against him would have lasted.
"Law is about justice" is one of those things a good professor gets every 1L to raise their hands in agreement to before spending the next semester proving why that's 100% not the case.
Justice is part of a moral framework. Law is part of a procedural framework. You can structure the law to try to optimize for justice, but the law has never been about morality, the law is about keeping society operating on top of whatever structure is dominant.
Example: the Supreme Court ruled in Ozawa v. United States in 1922 that a Japanese descended person could not naturalize as a US citizen despite having white skin because he was not technically Caucasian. The next year in 1923 they ruled in United States v. Bhagat Singh Thind that an Indian descended man could not natural despite being Caucasian because his skin was not white.
Why did the court give two contradictory reasons for the rulings which would each be negated if the reasoning were swapped? I wouldn't say it was for justice. It was because America at that time did not want non-white immigrants, and what 'white' is, is a fiction that means something completely different than what it claims to mean, and the justices were upholding that structure.
> FWIW I prefer `futures::lock::Mutex` on std, or `async_lock::Mutex` under no_std.
Async mutexes in Rust have so many footguns that I've started to consider them a code smell. See for example the one the Oxide project ran into [1]. IME there are relatively few cases where it makes sense to want to await a mutex asynchronously, and approximately none where it makes sense to hold a mutex over a yield point, which is why a lot of people turn to async mutexes despite advice to the contrary [2]. They are essentially incompatible with structured concurrency, but Rust async in general really wants to be structured in order to be able to play nicely with the borrow checker.
`shadow-rs` [3] bears mentioning as a prebuilt way to do some of the build info collection mentioned later in the post.
Author of the article here! I've actually come to agree with you since writing that article. I'm actually not a fan of mutexes in general and miss having things like TVars from my Haskell days. Just to shout out a deadlock freedom project that I'm not involved in and haven't put in production, but would like to see more exploration in this direction: https://crates.io/crates/happylock
Thanks for the article! As someone who writes a lot of Rust/JS/Wasm FFI it gave me some good food for thought :)
Yes! Mutexes are much nicer in Rust than a lot of languages, but they're still much too low-level for most use-cases. Ironically Lindsey Kuper was an early contributor to the Rust project and IIRC at roughly the same time started talking about LVars [1]. But we still ended up with mutexes as the primary concurrency mechanism in Rust.
I try to avoid tokio in its entirety. There are some embedded use cases with embassy that make sense to me, but I have never needed to write something that benefited from more threads than I had cores to give it. I don't deny those use cases exist, I just don't run into them. I typically spend more time computing than on i/o but so many solid libraries have abandoned their non-async branches I still have to use it more often than I'd like. I get this is a bit of a whine, I could fork those branches if I cared that much. But complaining is easier.
I think the dream is executor-independence. You shouldn't really need to care what executor you or your library consumer is using, and the Rust auto traits are designed so that you can in theory be generic over it. There are a few speed bumps that still make that harder than it really should be though.
I'm not sure what you mean by ‘more threads than I had cores’, though. Unless you tell it otherwise, Tokio will default to one thread per core on the machine.
When you are compute bound threads are just better. Async shines when you are i/o bound and you need to wait on a lot of i/o concurrently. I'm usually compute bound, and I've never needed to wait on more i/o connections than I could handle with threads. Typically all the output and input ip addresses are known in advance and in the helm chart. And countable on one hand.
Oh, right, sure. In Rust the async code and async executor are decoupled. So it's your _executor_ that decides how/whether tasks are mapped to threads and all that jazz.
Meanwhile the async _code_ itself is just a new(ish), lower-level way of writing code that lets you peek under an abstraction. Traditional ‘blocking’ I/O tries to pretend that I/O is an active, sequential process like a normal function call, and then the OS is responsible for providing that abstraction by in fact pausing your whole process until the async event you're waiting on occurs. That's a pretty nice high-level abstraction in a lot of cases, but sometimes you want to take advantage of those extra cycles. Async code is a bit more powerful and ‘closer to the metal’ in that it exposes to your code which operations are going to result in your code being suspended, and so gives you an opportunity to do something else while you wait.
Of course if you're not spending a lot of time doing I/O then the performance improvements probably aren't worth dropping the nice high-level abstraction — if you're barely doing I/O then it doesn't matter if it's not ‘really’ a function call! But even so async functions can provide a nice way of writing things that are kind of like function calls but might not return immediately. For example, request-response–style communication with other threads.
I agree. Async makes sense for Embassy and WASM. I'm skeptical that it really ever makes sense for performance, even if it is technically faster in some extreme cases.
Zip isn't uniformly distributed numbers though so you dont have the equivalent of that many digits of decimal numbers. Other comments have more detail but just for the top level example the first number is the zone and goes from 0 on the east coast to 9 on the west.
Only if there's never more than 10,000 addresses in a single zip code, which means that if you enforce that, you can force a zip code to appear by building enough house
I think my point is that if you're going to make people learn a 9-digit identifier for their house you might as well make that identifier unique and then that's the only information they need to fill in. Having non-unique 9-digit identifiers feels wasteful.
WCAG color contrast checkers in particular have never steered me wrong. It's interesting (but makes sense) that contrast needs to be higher for small text than for large text!
Given the existence of Szilard's engine showing that information can be converted to energy, can we not conclude that any system storing information has potential energy and therefore mass?
If you interpret the language of a different culture (separated by space or time — try reading the ‘flowery’ language of Victorian or Elizabethan literature) too literally, it reads as ‘indirect’. But that doesn't mean that the native speakers from that culture consider it so. You're simply missing the cultural context that makes their phrasing as ‘direct’ to them as ‘I want to buy this bread’ is to you.
reply