LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

На самом деле нет.

Например, я тут хорошенько подумал насчёт шаблонов и решил, что описываться они будут таким образом:

x: <T, i: T> (x: T) -> T {
    return x + i;
}
...
x(int, 10)(20)

Суть в том, что по семантике шаблон функции это функция, возвращающая функцию в качестве результата (но всё это происходит в compile-time).

Но я допускаю и вариант поинтереснее:

f: <i: int> -> int {
    i: int = 0;
    for (j: int = 0; j < i; j++) {
        i += j;
    }
    return j;
}
...
f(10)

Суть в том, что функция f будет полностью выполнена в compile-time (на неё будут наложены небольшие ограничения - она может вызывать только другие такие же функции, а также не может разыменовывать указатели).

Вообще, я бы хотел добавить в свой язык побольше всяких плюшек, касающихся мета-программирования. Должна быть возможность как можно больше всего делать в compile-time.

А вот в runtime не считая поддержки асинхронности (что-то типа resumable-функций из черновика стандарта C++) хочу оставить всё как есть. Чистая функциональщина имеет слишком высокий порог вхождения.

Исправление KivApple, :

На самом деле нет.

Например, я тут хорошенько подумал насчёт шаблонов и решил, что описываться они будут таким образом:

x: <T, i: T> (x: T) -> T {
    return x + i;
}
...
x(int, 10)(20)

Суть в том, что по семантике шаблон функции это функция, возвращающая функцию в качестве результата (но всё это происходит в compile-time).

Но я допускаю и вариант поинтереснее:

f: <i: int> -> int {
    i: int = 0;
    for (j: int = 0; j < i; j++) {
        i += j;
    }
    return j;
}
...
f(10)

Суть в том, что функция f будет полностью выполнена в compile-time (на неё будут наложены небольшие ограничения - она может вызывать только другие такие же функции, а также не может разыменовывать указатели).

Вообще, я бы хотел добавить в свой язык побольше всяких плюшек, касающихся мета-программирования. Должна быть возможность как можно больше всего делать в compile-time.

Исправление KivApple, :

На самом деле нет.

Например, я тут хорошенько подумал насчёт шаблонов и решил, что описываться они будут таким образом:

x: <T, i: T> (x: T) -> T {
    return x + i;
}
...
x(int, 10)(20)

Суть в том, что по семантике шаблон функции это функция, возвращающая функцию в качестве результата (но всё это происходит в compile-time).

Но я допускаю и вариант поинтереснее:

f: <i: int> -> int {
    i: int = 0;
    for (j: int = 0; j < i; j++) {
        i += j;
    }
    return j;
}
...
f(10)

Суть в том, что функция f будет полностью выполнена в compile-time (на неё будут наложены небольшие ограничения - она может вызывать только другие такие же функции, а также не может разыменовывать указатели).

Исходная версия KivApple, :

На самом деле нет.

Например, я тут хорошенько подумал насчёт шаблонов и решил, что описываться они будут таким образом:

x: <T, i: T> (T x) -> T {
    return x + i;
}
...
x(int, 10)(20)

Суть в том, что по семантике шаблон функции это функция, возвращающая функцию в качестве результата (но всё это происходит в compile-time).

Но я допускаю и вариант поинтереснее:

f: <i: int> -> int {
    i: int = 0;
    for (j: int = 0; j < i; j++) {
        i += j;
    }
    return j;
}
...
f(10)

Суть в том, что функция f будет полностью выполнена в compile-time (на неё будут наложены небольшие ограничения - она может вызывать только другие такие же функции, а также не может разыменовывать указатели).