Мне было интересно, есть ли возможность проверки времени компиляции в OCaml, чтобы убедиться, что массивы имеют правильную длину. Для моей проблемы, я хочу проверить, что два GPU 1-dim-вектора имеют одинаковую длину, прежде чем делать кусочно-векторное вычитание.Проверка компилятора OCaml для длины вектора
let init_value = 1
let length = 10_000_000
let x = GpuVector.create length init_value and y = GpuVector.create 9 init_value in
let z = GpuVector.sub v1 v2
В этом примере я хотел бы, чтобы он выдавал ошибку компиляции, так как x и y не имеют одинаковой длины. Поскольку я - OCaml noob, я хотел бы знать, как я могу это достичь? Я предполагаю, что мне придется использовать функторы или camlp4 (которые я никогда раньше не использовал)
OCaml сам по себе не имеет зависимых типов, которые могут использоваться для проверки статистического несоответствия длины массива. Одна вещь, которую вы можете сделать, - это использовать фантомные типы, которые содержат фантомную кодировку длины массива. Эти кодировки могут быть автоматически сгенерированы из целочисленных констант с использованием CamlP4 ... Но это не зависимый тип и, вероятно, недостаточно для вашей цели. – camlspotter
@camlspotter Я только что нашел ваш комментарий. Иметь аналогичную проблему. Не могли бы вы указать некоторые подсказки/указатели на кодирование натуральных чисел как типов? – krokodil
@krokodil, теперь вы можете попробовать пощечину, точно так же, как указал Пьер в своем ответе. – camlspotter