News for hackers. Stuff that matters.
Re:DBase: 1979-2026 by weinzierl on Monday May 11, 2026 @10:03AM (#48095170)
The = for assignment is FORTRAN’s fault. In the beginning there was no equality, just assignment, and FORTRAN (being just a FORmula TRANslator after all) made the somewhat dubious decision to use = for that (punch card space being sparse and symbols limited and all).

When FORTRAN gained equality it went for .EQ. out of practicality and necessity. Many others followed suit but used the somewhat more pleasant == instead of .EQ..

But it didn’t have to happen that way. ALGOL decided to stick close to mathematical tradition:

= for equality

:= for assignment ("definition")

While x := x + 1 is still not clean mathematical notation, I think it wouldn’t have riled up OP’s father as much. If he’d squinted enough, he might even have been able to see little indices below the x’s there.

Re:DBase: 1979-2026 by teddyh on Monday May 11, 2026 @10:37AM (#48095578)
A rumor I heard was that

  x := 4
was chosen because it looks similar to

  x ⇐ 4
Re:DBase: 1979-2026 by badsectoracula on Monday May 11, 2026 @11:31AM (#48096354)
Why not <= then? I'd expect both < and = to be available.
Re:DBase: 1979-2026 by tandr on Monday May 11, 2026 @01:00PM (#48097585)
Probably because '<=' is very easily read as "less or equal"? (unless you are joking, of course)
Re:DBase: 1979-2026 by weinzierl on Tuesday May 12, 2026 @02:02AM (#48104761)
But why? := is perfectly understandable and established notation for definition. You don't get closer assignment without resorting to esoteric notation?
Re:DBase: 1979-2026 by pjmlp on Tuesday May 12, 2026 @08:15AM (#48107159)
That is indeed the case in Smalltalk.

The Xerox keyboards had the support for ⇐, with its workstation OSes being all graphical based.

When Smalltalk grew beyond Xerox PARC walls, ⇐ turned into :=

You can see this in the original Xerox PARC documents and books for Smalltalk.

Re:DBase: 1979-2026 by jdougan on Wednesday May 13, 2026 @06:16AM (#48120012)
In some of the draft versions of ASCII the positions currently taken by underscore and caret were left arrow and up arrow respectively. As late as 1985 I used terminals (LanparScope) the supported the older draft.
Re:DBase: 1979-2026 by teddyh on Wednesday May 13, 2026 @09:15AM (#48121497)
All Commodore machines also uses the older ASCII standards, (in addition to filling out the full 8 bit range with various graphics). It’s usually referred to as “PETSCII”, from the original Commodore “PET” series, but PETSCII was also used in the vastly more popular Commodore 64 (and 128) home computers.
Re:DBase: 1979-2026 by UltraSane on Monday May 11, 2026 @04:19PM (#48100156)
I would prefer

X is 5

X is x + 5

Re:DBase: 1979-2026 by thequux on Monday May 11, 2026 @06:16PM (#48101419)
How do you feel about ADD 5 TO X GIVING X?

I kid, of course, but "X is x + 5" brings Prolog to mind with all the unification and bidirectionality that implies.

Re:DBase: 1979-2026 by jagged-chisel on Monday May 11, 2026 @07:38PM (#48102255)
> ADD 5 TO X GIVING X

Grammatically, this would not change X. "...GIVING X" would just return X. Since it's part of the same statement, it seems it should ignore the "ADD 5 TO X" part.

Now, if you'd like to place the result into X, I suggest "ADD 5 TO X" would suffice as the entire statement.

Re:DBase: 1979-2026 by UltraSane on Monday May 11, 2026 @04:20PM (#48100165)
I would prefer

x is 5

x is x + 5

Re:DBase: 1979-2026 by layer8 on Monday May 11, 2026 @06:41PM (#48101698)
But x isn’t x + 5. If anything, it should be “x becomes x + 5”.
Re:DBase: 1979-2026 by UltraSane on Monday May 11, 2026 @07:39PM (#48102262)
Ok. How about

Set x to x + 5

Re:DBase: 1979-2026 by layer8 on Tuesday May 12, 2026 @03:37PM (#48113320)
That’s pretty much COBOL syntax: https://www.ibm.com/docs/en/debug-for-zos/17.0.x?topic=comma...

Except that COBOL doesn’t allow an arithmetic expression there, so you have to write

    COMPUTE X = X + 5.
instead. ;)
Re:DBase: 1979-2026 by selcuka on Monday May 11, 2026 @06:45PM (#48101728)
> ALGOL decided to stick close to mathematical tradition

And now we have all 3 in Python (=, ==, and :=) which makes me sad.

Re:DBase: 1979-2026 by Doxin on Tuesday May 12, 2026 @04:26AM (#48105649)
Splitting = and := in python is very intentional though, It makes writing bugs like this impossible:

    if is_logged_in=True:
        allow_access()
I've got... opinions on the way python separates statements and expressions, but there's some real benefits to it too.
Re:DBase: 1979-2026 by selcuka on Tuesday May 12, 2026 @09:57PM (#48116950)
Splitting = and := is intentional, but not for the reason you stated. We could have used := for all assignments from the beginning:

    is_logged_in := True
or

    if is_logged_in := True:
I agree that this would require blurring the statement/expression distinction. You can still do that in a weird way, by disguising your assignment as an expression. This is valid:

    (is_logged_in := True)
The reason it was done that way because := was an afterthought, and making it the assignment operator would have introduced a breaking incompatibility. That lead to having 3 different symbols for 2 use cases (assignment and comparison).
Re:DBase: 1979-2026 by Doxin on Wednesday May 13, 2026 @04:12PM (#48126849)
except if := was the default then accidentally typing ":=" instead of "==" would be the easy bug to make.

:= was bolted on after of course, and I think that was a mistake, but no one asked me, nor do I expect anyone to ;P