Update README.md
This commit is contained in:
parent
6c83ee3614
commit
a88ab4cfa6
46
README.md
46
README.md
|
@ -1,45 +1,11 @@
|
||||||
# *ghun* Programming Language
|
# Zongor's World Machine
|
||||||
|
|
||||||
## What is *ghun*?
|
The world machine is a Virtual Machine that is intended to create 3D environments (Worlds) for video games and/or generic 3d modeling jobs
|
||||||
|
|
||||||
*ghun* is an esoteric programming language that is trying way too hard to be a serious programming language.
|
It is inspired by uxn, var'aq, TIS-100, Inferno, and Plan9.
|
||||||
|
|
||||||
'ghun' (pronounced like "hu-oon" with the hu being in the back of the throat like in 'chutzpa') is a verb in Klingon which means "program", in the context of "to program a computer".
|
The world machine works as a series of stack based virtual cpu's (vcpu) that each have a single stack which are able to communicate with each other using message passing.
|
||||||
|
|
||||||
It is inspired by both [esoteric programming languages](https://esolangs.org/wiki/Esoteric_programming_language), like [var'aq](https://web.archive.org/web/20091026213516/http://geocities.com/connorbd/varaq/), [uiua](https://www.uiua.org/), and [ZOMBIE](https://web.archive.org/web/20201125123312/https://www.dangermouse.net/esoteric/zombie.html) and serious programming languages like C, Perl, Common Lisp, Lua, Rust, Go, Odin, Zig, Elixir, and Haskell.
|
The machine code of this vcpu is a series of stack operations which act on the individal vcpu. each vcpu has the ability to ask the kernel to spawn an additional vcpu or to spawn a child vcpu off of itself which sets up a couple of communication channels automatically.
|
||||||
|
|
||||||
## What are the features in *ghun*?
|
|
||||||
|
|
||||||
In general the paradigms are designed to be: var'aq-like, Interpreted, JIT, Distributed, Concurrent
|
|
||||||
|
|
||||||
See the [SPECIFICATION](./SPECIFICATION.MD) document for more info.
|
|
||||||
|
|
||||||
## What is the purpose of this language?
|
|
||||||
|
|
||||||
For the most part though, most modern languages are pretty much the same syntactically, they just differ for their paradigms and use case. This makes them a super dry and not very fun to program in.
|
|
||||||
|
|
||||||
Conversely we have esolangs which are fun, but usually useless (e.g. turing tarpits) or not implemented in a way that you are able to seriously program projects in it.
|
|
||||||
|
|
||||||
Most serious languages do not take the time to think outside the box, or add elements to make the language look good or be fun to program in.
|
|
||||||
|
|
||||||
There are of course some exceptions to this. like in Odin you can use emoji as variables, but that is uncommon.
|
|
||||||
|
|
||||||
All of the others were esoteric languages or languages designed to be used for games (e.g. golfing languages, video game specific languages such as TIS100, and the like).
|
|
||||||
|
|
||||||
Lets get back on track though as to why *this* language.
|
|
||||||
|
|
||||||
As far as my personal goals go they are:
|
|
||||||
1. I wanted to learn about compiler design and create one
|
|
||||||
2. Mess around with some old, obscure, or just plain weird language design ideas
|
|
||||||
3. Combine these ideas into a language that would be both fun and able to be used for real projects; probably more along the lines of scripting, or small scale programs, but real projects nonetheless
|
|
||||||
4. Take all the things I liked from some languages and throw them together to see what happens
|
|
||||||
|
|
||||||
The language goals are:
|
|
||||||
1. make the language fun to program in.
|
|
||||||
2. make it simple to learn (the english interpreter at least)
|
|
||||||
3. maximize code logic density, i.e. a small amount of code should represent a complex amount of logic
|
|
||||||
4. portability/embedability, i.e. should be easy to port/embed into new hardware and implement with software. I wanted it to be very Lua This is why I went with a Interpreted-JIT style over compiled.
|
|
||||||
5. follow the design from var'aq, but in a more "c to zig" kind of way than a "c to c++" kind of way.
|
|
||||||
|
|
||||||
The idea is using an iterative process, that being as I find new programming projects to do; the language will inevitably fail to be able to handle that project and so I will have to add new functionality to *ghun* to handle it.
|
|
||||||
|
|
||||||
|
The authors implementation of ZWM in written in C and uses the SDL2 library to do drawing, sound, and other things.
|
||||||
|
|
Loading…
Reference in New Issue