История изменений
Исправление 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 (на неё будут наложены небольшие ограничения - она может вызывать только другие такие же функции, а также не может разыменовывать указатели).