Именованные туплы и более типизированные массивы
От: hi_octane Беларусь  
Дата: 14.02.11 14:32
Оценка: 20 (2) +1
Для хардкорной математики очень нужны странные фичи

1. Именованные туплы, а лучше именование параметров Generic'ов:

func() : (a:int * b:int * color:int)
{
  def x = new { a = 5, b = 20, color=30 };//тут по пальцам если вместо a и b указаны x и y, идеально если ещё и порядок не важен
  x;
}

//использование
def r = func();

Console.WriteLine(r.a);
Console.WriteLine(r.b);
Console.WriteLine(r.color);

Основная цель этой фичи — не завязываться на порядок возвращаемых значений ни в самой функции, которая может быть очень большой, ни вне её, а работать только с именами.

2. Сильная типизация алиасов, с типизацией индексов массивов:
type Idx = int;
type Idy = int;
type Idz = int;

//объявление двумерного ступенчатого массива, с индексаторами Idx, Idy и типом значения Idz
def a : array[(dimension1 : Idx) array[(dimension2 : Idy) Idz]];

//тут компилятор даст по пальцам, т.к. у массива типы не int
a[5][10] = 20; 
//тут ок, т.к. у массива индексаторы правильных типов, и значение тоже правильного типа
a[5:Idx][10:Idy] = 20:Idz;

def iX = 1 : Idx;
def iY = 2 : Idy;
//с этого момента iX и iY - самостоятельные типы, 
//которые к int приводятся только через операторы : и :>
//соответственно встроенные операторы сложения вычитания и т.п. 
//тоже начинают понимать только значения правильного типа

Console.WriteLine(a[iX][iX]);//ошибка компиляции, второй индекс должен быть типа Idx;
Console.WriteLine(a[iX][iY]);//всё ок

Цель — снижение числа трудных математических ошибок. У математиков индексов много, каждый индекс нельзя путать с другими. Они важны, как в физике размерности. Ошибки индексации могут быть совершенно неочевидны, и ловить их черезвычайно сложно.

Интересует, в каком направлении копать, и насколько сложно эти две задачи реализовать в Н1 (пусть даже ценой поддержания собственной версии компилятора, если больше никому не надо). И огромная просьба учесть нужность этих фич для системы типов Н2.
Также буду благодарен за критику и возможные идеи в данных направлениях.
фича математика именованные туплы сильные алиасы feature math named tuples strong type aliases
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.