|
Look at the Euphoria programming language. ... Simplex is already been done (IMHO) in Euphoria.
|
|
|
|
|
For 40 odd years, of my 45 in this business, I have been wondering if there is a simpler way of making programs. Perhaps something like Simplix is the answer. But why are we still working in this box? Why, more simpler of the same old? Are we so blinkered that “this is the way it has always been done, so this is the way it is”?
What could be outside the box? What if we dispensed with program coding? What about thinking of using what we know, or should know, before we even start to put instructions together. So, what is before the box? Simple – Analysis and Design!
My original concept was to improve programmer productivity by use of Analysis and Design documentation. Particularly this was to address the “commercial” type of system. As development went on there was a need for a name and “Enigma” was chosen.
Enigma: something that is not easily explained or understood (Encarta Dictionary).
As Christian rightly puts it: “Before writing code, design your data carefully!”
Enigma uses data definitions, information definitions, GUI maps and database table definitions to produce working programs. All of the definitions reside in the Enigma database. All of the code is held as “snippets” in the Enigma database. More than 99% of the code is Enigma generated by combining these records.
A few small programs provided “proof of concept” and I am now well into a complex system (over 150 programs, nearly 200 distinct data elements, 80 plus information constructs, 25 initiating constructs and 27 tables in the database) to trial development and challenge the generation processes. All of these numbers will grow larger as more is done.
This development is also to provide insight into two things:
• What has been omitted from the proof of concept?
• And can, or how, is something like this, kept under control: i.e. programmed?
An Enigma system comprises two parts: a Net System designed to be used over the Internet, through an Intranet or on a local computer, and a Core system which handles all the database recording and retrieval. This split has proved useful. It allows concentration within the Enigma program generators by splitting the two necessities for a system; information provision and capture, and database manipulation. The former is basically mechanical; the latter much more conceptual.
In contrast to Simplix, Enigma has no syntax, no instructions, no structures (trees), no use of .bat files, no use of comments, no functions, no ….. All Enigma requires is facts and the relationship between those facts. From this come the Net system programs in VB.Net, HTML and Javascript and the Core system program in VB6
Enigma does have rules:
1 You cannot repeat the usage of a data definition within an information definition
2 If a request is made for processing by the Core system then there must be a response. There is always a one to one correspondence
3 The Net system is the controlling system. The Core is its slave.
4 Programs in the Net system have one, and only one, function. This may be to record new information, or to display known information, or to allow correction of information already recorded, and so on
What I have learned so far:
1 The initiation of a request, by supplying data identification, can control access to the information returned from the Core system
2 The design of the database is critical to controlling system functionality. I design with data normalisation as the primary concern
3 The Net system can have many versions of the same data, depending upon the context, while the Core system has only one version of the data depending upon its definition.
The proven functionality is quite astounding:
• A request for unique information has caused the use of SQL to interrogate 12 tables to provide the information.
• Requests for lists of information (multiple row tables if you prefer) has caused generation of SQL requests joining up to 6 tables.
In both cases all that is supplied, is the identification of the controlling data and the information required. These are not limits. They are just what has been observed. This behaviour was not expected when Enigma was conceived. It relies exclusively on the database design.
Nor was the extent of generated, as opposed to hand coded, code anticipated. 99% is a very good generation ratio. Enigma will not do everything at present, and never will. I have much to do. But if we are to look to the future and toward making programming “as simple as possible, but not simpler” then Enigma is something “out of the box”: perhaps the start of a 6GL revolution. Who can tell?
(Enigma generated systems use Internet Explorer, IIS, SQL Compact, VB.Net, Windows and VB6 to operate. Other versions of SQL could be used, as could later versions of VB. A VB development suite is required for Core system compilation.)
|
|
|
|
|
Before any guy creates "very new language", better to ask: what stronger you can do than LISP and what's more elegant you can do than Smalltalk? Answer these two and ruin your PC.
It's just a half-joke, actually I also sure IT needs language, something not new, but taking best of all other languages. Simple as Smalltalk, cute as C#, strong as Nemerle and maybe extra of unicode characters? I'm tired of that old sh*t like /* */ or // - it's archaic and should die in the past.
Today even ridiculous Linux/UNIX has unicode - let's use it not only for smiles! ¯\_(ツ)_/¯
|
|
|
|
|
I read each and every line. Have restricted myself to Fortran and VB/VB.Net lately; used to use Turbo Pascal (which I loved and wrote some very useful scientific software with).
It is so fun to see how you conceptualized an entirely new language and were able to implement it by treating as a wrapper around another accepted ecosystem (Java). Imagine how much harder to do if you had to compile it to machine code, etc.
Thanks for sharing!
|
|
|
|
|
|
You can convert in compile-time strings "looks like" booleans/numbers, to those types. So, you will can use operators in Simplix program (because it compiled to Java code), an it will do Simplix programs to faster than they are now.
|
|
|
|
|
I thought the simplest was a single machine code instruction that decrements a given memory address and jumps to another address if non 0.
All programs can be derived from that.
|
|
|
|
|
... I think you may have begun a little too far up the tree. If you really want to be minimalistic, you must also look at concepts that are older and were made to make most of minimalistic computer systems.
Chip 8[^] was a very simple interpreter with 16 bit hexadecimal (!) instructions, that fits into just 512 bytes. Very minimalistic, but sufficient to let kids program simple computer games 40 years ago.
Or take a look at FORTH[^]. It can't really make up its mind what it is. A language? An operating system? An interpreter? A compiler?
Writing a program means expanding the language by a new word. The machine language core used to be tiny, less than 1k, the rest was just a large dictionary of words and their definitions.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
Thanks for the links.
CodeWraith wrote: a very simple interpreter ... that fits into just 512 bytes
Amazing! But I didn't want to be that minimalistic.
modified 16-May-18 6:36am.
|
|
|
|
|
I still have a complete cassette tape full of CHIP 8 games. We used to save the tiny interpreter along with the program's code, max 4 kb total.
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
|
|
|
|
|
Hello,
FORTH fits!
Or even better: Follow articles' path at beginning with simple data build of strings and lists and you discover ... LISP from 1956
Regards
LiTe
|
|
|
|
|
When I saw the examples, I saw Python somehow, which was maybe the reason why Python was written, at least in the beginning.
The "problem" with simple languages is that they can solve simple problems, but later on they grow as more functionality is added, looking at C, Perl, Pythnon, PHP, Go and vice versa.
Thanks for your article though, it is a great inspiration for me, because I wished always to write my own language...
|
|
|
|
|
Thank you.
Zdenek Sedlak wrote: later on they grow as more functionality is added
True, and then there is the risk of adding *unneeded* complexity.
One of the biggest challenges in the initial design and evolution of a language is to decide which features to add, and which ones to leave off.
I am convinced that most languages could be simpler without making them less powerful.
|
|
|
|
|
I think the key is to figure out what "problem set" your language is trying to address, and then only add functionality that further helps address it.
For example, PERL started off as the best thing in the world to intuitively manipulate text. C++ was the leader in math/number crunching applications.
JAVA's super power was being able to run anywhere.
If Simplex had a target differentiator (other than just being simple) I think that would go along away in positioning it in the hearts and minds of developers - as well as guide you when trying to decide what to add and what NOT to add.
Just my two cents.
Great job by the way. Looks very promising.
Steve
|
|
|
|
|
Thank you, Steve.
You made a good point.
Indeed, history is full of examples of products (including programming languages) that became successful because they provided a solution for a specific problem at a specific time.
|
|
|
|
|