The definition of PASCAL is, above all else, intended to be simple. PASCAL was designed as a pedagogical language (with aspirations to be useful for commercial purposes, but that was a secondary concern). For this purpose, the definition had to be small and orthogonal so that it could be explained simply and concisely. For ease of implementation, the number of special cases had to be kept to a minimum.
The boolean type is handled by the system as simply an example of an enumerated type. It is effectively equivalent to having a definition
type boolean = (false, true)
automatically included in the program. Specficially: it can be implemented by entering false and true into the symbol table with associated type of boolean. They can then never be used for any other type, as PASCAL identifiers are associated with a single type only in any scope.
nil, however, could not be defined by an existing language mechanism. The language simply does not provide any means of creating a pointer value other than via new, which creates a value while nil refers to an absence of value. Therefore, a new language feature was required to implement it, so a new keyword was added for that feature.
Also, nil does not behave the same way an identifier does: it does not have a predetermined type. The type of a nil expression is determined by its context -- it may become any type pointer that is required to make the expression type check. If it were implemented as an identifier rather than a keyword, that would have required a special case for polymorphic identifiers, of which only a single instance was required for the language and no way provided of defining new ones: clearly not a useful way of approaching the problem.
NILcould be a function that would return different values over time. – tofro May 07 '18 at 10:08PROCEDUREandFUNCTIONfor every function - in C there is no keyword for this, it is obvious and defined by the context. – i486 May 08 '18 at 12:03PROCEDUREandFUNCTIONkeywords: Pascal's syntax is largely a result of the first Pascal compiler being recursive descent. For that, you have to be able to tell what you're parsing with only one token of lookahead. – Wayne Conrad May 08 '18 at 20:49voidis not a real type. What's the benefit of doing it the C way? Some languages do treat procedures as functions that return e.g. unit, but C is not one of those languages. – Luaan May 09 '18 at 08:54:=assignments. All extra characters need time to enter and time to read on screen. Linux is written decades after Unix not by the guys who wrote C. But it is not in Pascal. Is this mistake? – i486 May 09 '18 at 09:25PROCEDUREandFUNCTIONis has nothing to do withnil, and is not a rate-determining step in a Pascal compiler. A bicycle is a motorbike without an engine, not the other way around. Lisp was never an obvious choice for writing operating systems at any time. – user207421 May 09 '18 at 09:56at (i486): Text I/O might've sucked at the time, but text I/O never sucked so hard that it actually was a limiting factor during development. If writing fewer characters would lead to faster development we'd all be writing in codegolf languages.
– Cubic May 09 '18 at 10:21FUNCTIONandPROCEDUREprologs because it supported nested constructs of them. If C would support nesting of procedures (which it doesn't), it would most probably have the same keywords. – tofro May 10 '18 at 05:53funckeyword. It makes the compiler easier to design and the code easier to read (for everybody, not just beginners). – JeremyP May 10 '18 at 13:08foo()syntax; the Kornfunction foosyntax is a common extension but not universal. Although shell is scriptable, I'd call awk and perl more 'programmy' and those usefunctionandsubrespectively. – dave_thompson_085 Jun 26 '18 at 05:07