Полку скриптовых языков прибыло: MiniD
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 01.08.07 08:05
Оценка: 28 (7) :)
Надеюсь, что в правильный форум запостил.

Анонсирован выход версии 1.0 скриптового языка MiniD. Этот язык похож на Lau, Squirrel и D. Реализация написана полностью на D с использованием библиотеки Tango.

Вот что говорит сам автор MiniD о причинах возникновения MiniD:

Существует несколько других скриптовых языков, включая Lua, Python, Io и ECMAScript. Зачем же MiniD? Вот D, новый язык, причем язык с множеством возможностей, не доступных в C. Lua, Python и Io написаны на C и это привносит множество проблем. У них у всех собственный сборщик мусора, который не является частью сборщика мусора D. Каждый из них имеет собственный механизм обработки исключений и ошибок в то время, когда D предоставляет свой собственный, достаточно хороший механизм. Из-за этих причин, а так же из-за ограниченной выразительности языка C, их API ужастны. Squirrel ближайший родственник MiniD, но будучи написанным на C++ его невозможно использовать в D. И даже если вы сможете это сделать, все равно будут проявляться те же самые проблемы, что и с остальными языками.

Существует только одна реализация скриптового языка, которая была написана на D и, поэтому, имеет более D-подобный интерфейс -- это DigitalMars реализация ECMAScript -- DMDScript. К сожалению, она не совсем свободна. Коммерческая лицензия требует, чтобы вы заплатили почти USD$1000. Более того, ее API, будучи лучше, чем C API других языков, все еще не так хорош, как мог бы быть.

Поэтому MiniD предназначен для тех D программистов, кто хочет иметь относительно легкий скриптовый язык, с отличным API, использующий по максимуму конструкции и идиомы языка D, и полностью свободный. MiniD не предназначен быть полноценным языком, как Python, тем не менее он не плох сам по себе. MiniD не является пуританским или академическим языком. Это простой, практичный скриптовый язык в довесок к простому, практичному хост-языку.


И примерчик программы на MiniD:
module demo;

// Default parameters are sugar for writing a conditional assignment of the parameter at the
// beginning of the function.  As such, if the parameter is passed the value null (i.e. if
// the function isn't passed enough parameters), it will take on the default parameter's
// value.  You can intersperse default parameters with non-default parameters, unlike in D.
function fork(x, y = 10)
{
    writefln("fork: ", x + y);
}

fork(5);
fork(3, 8);

// This is a table constructor.  It's something like an associative array literal.
local t =
{
    // This will have an index of the string "fork".
    fork = "knife",

    // This is equivalent to "foo = function() { ... }".  So again, the index will be a string.
    function foo()
    {
        writefln("foo!");
    }
    // The comma here can be elided.

    // This [expression] = expression form allows you to set values to indices with
    // arbitrary values and types.
    ["while"] = 8.8
};

// These are two ways to access the same index; the "table.identifier" syntax is sugar
// for "table["identifier"]".
writefln(t["fork"]);
writefln(t.fork);

// Call the function.
t.foo();

// Notice we can't write "t.while" because "while" is a keyword.
writefln(t["while"]);

// Now for an array constructor.
local a =
[
    "abc",
    123,
    t
];

// Arrays, like their D counterparts, can only be indexed by integers.
writefln(a[0]);
writefln(a[1]);

// This is accessing the "t" member.
writefln(a[2].fork);

// Let's make an array and sort it.
local a2 = [ 3, 8, 5, 6, 9, 1, 2 ];
a2.sort();

// And then iterate.
foreach(index, value; a2)
    writefln("a2[", index, "] = ", value);

// Arrays are also dynamic.
a2.length(4);

// A test of the classes.
class Test
{
    mX = 0;
    mY = 0;
    mName = null;

    function constructor(name)
    {
        mName = name;
    }
    
    function position(x, y)
    {
        mX = x;
        mY = y;
    }
    
    function toString()
    {
        return format("instance of Test: name = '%s' x = %d y = %d", mName, mX, mY);
    }
}

local test = Test("hello");
test.position(4, 5);
writefln(test); // automatically calls test's toString method


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.