General statistics
List of Youtube channels
Youtube commenter search
Distinguished comments
About
Lawrence D’Oliveiro
Computerphile
comments
Comments by "Lawrence D’Oliveiro" (@lawrencedoliveiro9104) on "ALGOL 60 at 60 - Computerphile" video.
But in C you are not allowed to put a “;” after “}” to close a block. But you are required to put one after “}” to terminate a struct definition. Not confusing?
5
8:11 A blank line at that point would have helped. Just sayin’.
5
10:37 “Committee” or not, ALGOL 60 was actually considered a major advance on languages that had gone before. The spec was remarkably small, and only partly because it left out important stuff like I/O and if-then-else nesting rules ;). It had nice ideas like recursion and local variables (and of course call-by-name), which were sufficiently challenging to implement that they were a major driver of advances in compiler technology for some years to come.
3
@skipfred You mean special method names like _add_ or __getitem__? They allow custom operator overloads much more simply than C++ can manage. Even Java, which was supposed to be simpler than C++, cannot offer such a feature.
3
I wish the ALGOL line had been more influential. In particular, it introduced the “:=” operator for assignment, leaving “=” with its mathematical meaning of equality comparison. Whereas every language in current use has adopted the C convention of “=” for assignment, and this peculiar “==” thing for equality comparison. So tell me, if “==” is for equality, why is the inequality operator not “!==”?
2
Luckily, there are Open Source alternatives that are much more modern, like R, Octave, and of course Jupyter notebooks using Python with Matplotlib.
2
@SimonClarkstone It had a name: “Jensen’s Device”.
2
@skipfred I think Python is great. I have written—and maintained—much larger programs than that.
2
@matteopascoli Ho yes. Only needed in languages which buggered up their interpretation of “==”, but still ...
1
True, I don’t like having a “return” statement. But the trouble with allowing the function name as a variable on the RHS is: how do you express recursion? I prefer the alternative of having an explicit name for the result variable, e.g. function factorial(n : integer) → result : integer is begin result := 1; for i from 2 to n do result := result * i end (*factorial*)
1
No big surprise, considering its lineage.
1
I would like to know more about its daddy CPL, which was never quite implemented. BCPL is like a cut-down version.
1
SNOBOL was a language designed for string processing. It could do some pattern-matching, but not quite to the sophistication of full-on regular expressions. (That I recall from descriptions, anyway; I never encountered it myself.)
1
Do you program for fun? Do it anyway. ;)
1
I/O was a really difficult thing back in the day, with such a range of completely different devices with different behaviours--punched cards, punched paper tapes, line printers, magnetic tapes, disks and drums with entirely different filesystems. ALGOL 68 tried to solve the problem comprehensively, and ended up spending about a third of the reference manual just talking about I/O. It was really only the popularity of Unix, with its unified I/O model that vendors of other OSes started emulating, that made the problem finally go away.
1
I used to read SIGPLAN Notices (the journal of the ACM Special Interest Group on Programming Languages) back when I was doing my Comp Sci degree. It was one of the, shall we say, more opinionated and less formal of the supposedly scholarly journals. I remember one little article suggesting that the ALGOL 68 convention of reversing the spelling of opening-bracket keywords to form the corresponding closing-bracket keywords “should be carried out to the letter, so to speak” -- namely, reversing the actual letters themselves!
1
If you look at the original spec, it distinguishes between no less than three representations: the “reference language”, the “publication language” and the “implementation language”. There was a recognition that typographic limitations on computer input/output devices would require conventions like quotes for representing things like begin and end in the implementation language, while the publication language (as used for examples in the spec) would write these as words in bold. In the “reference language” (the language as theoretically defined in the spec), these are not reserved words as such, they are symbols , and their actual implementation representation is not defined.
1
Where do you think Robin Hood lived? Sherwood Desert?
1
One of the things unfortunately left unspecified in the ALGOL 60 spec was the meaning of something like if cond1 then if cond2 then alt1 else alt2 which “if” did the “else” pair with? Later languages specifically said that it paired with the “last unpaired “if”". But ALGOL 60 did not. Some implementations might have interpreted it that way, but others said you had to be explicit by putting in begin/end as appropriate, i.e. if cond1 then begin if cond2 then alt1 else alt2 end or if cond1 then begin if cond2 then alt1 end else alt2 Of course, “begin/end” was only allowed in statements, not expressions, so this didn’t help with conditional expressions.
1
3:10 In ALGOL 60, a procedure body was defined as a single «statement», preceded by zero or more formal argument specifications. Of course, a begin/end block counts as a «statement», but it is not required to be this. This was later deemed to be too confusing, so in Pascal it must specifically be a begin/end block. Not sure if that was also the rule in ALGOL-W (aka “Wirth-Hoare ALGOL”), which was an intermediate language between ALGOL 60 and Pascal.
1
4:47 I think the spec was a bit vague about whether you actually had to specify the types of the arguments (integer, in this case). Some compilers may have allowed this to be optional. Which meant that type information had to be carried around at runtime.
1
“Call by name” is effectively “nameless function of no arguments”. Nowadays the idea of “lambdas” has become very trendy.
1
This is why I put blank lines, bracketing symbols and demarcation comments in my Python code, e.g. def outer_func ... : def inner_func ... : ... #end inner_func #begin outer_func ... #end outer_func #+ # Mainline #- ... outer_func(...) ...
1
@Lttlemoi In Python, it’s just another method in the class. In C++, it’s a whole special function syntax, separate from the class.
1
@Lttlemoi Python lets you define them on subclasses of builtin types like int and str as well. You see, there are no PODs in Python. How’s that for consistency?
1
@Lttlemoi Python also lets you overload built-in functions like len() and abs(). Not to mention property getters/setters—have those made it into C++ yet?
1
Java was supposed to be simpler than C++, leaving out stuff they didn’t think was necessary. Then they discovered they needed some of that stuff after all, like generics. Or they try limping along without it, like the awkwardness of not having typedefs or unsigned integers. And so the reference manual ends up approaching the complexity of C++. And it still manages to leave out major things like operator overloads.
1