Programming Language Project (MMO)
This project is the beginning of a series where I shall compare programming languages to find out which ones are best suited for ‘general purpose’ programming.
I am taking on this project both to try out many different programming languages and to counteract a phenomenon I call the ’noise effect’.
If you are a developer who works in multiple languages you may have encountered this phenomenon; where the syntax and features begin to ‘blur’ together. You start trying to declare arrays with an ‘@’ in languages where that symbol has no meaning, or mixing up which language caches its arrays in row major and column major order.
My hope is to choose a few core languages and learn them well, since the longer you practice in that language, the more skilled you become; and to keep this ’noise effect’ to a minimum.
I have come up with the following metrics to both qualitatively and quantitatively test and benchmark each language inspired by Rosetta code the programming chrestomathy site, The benchmarks game, and programming language benchmarks.
Each language will be scored on a ‘Tier List’ style list.
The nice thing about this style is that it allows for multiple subjects to be of equal score, instead of arbitrarily picking one over the other.
The following is a list of the criteria, which will be scored from F being terrible, to A being the best, and S being a sort of ’transcendent’ example in that category.
-
Ease to setup development environment
-
Portability (i.e. what architectures/os’s can it run on)
- For these I will only try on hardware I actually own, maybe later we can do emulation for 68k and PowerPC.
- Target Architectures
- x86_64
- Arm
- Arm 64
- Mips
- Target OSs
- Linux
- MacOS
- Windows
- BSD (in a vm)
- Plan9 (9front)
- I would like to take a special note here that 9front does not support many languages, but one developer has been successful in running programs natively in plan9 by compiling to webassembly and use the w2c2 tool to generate C89 code which could be compiled in plan9 with some tweaking. Another option (since golang is a first class citizen on plan9) is by using wasmer-go, although I have not tested this yet.
-
how descriptive is the grammar?
- how much do I need to write for it to do anything useful
-
how friendly is the compiler?
- does it give good error messages?
- does the compiler do what its supposed to do
- can the compiler optimize things for you?
- how much is built into the compiler and/or standard library to solve problems? vs needing a library to do it?
-
How good is the documentation?
-
How easy / fun is it to
- deal with data
- describe
- store
- create
- read
- write
- update / transform / manipulate
- delete
- display
- interact with the user
- re-use code
- code read the code
- document code (comments, etc)
- create and run tests
- find what chunk of code you are looking for
- do stuff asynchronously / concurrently
- scale the solution
- parallelize the solution
- work with common protocols / formats
- deal with data
-
What development tools exist?
- Ideally you would not need development tools to use the language and it could be done in a simple text editor, but development tools are essential for real world things, so this should be bonus points
-
What libraries does it have?
-
how easy is it to integrate a library/package/etc.
-
How good is the language on its hardware?
- how many resources does the language take up on your local machine?
- how fast are the programs created by the language?
I will be creating a example program to test each language out. The language will be scored by how easy and how many features can be implemented by them.
This test program will be a simple multiplayer chat room style game, as games tend to have the largest number of problems you need to solve in order to produce a ‘minimum viable product’ for them.
For the GUI I will be using the built in UI if it has it. If not I will be taking advantage of either the excellent raylib and raygui libraries, or the equally excellent imgui library
- Website
- Information about the game
- Signup page
- webform
- For our purposes we will be hosting this website on a microcontroller with a wifi chip to include embedded development
- Client
- built in windowing, 2d, and 3d graphics work (if any), and/or its integration into existing systems like Vulkan/OpenGL/etc.
- how good the language is at math, testing floating point, trigonometry, liner algebra, and others
- file I/O, i.e. loading configs and or models, textures, and the like.
- real time text chat, probably using sockets
- using data interchange formats for config files
- macro/scripting for client side mods, ui changes, chatting etc.
- Server
- async/concurrent computing since you will be handling multiple clients
- socket communication
- command line arguments
- file I/O again
- handling user info in a database, encrypting data, creating a CRUD/simple api
- username
- password
- email?
- creation timestamp
- update timestamp
- user statistics / admin page
- displaying data in a graphic of some sort
Here I have a table of the languages we will be testing, and links to either the description of the language or a compiler/interpreter for that language. If the cell is blank it is because either it is not compatible or I could not find an example for that language/platform.
I hope to start this project in the upcoming weeks, so expect a post soon for our first programming language Fortran!