MiniD 1.0 released!
Jarrett Billingsley
kb3ctd2 at yahoo.com
Tue Jul 31 23:05:40 PDT 2007
After more than a year of brainstorming, writing, re-writing, taking ideas
from other languages and generally having a good time, I've come to what I
feel is a good place to call it 1.0.
== What is MiniD? ==
MiniD is a scripting language written entirely in D, designed around D's
features and with D's semantics in mind. It's based mainly off of Lua and
Squirrel, with influences from D and JavaScript.
MiniD is meant to be an extensible extension language, like Lua. That is,
rather than trying to be a huge do-everything language like Python, it's
meant to be a smaller, more compact (but still expressive) language for
writing programs and scripts meant to be run in the context of a larger
program. It's extensible in that the "host" program can provide functions
and classes as hooks into application-specific functionality, and it's an
extension language in that it can be used to extend the capabilities of the
host program.
MiniD makes it easy to interface between native and script code. The
low-level API is muct simpler to use and cleaner than that of most languages
implemented in C, and there is also a Pyd-like binding library to make it
possible to quickly expose free functions and class types to MiniD.
== Why MiniD? ==
Why MiniD instead of something like Lua, Python, or DMDScript? Lua and
Python are both written in C, and as such have (compared to what D provides)
clumsy APIs. They also have their own memory management and error handling
schemes, two things that D provides natively. DMDScript has a D
implementation, but it's not free for all use. MiniD is written in D, has a
simple-to-use API, takes advantage of as many D features as possible (the
GC, exceptions, templates, classes), and is licensed under the zlib/libpng
license, which means you can use it for just about anything.
== Describe the language. ==
- Uses a C-style syntax with a lot of D influences.
- Is dynamically typed, with booleans, integers, double-precision floats,
UTF-32 characters and strings, tables (maps), arrays, first-class functions,
and classes.
- Is object-oriented, with a class-based OOP model with support for single
inheritance and dynamic modification of classes (as they are a first-class
type).
- Makes it easy to make larger codebases with native support for modules and
packages.
- Supports a form of collaborative multithreading with coroutines. A
coroutine is like a function which you pause and resume explicitly.
Coroutines can be used to make iterators and to simulate simple
multithreading.
== Describe the API. ==
- Supports code sandboxing through the use of multiple "contexts", into
which libraries can be loaded. You can create a sandbox by only loading a
restricted set of libraries into a context, and then running code in it.
- Is templated in many places to support IFTI, and converts between native D
types and MiniD types in many places as well, in order to avoid lots of
tedious explicit types needing to be specified and conversions to be done.
- Makes it easy to write native functions using the API. No confusing
excessive stack manipulation like with Lua or Squirrel. No reference
counting like with Python. Just get the values and manipulate them with a
program state.
- Makes it really easy to expose native functions and classes to MiniD
through a templated binding library, similar to Pyd. Can bind free
functions, classes, and in classes, constructors (even multiple constructors
with the same number of parameters, unlike Pyd), methods, and properties
(through a convention, as MiniD itself does not have explicit properties).
Even supports binding multiple D classes which are in an inheritance
hierarchy, but notably does _not_ yet support MiniD classes then inheriting
from those exposed D classes.
== Licensing and Compatibility ==
MiniD is licensed under zlib/libpng, which basically means (1) I'd like you
to give me credit if you use it, (2) you can't say that you made it, and (3)
you can modify it all you want and even release your own modified version of
the language, but you can't call a modified version "MiniD".
MiniD is, as far as I know, only compatible with D 1 (last compiled with D
1.020). Because it uses some newer features, it is not known to work with
GDC 0.23, but may compile with one of the newer patches.
MiniD is based entirely on Tango, the alternative standard library for D.
MiniD was last built with Tango 0.99.
MiniD is built with Bu[il]d, but should also work with DSSS. Not real sure
if it works with dsss net. DSSS is still largely a mystery to me.
MiniD should compile on any platform for which there's a functional
compiler. It has been developed and tested on Windows, and has also been
compiled and tested on Ubuntu 7.04.
== Links ==
The main page for MiniD is http://www.dsource.org/projects/minid. The
forums are at http://www.dsource.org/forums/viewforum.php?f=94; I use the
forums for announcements, and you can also start discussions there.
You can find information on downloading the library on the main page.
There's also a link to MDCL, the MiniD Command-Line interpreter, for which
Windows binaries are provided. If you're on another system, you can check
out the trunk and compile MDCL manually.
Any questions, comments etc. Either reply here or post on the forums :)
More information about the Digitalmars-d-announce
mailing list