I wouldn't class MASCOT as a language, more of a design methodology.KenT wrote:BCPL - From BCPL to B to C. Uni of Cambridge. Martin Richards has released it for the Pi.
Occam for Transputer by Inmos
Z, maybe not a computer language - Oxford Uni
MASCOT - developed by RSRE Malvern
Babbage - GEC Computers for 2050 and 4080
POP, POPLOG Uni of Sussex/Birmingham
Edinburgh PROLOG
RTL/2 - ICI
With thanks to Google for reviving fond memories of times past (except for Z which is even weirder than Prolog!)
I remember Z, weird and completely friggin useless!KenT wrote:BCPL - From BCPL to B to C. Uni of Cambridge. Martin Richards has released it for the Pi.
Occam for Transputer by Inmos
Z, maybe not a computer language - Oxford Uni
MASCOT - developed by RSRE Malvern
Babbage - GEC Computers for 2050 and 4080
POP, POPLOG Uni of Sussex/Birmingham
Edinburgh PROLOG
RTL/2 - ICI
With thanks to Google for reviving fond memories of times past (except for Z which is even weirder than Prolog!)
Most of the earliest machines had their own autocode of one flavour or another.hippy wrote:Ferranti Autocode was British, and my first introduction to programming languages courtesy of a book in the school library way back before anyone invented the micro.
This, and the concurrent C-based implementation by XMOS, XC, which brings CSP semantics to C-style syntax for programming embedded multi-core and low-latency input systems.johnbeetem wrote:Communicating Sequential Processes (CSP), by C.A.R. Hoare.
Code: Select all
while not self.asleep():
sheep += 1
Occam and imp77 (Edinburgh IMP) are ones that spring to my mind that haven't been mentioned here already - not exactly being maintained today though, but there is an imp77 compiler for Linux x86 architecture.ZacharyI123 wrote:Are there any programming languages invented and maintained in the UK or by a company/organisation that is based in the UK? If so, what are they?
rgvraspi wrote:What about REXX?
I remember programming in this many years ago. I even had a version on a Pocket PC a while back.
According to wikipedia:malcolmf wrote:I do wonder what language was used on LEO, the computer system that ran Lyons' Teashops for years (stock control and Payroll, I think)
Supposedly the world's first business computer: http://is2.lse.ac.uk/leo/About_LEO.htm
And people are thinking of making an emulator.
What are the odds that someone, sooner or later, will port that to the pi?
But if you want BASIC, https://projects.drogon.net/return-to-basic/ is now goUsers of LEO computers programmed in two coding languages: Intercode, a low-level assembler type language; and CLEO (acronym: Clear Language for Expressing Orders), the COBOL equivalent.
Nope. Below is my CESIL interpreter awk scriptpaultnl wrote:CESIL? I thought I was the only one left
Code: Select all
BEGIN{
pc=0
dc=0
lc=0
INCODE=1
for(i=0;i<100;i++) validvalue[i]=""
if (DEBUG==1) printf("Running in DEBUG mode.\nParsing program ...\n")
}
{
if ((NF > 0) && (substr($0,1,1) != "*"))
{
if (INCODE == 1)
{
OPERAND = ""
INSTRUCTION = ""
LABEL = ""
HASALABEL=1
INPUTLINE=$0
gsub("\t"," ",INPUTLINE)
if (substr(INPUTLINE,1,1) == " ") HASALABEL = 0
if (HASALABEL == 0)
{
INSTRUCTION = $1
opstart = 2
}
else
{
LABEL = $1
INSTRUCTION = $2
validlabel[LABEL] = LABEL
labellocation[LABEL] = pc
labelname[lc] = LABEL
lc++
opstart = 3
}
if (NF >= opstart)
{
/* need to fix spacing retention */
WORD = $opstart
gsub("\"","",WORD)
OPERAND = WORD
for(word=opstart+1;word<=NF;word++)
{
WORD = $word
gsub("\"","",WORD)
OPERAND = OPERAND " " WORD
}
}
if (INSTRUCTION == "%")
{
INCODE=0
}
else
{
label[pc] = LABEL
instruction[pc] = INSTRUCTION
operand[pc] = OPERAND
LASTINSTRUCTION = INSTRUCTION
pc++
}
}
else
{
data[dc] = $1
for(word=2;word<=NF;word++)
{
data[dc] = data[dc] " " $word
}
dc++
}
}
else
{
if (DEBUG==1) print "cesil: blank line ignored at " NR
}
}
END{
if (DEBUG==1)
{
print "Program:"
TAB = "|"
for(ip=0;ip<pc;ip++)
{
PAD = ""
if (ip < 100) PAD = "0"
if (ip < 10) PAD = "00"
print TAB PAD ip TAB label[ip] TAB instruction[ip] TAB operand[ip] TAB
}
print "Labels:"
for(lp=0;lp<lc;lp++)
{
LABEL = labelname[lp]
print LABEL " = " labellocation[LABEL]
}
printf("Data:");
for(dp=0;dp<dc;dp++)
{
printf(" %s",data[dp])
}
printf("\nRunning program ...\n")
}
RUNNING=1
IP=0
NEXTIP=0
DP=0
ACCUMULATOR=0
for(;RUNNING==1;)
{
IP = NEXTIP
LABEL = label[IP]
INSTRUCTION = instruction[IP]
OPERAND = operand[IP]
NEXTIP=IP+1
if (DEBUG==1)
{
print TAB IP TAB LABEL TAB INSTRUCTION TAB OPERAND TAB
}
if (INSTRUCTION == "STORE")
{
validvalue[OPERAND] = OPERAND
value[OPERAND] = ACCUMULATOR
if (DEBUG==1) print ">>> STORE " OPERAND " = " value[OPERAND]
}
if (INSTRUCTION == "LOAD")
{
VALUE = OPERAND
if (validvalue[OPERAND] == OPERAND) VALUE=value[OPERAND]
ACCUMULATOR = VALUE
if (DEBUG==1) print ">>> LOAD ACCUMULATOR = " ACCUMULATOR
if (VALUE == "")
{
printf("error: no value for OPERAND " OPERAND " at line %d\n",IP);
RUNNING=0;
}
}
if (INSTRUCTION == "IN")
{
if (DP == dc)
{
printf("error: out of data at line %d\n",IP);
RUNNING=0;
}
else
{
ACCUMULATOR = data[DP]
DP++;
}
}
if (INSTRUCTION == "PRINT")
{
printf(OPERAND);
}
if (INSTRUCTION == "OUT")
{
printf("%s",ACCUMULATOR);
}
if (INSTRUCTION == "LINE")
{
printf("\n");
}
if (INSTRUCTION == "ADD")
{
VALUE = OPERAND
if (validvalue[OPERAND] == OPERAND) VALUE= value[OPERAND]
ACCUMULATOR = ACCUMULATOR + VALUE
if (DEBUG==1) print ">>> ACCUMULATOR ADD " VALUE " = " ACCUMULATOR
}
if (INSTRUCTION == "SUBTRACT")
{
VALUE = OPERAND
if (validvalue[OPERAND] == OPERAND) VALUE= value[OPERAND]
ACCUMULATOR = ACCUMULATOR - VALUE
if (DEBUG==1) print ">>> ACCUMULATOR SUBTRACT " VALUE " = " ACCUMULATOR
}
if (INSTRUCTION == "MULTIPLY")
{
VALUE = OPERAND
if (validvalue[OPERAND] == OPERAND) VALUE= value[OPERAND]
ACCUMULATOR = ACCUMULATOR * VALUE
if (DEBUG==1) print ">>> ACCUMULATOR MULTIPLY " VALUE " = " ACCUMULATOR
}
if (INSTRUCTION == "DIVIDE")
{
VALUE = OPERAND
if (validvalue[OPERAND] == OPERAND) VALUE= value[OPERAND]
if (VALUE == 0)
{
printf("error: divide by zero at line %d\n",IP);
RUNNING=0;
}
else
{
ACCUMULATOR = int(ACCUMULATOR / VALUE)
}
if (DEBUG==1) print ">>> ACCUMULATOR DIVIDE " VALUE " = " ACCUMULATOR
}
if (INSTRUCTION == "HALT")
{
RUNNING=0;
if (debug==1) printf("warning: program halted at line %s\n",IP);
}
if (INSTRUCTION == "JUMP")
{
if (validlabel[OPERAND] == OPERAND)
{
NEXTIP = labellocation[OPERAND]
}
else
{
RUNNING=0;
printf("error: undefined label %s line %s\n",OPERAND,IP);
}
}
if (INSTRUCTION == "JIZERO")
{
if (ACCUMULATOR == 0)
{
if (validlabel[OPERAND] == OPERAND)
{
NEXTIP = labellocation[OPERAND]
}
else
{
RUNNING=0;
printf("error: undefined label %s line %s\n",OPERAND,IP);
}
}
}
if (INSTRUCTION == "JINEG")
{
if (ACCUMULATOR < 0)
{
if (validlabel[OPERAND] == OPERAND)
{
NEXTIP = labellocation[OPERAND]
}
else
{
RUNNING=0;
printf("error: undefined label %s line %s\n",OPERAND,IP);
}
}
}
}
if (DEBUG==1) printf("Program finished.\n")
}
OPL the programming language for the Psion Series 3 etc. Psion was a British company. I've still got my Psion3a. I use it occasionally with Pslinkl if I want to test serial link terminal software.