5 ms·
Pascal was the first "real" language I learned (BASIC doesn't count) with a compiler that ran on the IBM mainframe at work. From then it was an easy transition
by TomMasz 14y ago
Pascal was the first "real" language I learned (BASIC doesn't count) with a compiler that ran on the IBM mainframe at work. From then it was an easy transition to a Pascal compiler from Motorola that produced code for the 68000. Tellingly, the Motorola compiler had a bunch of extensions that made programming a lot easier and mirrored the features Wirth introduced in Modula-2. In some ways, learning C was a step backwards, although in terms of my marketability it was absolutely necessary.
- gecko 14y agoThe 68000 was a wonderful CPU, and the last one that I genuinely enjoyed writing assembler for. A sane number of registers, a very orthogonal instruction set, good performance, non-segmented RAM, and high-level. If we had to have a 1980s CISC chip be The One True ISA, I really wish that 68000, not x86, could've been it.
- spitfire 14y agoBurroughs B5000. Stack based instruction set designed from scratch for programmers (and implementing high level languages). tagged architecture. Single cycle context switching. It was also a secure architecture directly on hardware, tasks couldn't even generate addresses to munge another tasks data if they wanted to. Wish someone would bring that back. https://en.wikipedia.org/wiki/Burroughs_large_systems https://en.wikipedia.org/wiki/Burroughs_large_systems
- Roboprog 14y agoYes, yes, yes! C was a HUGE step backward. And also how I paid the rent in the 90s. ANSI C had the advantage of being portable, though. Even if C, and especially C++, tended to be somewhat deadly. Turbo Pascal was about 90% of the speed of C with 30 to 50% of the bugs. And yes, I could use pointers and pointer arithmetic in TP if I wanted to bypass array bounds checking, but I had the choice when I needed to do so. Memory management is a lot easier with Pascal functions (and I assume Module/Oberon) than C as well, since the caller allocates the return value. Alternately, you can pass (always non null) values by reference instead of having to use (maybe null) pointers.