Questions tagged [compilers]
Historical compilers, or modern compilers targeting retro platforms.
71
questions
111
votes
10
answers
44k
views
Why do C to Z80 compilers produce poor code?
When reading some other questions about compiling C for the Z80,
How much benefit should be expected on a more advanced compiler for z80/r800 based computers?
Native C compiler for Sinclair ZX ...
67
votes
10
answers
16k
views
How was C ported to architectures that had no hardware stack?
Thinking about machines such as the PDP-7, PDP-10, CDC-160 and so on1, these are machines which do not have a stack pointer which can quickly and easily change to point to a new stack frame, like the ...
62
votes
7
answers
16k
views
Did any compiler fully use Intel x87 80-bit floating point?
There is a paradox about floating point that I'm trying to understand.
Floating point is an eternal struggle with the problem that real numbers happen to be both essential and incomputable. It's the ...
56
votes
13
answers
10k
views
What languages are better fit for generating efficient code for 8-bit CPU's than C?
I found Why do C to Z80 compilers produce poor code? very interesting as it pointed out that C (which was leveraged to be an abstraction of a CPU for porting Unix) was not a very easy language to ...
56
votes
2
answers
25k
views
Why were the /\ (min) and the \/ (max) operators abandoned in the C language?
In the UNIX V7 version of the C language (but not yet in the V6 version), there were the /\ (min) and the \/ (max) operators. In the source of the scanner part of the compiler,
case BSLASH:
if (...
39
votes
5
answers
7k
views
Is it possible to make a ROM converter?
Based on my understanding, an emulator is necessary because the machine with the emulator on it (say Windows), doesn't execute the same machine code as the target platform (6502, for example). So what ...
38
votes
6
answers
7k
views
Why couldn't early C compilers handle variable declarations between statements?
In modern C, you may place variable declarations between statements:
do_something();
int x;
x = something_else();
However, older C compilers required that variables are declared before all statements:...
37
votes
11
answers
9k
views
When and why did high-level language compilers start targeting assembly language rather than machine code?
From what I've read, the first FORTRAN compiler built a machine-code program entirely in memory; it was, in fact, designed to read the entire source code of the program, and then sequentially load ...
35
votes
15
answers
12k
views
When did compilers start generating optimized code that runs faster than an average programmer's assembly code?
It is highly unrecommended to write your own code in assembly now since, in most cases, gcc -O3 does magic. But in the ‘80s it was believed that compiled C code takes 4(?) times or more than a well-...
32
votes
11
answers
12k
views
Has there ever been a C compiler where using ++i was faster than i++?
Please take a look at this post: Is there a performance difference between i++ and ++i in C?
There are two essential statements in the answer:
Modern compiler produce the same machine code no matter ...
32
votes
2
answers
8k
views
Which tools were used to create the C language?
Was the original C compiler written in some old assembly language and now later flex and bison are used instead?
31
votes
3
answers
18k
views
Why did Borland ignore the Macintosh market?
During the 80s and 90s, Borland developed several amazing, cutting edge developer products. Their Turbo Pascal and Delphi, an Object Pascal development environment, were very popular on DOS and ...
31
votes
4
answers
6k
views
Most modern C compilers targeting DOS 8086, running on DOS 8086 (16-bit)
I'm looking for the most recent versions of modern C compilers which were/are targeting DOS 8086, also running on DOS 8086 (16-bit). I'm mostly interested in production-ready C compilers, rather than ...
28
votes
10
answers
17k
views
How to get started writing C for the IBM PC in 1980-81
Suppose it's late 1980 to early 1981, you've got some software you want to write for the IBM PC which will be released later in 1981, want to get started ASAP, and believe C is the right language for ...
25
votes
12
answers
7k
views
Why were nested functions excluded from B and C?
I'm learning C and was curious as to why the language does not allow nested functions.
From what I've read, the lack of nested functions seems to have been a simplification that was inherited from its ...
24
votes
5
answers
3k
views
How much benefit should be expected on a more advanced compiler for z80/r800 based computers?
I am self studying about compilers, and get hands on very good textbooks about the subject. I am thinking in develop a compiler using the almighty llvm infrastructure to cross compile to old computers,...
23
votes
3
answers
3k
views
Why were OS/360 PL/I procedure calls so expensive in terms of stack space?
In 1977, Guy Steele published a paper entitled Debunking the “expensive procedure call” myth or, procedure call implementations considered harmful or, LAMBDA: The Ultimate GOTO. The paper was the ...
23
votes
2
answers
2k
views
Where and when did the ".s" suffix for assembly-language source files originate?
The closest I was able to find on StackOverflow is What are .S files?, in which no answerer addresses why we use .s for assembly. (And .S for preprocessor/macro assembly; and gcc -S to produce ...
23
votes
2
answers
3k
views
Using Clang to compile MS-DOS executables
I have a simple C program, and I would like to compile it targeting MS-DOS. Can this be achieved with Clang?
I would like to produce the following formats:
COM executable
16-bit MZ executable
32-bit ...
22
votes
10
answers
7k
views
When if ever was the C language 'int' size altered from the host machine word (register) size into a literal 32 bit size?
From the earliest K&R reference manuals I read, 'int' was synonymous with machine word and it seemed to raise adverse reactions in various user domains. With the UNIX crowd, they minimally ...
21
votes
5
answers
4k
views
Early Forth for personal computers
What were the earliest Forth programming language implementations for 8-bit personal computers? Was it FIG Forth? Or a predecessor? Or some other development?
Why did Forth lose its relative ...
21
votes
4
answers
5k
views
Would a C compiler for the Apollo Guidance Computer be plausible?
The Apollo Guidance Computer was used to control the command/service module and lunar module on the missions to the moon. (Definitely a retrocomputer!) As noted in this answer, programs were written ...
21
votes
3
answers
7k
views
Native C compiler for Sinclair ZX Spectrum
I am looking for a native C compiler for the Spectrum 128. I would like one which:
Has good support for the latest C standard at the time.
Is not limited to compiling ridiculously short source code.
...
21
votes
2
answers
737
views
What is the history of SysV i386 calling convention for struct return?
I would like to understand historical roots of the quirk in the SysV calling convention for the 32-bit x86, which was inherited by the ELF standard, and so remains used on Linux to this day. Consider ...
20
votes
1
answer
2k
views
How can I set up the Microsoft C compiler to make it prefer immediate-mode push instructions?
I started a project to get a better understanding on how to compile a game for Windows 3.x. I tried to set up the build workflow so that it produce the byte-exact clone of a great open sourced Win16 ...
19
votes
9
answers
3k
views
How were bugs reported for compilers that were shipped on floppy disks?
Take the Microsoft C 1.0 compiler for example. It shipped on multiple 5.25" 360K disks, and when it ran on machines without internal hard disk, so users had to switch floppies between the editor, ...
19
votes
6
answers
5k
views
How did the `long` and `short` integer types originate in C?
I was wondering why C has the long and short integer type in addition to the plain int, and came across the following quote in the C99 Rationale (thanks to this answer here):
[...] In the 1970s, 16-...
19
votes
0
answers
1k
views
Oxford C compiler for Commodore 64
I kept one floppy from my Commodore 128 (which I used mostly in C64 mode), labelled ‘Oxford C compiler’. It is a 5.25″ floppy. Don't ask me why I kept just this one; probably because I thought I ...
17
votes
4
answers
710
views
How can I run COMIT code?
I recently learned about the existence of COMIT, which was the first string processing language. It's very old (1957), but it was used a lot in the first 10 years it was around, mainly in academic ...
17
votes
1
answer
2k
views
ZSPL language, anyone heard of it?
While reading the Byte sieve article (Gilbreath 1981), I came across a language I have never heard of, ZSPL.
I suspected this was actually a specific version of another language, perhaps PL/1. ...
17
votes
2
answers
2k
views
When did type punning through violating the strict aliasing rule become disallowed?
Looking at the C code from the Fast Inverse Square Root, the casting of a float to a long is done via pointer arithmetic:
i = * ( long * ) &y; // evil floating point bit level hacking
The ...
15
votes
7
answers
3k
views
Do any mainframe emulators exist with a functional FORTRAN compiler?
Similar to this question, but generalized to any mainframe computer from before the microprocessor era, does there exist an emulator and OS for a vintage mainframe computer that will run the output ...
14
votes
1
answer
2k
views
Did any compilers hash long symbol names when truncating them?
Many early compilers and interpreters had maximum length for variable and function names. Usually you could use longer names but everything beyond e.g. the first 8 characters was discarded.
This ...
14
votes
1
answer
903
views
What sequence of instructions is the equivalent to `fcomip` on i486?
Do you perhaps happen to know, what would be the easiest way to modify my AEC-to-x86 compiler (you can run the core of it in browser: https://flatassembler.github.io/compiler ) to be able to target ...
14
votes
1
answer
2k
views
GCC to make Amiga executables, including Fortran support?
I have been compiling some command line programs to run on the classic Commodore Amiga. I started with GCC on WinUAE which worked but I realised I didn't have the understanding of the memory stack and ...
13
votes
3
answers
3k
views
Were Windows 3.x applications dependent upon 80286 instructions?
While Windows 3.x operating system stuck to the 80286 platform, did applications compiled for Windows 3.x have to use 80286 instructions explicitly or be aware of the 80286 memory layout?
Or was it ...
13
votes
6
answers
851
views
Are there any primary sources for the “passing constant by reference” behavior in old Fortran compilers?
Occasionally I have heard references to a peculiarity of certain (old) Fortran compilers, with regards to subprogram argument passing. Here is an example, from an answer to a Stack Overflow question:
...
12
votes
4
answers
1k
views
How was dataflow analysis performed before SSA?
If we look at something like LLVM or the GNU Compiler Collection, Dalvik and many others, their intermediate representation (IR) uses SSA (Static Single Assignment form), as part of their Data-Flow ...
12
votes
2
answers
1k
views
Is there a pre-defined compiler macro for legacy Microsoft C 5.10 to get the compiler's name and version number?
In Microsoft Visual C++, I can use the macros _MSC_VER for compiler identification and _MSC_FULL_VER for its version number to retrieve the data of the used compiler at runtime of my C program. But ...
12
votes
1
answer
656
views
How much time and how many people were required to develop Delphi version 1?
I would guess the compiler was primarily a modification of Borland's Turbo Pascal, while the Integrated Development Environment and Visual Component Library required a lot more development from ...
11
votes
7
answers
4k
views
Did compilers ever give error messages without line numbers?
I'm having an argument with my friend, who told me that when she was learning programming in the 1980s, the compiler gave errors without line numbers.
I'm pretty sure that compilers have always given ...
11
votes
1
answer
3k
views
What was the first Lisp implementation that could generate machine code?
LISP is considered by some to be primarily an interpreted language, but compilers
have been made for it. What was the first compiler?
To be clear, this is about compilers that compile LISP code stored ...
10
votes
1
answer
560
views
What were the typical game development toolchains for the pre-i386 IBM PC era
On i386 and beyond (assuming MS-DOS as the target OS and IBM PC as the target platform), my impression is game developers most typically used Watcom C / DJGPP plus one of the DOS extenders (DOS4GW, ...
10
votes
1
answer
477
views
What sort of intermediate representation did the first Fortran compiler use?
Proebsting's Law asserts that improvements to compiler technology double the performance of typical programs every 18 years, but even granted that this is somewhat tongue-in-cheek, it's not really ...
9
votes
1
answer
678
views
What was the first compiler/interpreter/assembler to indicate problematic columns in diagnostic messages?
These days, most compilers and interpreters seem to provide the following in diagnostics:
A description of the problem
The name of the source file
A line number
A relevant position within the line
...
7
votes
1
answer
375
views
When was a compiler first used to generate code to be placed in ROM?
In the early days of compilers, it was expected that programs would generally be stored in an inexpensive medium (such as punched cards or magnetic tape) when not in use. Although it was possible to ...
7
votes
1
answer
688
views
BCC LD86 file has bad magic number
I wanted to write a simple hello world program in DOSBox, so I downloaded Bruce's C Compiler from here. And wrote this program (using edit.exe):
#include <stdio.h>
int main() {
printf("...
7
votes
1
answer
650
views
What libraries do I need in order to compile for Windows 98?
I am attempting to compile John Burger's StdTel for Windows 98. I am using Pelles C, because it has Windows 98 support, but it appears that I don't have the necessary libraries. This is the compiler's ...
7
votes
1
answer
496
views
P′′ Language Interpreter/Compiler Resources
According to Wikipedia, P′′ is a "primitive computer programming language created by Corrado Böhm in 1964 to describe a family of Turing machines." P′′ contains only four instructions has influenced ...
7
votes
1
answer
519
views
Was dynamic type check in Pascal commonplace?
The BESM-6 Pascal compiler I'm experimenting with has a notable difference from Standard Pascal: formal arguments of formal parameters-procedures or functions are not specified, but are checked at ...