Size: a a a

Compiler Development

2020 January 11

FO

FORTRAN ONE LOVE in Compiler Development
Михаил Бахтерев
Указатель на кусок памяти в массиве с доказательствами не-выхода за границы
Воу. Хочу такую же в фортран
источник

МБ

Михаил Бахтерев in Compiler Development
FORTRAN ONE LOVE
Воу. Хочу такую же в фортран
А в Фортране нет разве всяких сечений?
источник

KR

K R in Compiler Development
Михаил Бахтерев
Указатель на кусок памяти в массиве с доказательствами не-выхода за границы
Спасибо. А что там из документации самое читабельное. Руководство как в СССР писали.
источник

KR

K R in Compiler Development
?
источник

FO

FORTRAN ONE LOVE in Compiler Development
Михаил Бахтерев
А в Фортране нет разве всяких сечений?
Ну у нас свой менеджер памяти, который поверх глобального одномерного массива выделяет многомерные... Хотелось бы иметь возможность определять выход за пределы выделенного многомерного массива
источник

KR

K R in Compiler Development
Проверками в runtime ;)
источник

FO

FORTRAN ONE LOVE in Compiler Development
K R
Проверками в runtime ;)
Да рантайм не спасает
источник

FO

FORTRAN ONE LOVE in Compiler Development
Да и везде писать проверки очень муторно
источник

KR

K R in Compiler Development
Насколько я понимаю, нужны примитивы вроде свёрток всяких. Ну там foreach, fold, map
источник

МБ

Михаил Бахтерев in Compiler Development
K R
Спасибо. А что там из документации самое читабельное. Руководство как в СССР писали.
Не знаю. Надо статьи читать. И на ютубе есть пара видосиков
источник

KR

K R in Compiler Development
FORTRAN ONE LOVE
Да и везде писать проверки очень муторно
Насколько я понимаю, это нужно в линейной алгебре, а там из примитивов только blas.
источник

KR

K R in Compiler Development
И никаких статей и движухи по примитивам с линейными типами и изменяемыми массивами как в Clean я не видел.
источник

МБ

Михаил Бахтерев in Compiler Development
FORTRAN ONE LOVE
Ну у нас свой менеджер памяти, который поверх глобального одномерного массива выделяет многомерные... Хотелось бы иметь возможность определять выход за пределы выделенного многомерного массива
У автора ATS2 есть статья о том, как они боролись за удаление проверок грариц в runtime. В принципе, ничего особенного: составляем всякие ограничения, решаем задачку дискретного линейного программирования. Там, где решилась - выкидываем проверки. Примерно так.
источник

KR

K R in Compiler Development
Но этот подход вроде неприятный.
источник

KR

K R in Compiler Development
Он нестабилен относительно изменения алгоритма и трудоёмок.
источник

МБ

Михаил Бахтерев in Compiler Development
В смысле? Это ж всё автоматически
источник

FO

FORTRAN ONE LOVE in Compiler Development
Я вот такое извращение написал на фортране (аллокатор и деаллокатор):
    function i2allocate(inp_x, inp_y) result(array)
       integer(8), intent(in) :: inp_x, inp_y
       integer(8), dimension(:,:), pointer :: array
       integer(8), target     :: X(1) ! but X(capacity)
       common /fmcom / X
       ! new end of array
       integer(8) :: temp
       if(inp_x*inp_y < 0) call negative_memory
       if(inp_x*inp_y == 0) then
           nullify(array)
           return
       end if
       temp = shift + inp_x*inp_y
       if(temp > capacity) call no_memory
       X(shift+offset:temp-1+offset) = 0
       array(1:inp_x,1:inp_y) => X(shift+offset:temp-1+offset)
       shift = temp
   end function i2allocate
   subroutine i2deallocate(array)
       integer(8), dimension(:,:), pointer :: array
       integer(8) :: temp
       integer(8), target :: X(1) ! but X(capacity)
       common /fmcom / X
       temp = shift - size(array)
       if(loc(array) == loc(X(temp+offset))) then
           shift = temp
           nullify(array)
       else
           call memory_leak
       end if
   end subroutine i2deallocate


Есть еще его брат, который работает через allocate и поддерживает -fsanitize-address
источник

FO

FORTRAN ONE LOVE in Compiler Development
какой модуль подключишь: или быстро выделяем память, или с проверками. как хотим)
источник

KR

K R in Compiler Development
Михаил Бахтерев
В смысле? Это ж всё автоматически
Ну вы чуть чуть поменяли алгоритм, и подсказки компилятору придётся переписывать.
источник

KR

K R in Compiler Development
Как с unit тестами.
источник