Up to Main Index Up to Journal for July, 2022
JOURNAL FOR SATURDAY 30TH JULY, 2022
______________________________________________________________________________
SUBJECT: A mere programming language
DATE: Sat 30 Jul 16:03:12 BST 2022
For some other — non-WolfMUD — work I am doing, a client needs a programming
language. The requirements are it should be: simple, lightweight, extensible
and cross-platform. Programs have to run stand-alone and be embeddable in Go
programs. The last requirement is that using cgo isn’t an option.
Being able to run programs stand-alone means the programs can be tested, with
testing integrated in CI/CD pipelines without knowing Go. Being embedded means
it will be possible to integrate with the Go testing framework for those who
are Go developers.
It’s an interesting project :)
To that end I have been creating Mere as in “a mere programming language”. It
is a very simple language heavily influenced by early BASIC. I’m sure it will
eventually have some interesting features, but that’s the starting point.
It’s only taken a few hours, but I have a proof of concept Mere that can run a
few, nearly interesting, test programs. There is a Fibonacci sequence:
# A mere Fibonacci sequence...
A = 0
B = 1
print A
next:
print ","
print B
B = A + B
A = B - A
if B <= 7000
goto next
println ",…"
When run, this program produces:
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,…
For…next loops are not implemented yet, but goto is :| At least goto is using
labels and not line numbers! The indentation is cosmetic, white-space has no
significance. Here is a factorial example:
# A mere factorial...
# Our input number
N = 8
f = 1
x = 2
if N < 0
goto neg
if N < 2
goto done
next:
f = f * x
x = x ++
if x <= N
goto next
done:
print N
print "!"
print "="
println f
goto end
neg:
println "error:N<0"
end:
When run, this program produces:
8!=40320
Finally there is an implementation of FizzBuzz, because why not?:
# A mere fizzbuzz...
loop = 1
next:
if loop % 3 == 0
print "fizz"
if loop % 5 == 0
print "buzz"
if loop % 3 != 0 && loop % 5 != 0
print loop
print ","
loop = loop ++
if loop <= 35
goto next
println "…"
When run, this program produces:
1,2,Fizz,4,Buzz,Fizz,7,8,Fizz,Buzz,11,Fizz,13,14,FizzBuzz,16,17,Fizz,19,
Buzz,Fizz,22,23,Fizz,Buzz,26,Fizz,28,29,FizzBuzz,31,32,Fizz,34,Buzz,…
The proof of concept implementation is very ugly, hacky, a little slow and
with few features. I’m now working on an improved, cleaner implementation.
Mere isn’t going to win any awards or take the world by storm. However, I’ve
known for a while that WolfMUD will need some kind of scripting capability in
the zone files. This would allow mobiles/NPCs to react and interact with their
environment and the players more intelligently under the control of the zone
authors. There is a chance that I could make Mere fit that need.
Mere will remain mine, I’ll retain all copyrights and it will be released as
open source. Whether anyone else will be interested in it is another matter…
--
Diddymus
Up to Main Index Up to Journal for July, 2022