17 ms·
"So from the commercial demise of the UCSD p-System in 1985 until Java was released in 1995, there was essentially no way for a program compiled only once to ru
by igouy 8y ago
"So from the commercial demise of the UCSD p-System in 1985 until Java was released in 1995, there was essentially no way for a program compiled only once to run on more than one kind of computer."
That seems to be utterly wrong.
----
Before UCSD-Pascal there's BCPL.
"The language was first implemented in 1967…"
"OCODE was specifically designed for BCPL and is a compromise between the desire for simplicity and the conflicting demands of efficiency and machine independence. OCODE is an assembly language for an abstract stack based machine that has a global vector and an area of memory for program and static data…" p152
https://www.cl.cam.ac.uk/~mr10/bcplman.pdf https://www.cl.cam.ac.uk/~mr10/bcplman.pdf
Chapter 2 "VMs for Portability: BCPL" in "Virtual Machines" Iain D. Craig
https://books.google.com/books?id=vIB-npHEbd4C https://books.google.com/books?id=vIB-npHEbd4C
----
From 1980 onwards there's Smalltalk-80 —
"To support a variety of platforms, Smalltalk uses a virtual machine approach to portability that allows applications to be easily migrated between platforms with little or no change to the code."
"Ubiquitous Applications: Embedded Systems to Mainframe"
Comm ACM Oct 1995
http://www.davethomas.net/papers/ubiquitous1995.pdf http://www.davethomas.net/papers/ubiquitous1995.pdf
- charlysl 8y agoIndeed, according to "The Most Important Software Innovations" [1]: In computer programming, “a pseudo-code or p-code machine is a specification of a CPU whose instructions are expected to be executed in software rather than in hardware (ie, interpreted).” Basic Combined Programming Language (BCPL) is a computer programming language designed by Martin Richards of the University of Cambridge in 1966. He developed a way to make it unusually portable, by splitting the compiler into two parts: a compiler into an intermediate pseudo-code (which he called O-code), and a back-end that translated that into the actual machine code. Since the intermediate code could be exchanged between arbitrary machines, it enabled portability. Urs Ammann, a student of Wirth’s at the Swiss Federal Institute of Technology Zurich, used the same approach in the 1970s to implement Pascal; this intermediate pseudo-machine code was called p-code, and popularized the technique (see Wirth’s “Recollections about the development of Pascal” ) Java is based on this fundamental approach, which enables compiled code to be run unchanged on different computer architectures (see “Java’s Forgotten Forbear”). Even many text adventure games have been built with this approach, most famously the Z-machine used to implement many Infocom games (such as Zork). BCPL also significantly influenced the C programming language, including its use of curly brackets {...}. No patent identified. [1] https://dwheeler.com/innovation/innovation.html https://dwheeler.com/innovation/innovation.html
- opless 8y agoOdd. I was using uscd-pascal in the early 90s... I even found some p-system style Pascal source in the mid 90s, so it didn't die in the mid 80s. IIRC p-system was running on everything from 8bit CPM to Unix boxen too.
- tniemi 8y agoAnd Infocom's Z-machine is from 1979: https://en.wikipedia.org/wiki/Z-machine https://en.wikipedia.org/wiki/Z-machine
- kamaal 8y agoAlso Perl, ran on multiple platforms fairly well.
- tyingq 8y agoTcl and Rexx were around in the same time period as well. And most "personal computers" had a BASIC interpreter at the time (albeit with lots of platform specifics).
- twic 8y ago> a program compiled only once to run on more than one kind of computer This is referring to portable object code. Perl, Tcl, and Rexx aren't compiled, but do have source-level portability.
- wrs 8y agoThere were plenty more, too. When I implemented NewtonScript as a bytecode interpreter in 1992 (hey, add that to the list) it seemed like a perfectly normal thing to do.
- djmips 8y agoSCUMM which is late eighties on to early 2000s
- karmakaze 8y agoI know they're referring to compiling to an abstract machine, but there's also been binary translators that treat the machine code of one machine like abstract code that gets translated binary-to-binary to the hardware it's running on. I recall reading about one around the late 80's (perhaps an AT&T machine) that was doing things like inlining and using actual runtime branch optimizations to run faster on the second architecture.