Футарк (язык программирования)
Парадигма | массив , функционал |
---|---|
Семья | МЛ |
Разработано | Троэлс Хенриксен, Космин Оанча, Мартин Элсман |
Разработчик | Копенгагенский университет [1] |
Впервые появился | 2014 г |
Дисциплина набора текста | выведенный , статический , сильный , Хиндли-Милнер , уникальность , зависимый |
ТЫ | кроссплатформенный |
Лицензия | ISC |
Веб-сайт | язык Футарка |
Под влиянием | |
APL , Haskell , NESL , Standard ML |
Futhark — это многопарадигмальный , высокоуровневый , функциональный с параллельными данными и массивами язык программирования . Это диалект языка ML , первоначально разработанный на факультете компьютерных наук UCPH (DIKU) в рамках проекта HIPERFIT. [2] Основное внимание уделяется обеспечению возможности выполнения программ параллельного анализа данных, написанных в функциональном стиле, с высокой производительностью на аппаратном обеспечении с массовым параллелизмом , особенно на графических процессорах (GPU). Футарк сильно вдохновлен NESL , и его реализация использует вариант сглаживающего преобразования , но накладывает ограничения на то, как может быть выражен параллелизм, чтобы обеспечить более агрессивную оптимизацию компилятора. В частности, не поддерживается нерегулярный параллелизм вложенных данных. [3] Это бесплатное программное обеспечение с открытым исходным кодом, распространяемое по лицензии ISC .
Обзор [ править ]
Futhark — это язык семейства ML с нечувствительным к отступам синтаксисом, полученным из OCaml , Standard ML и Haskell . Система типов основана на системе типов Хиндли-Милнера с различными расширениями, такими как типы уникальности и типы, зависящие от размера . Futhark не задуман как язык программирования общего назначения для написания полноценных приложений, а вместо этого ориентирован на написание вычислительных ядер (не всегда таких же, как ядро графического процессора ), которые затем вызываются из приложений, написанных на обычных языках. [4]
Футарк назван в честь первых шести букв рунического алфавита . [5] : 2
Примеры [ править ]
Скалярное произведение [ править ]
Следующая программа вычисляет скалярное произведение двух векторов, содержащих числа двойной точности.
def dotprod xs ys = f64 . сумма ( map2 ( * ) xs ys ))
Его также можно эквивалентно записать с явными аннотациями типов следующим образом.
def dotprod [ n ] ( xs : [ n ] f64 ) ( ys : [ n ] f64 ) : f64 = f64 . сумма ( map2 ( * ) xs ys ))
Это делает типы, зависящие от размера, явными: эту функцию можно вызвать только с двумя массивами одинакового размера, и средство проверки типов отклонит любую программу, в которой это не может быть определено статически.
Умножение матриц [ править ]
Следующая программа выполняет умножение матриц , используя приведенное выше определение скалярного произведения.
def matmul [ n ][ m ][ p ] ( A : [ n ][ m ] f64 ) ( B : [ m ][ p ] f64 ) : [ n ][ p ] f64 =
карта ( \ A_row ->
карта ( \ B_col -> dotprod A_row B_col )
( транспонировать B ))
A
Это показывает, как типы обеспечивают вызов функции только с матрицами совместимого размера. Кроме того, это пример вложенного параллелизма данных .
Ссылки [ править ]
- ^ «Лицензия» . futhark-lang.org . Проверено 26 марта 2023 г.
Разработано в DIKU
- ^ "Дом" . hiperfit.dk .
- ^ Хенриксен, Троэльс; Серуп, Нильс Г.В.; Элсман, Мартин; Хенглейн, Фриц; Оанча, Космин (2017). «Футарк: чисто функциональное программирование на графическом процессоре с вложенным параллелизмом и обновлением массива на месте» (PDF) . Материалы 38-й конференции ACM SIGPLAN по проектированию и реализации языков программирования . PLDI 2017. ACM.
- ^ «Руководство пользователя Футарка» . futhark.readthedocs.io .
- ^ Троэлс, Хенриксен (ноябрь 2017 г.). Проектирование и реализация языка программирования Футарк (PDF) (кандидатская диссертация). Копенгагенский университет . Проверено 25 мая 2024 г.
- Языки программирования
- Языки программирования высокого уровня
- Функциональные языки
- Параллельные вычисления
- Языки программирования массивов
- Зависимо типизированные языки
- Зависимо типизированное программирование
- Статически типизированные языки программирования
- Семейство языков программирования ML
- Бесплатные компиляторы и интерпретаторы
- программное обеспечение 2014 года
- Языки программирования, созданные в 2014 году.
- Программное обеспечение, использующее лицензию ISC