Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Am I the only one who was initially confused by "Must Not"? As a non-native speaker, my logic was probably something along the lines of "Must Not" => "Not a must" => "You don't have to, but you can" - which of course is not what it means...


The meaning is unambiguous to native speakers. In "you must not run" the word "not" always modifies "run", never "must".


It's not that unambiguous. Compare "You must not do X" and "You need not do X". The sentences have the same form, and they are both common and idiomatic, but in the second sentence, the "not" modifies "need".


"Need not" isn't exactly common phraseology/is older phraseology, though; and a common way to phrase a similar sentence would be "You do not need to do X", and it's more clear that "not" modifies "need" in that context. Regardless, for a native speaker it should be pretty clear what both mean.


"Need not do ...": Unnecessary.

"Must not do ...": Disallowed / prohibited.


These used to be called Dos and Don'ts.

Do A, B, C. Don't do X, Y, Z.

Am I the only person who thinks it's ironic that an article about documentation appears to suffer from a fairly fundamental ambiguity?


No.

"Need not" (or "May...") indicate actions or behaviours which are allowed or optional. This is not the same as "do X", which is a "MUST" condition.

"Must not" (or "Don't...") indicate actions or behaviours which are expressly disallowed.

RFC 2119 referenced in the article should make all this clear. If you're still confused after reading that ... you SHOULD NOT be writing documentation. And possibly not be reading it ;-)


The meaning is as if "not" modified "run", but syntactically "not" is attached to "must", I think. You can probably convince yourself of that by considering a sentence such as: they can yet must not run. So you are absolutely right to be confused by such sentences. There is something weird going on.


Perhaps an analogy to C's multiple declarations:

    int *i, j;
 
i is a pointer to an int, j is an int. The * binds to the variable identifier, not to the type. Famously troublesome for beginners.


"Mustn't" means exactly the same thing as "must not" (but makes it clear that the negative should be scoped to the verb, by using an inflected negative form of the verb itself), so yes, there's something funny going on with "must".


See wiml's sibling comment for a correct reason why someone might be confused by such sentences. "Not" negates, so it is definitely not modifying "must". Clearly the word being negated is "run".


Believe it or not, as a native speaker of English who has studied linguistics, I do know that "not" negates, but thanks anyway.


For native speakers, "must not" is explicitly forbidding something. English is full of inconsistencies. Queue all kinds of poems and comedy sketches. Some things you just have to know

One of my current favorites is Ismo's use of "ass" as seen on Conan: https://youtu.be/HLyFlWahuSE


That's why we have an RFC; to avoid confusion.

2. MUST NOT This phrase, or the phrase "SHALL NOT", mean that the definition is an absolute prohibition of the specification.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: