{
  "id": "enwiki-001271834659",
  "slug": "futhark-programming-language",
  "title": "Futhark (programming language)",
  "qid": "",
  "lead": "Futhark is a multi-paradigm, high-level, functional, data parallel, array programming language. It is a dialect of the language ML, originally developed at UCPH Department of Computer Science (DIKU) as part of the HIPERFIT project. It focuses on enabling data parallel programs written in a functional style to be executed with high performance on massively parallel hardware, especially graphics processing units (GPUs). Futhark is strongly inspired by NESL, and its implementation uses a variant of the flattening transformation, but imposes constraints on how parallelism can be expressed in order to enable more aggressive compiler optimisations. In particular, irregular nested data parallelism is not supported. It is free and open-source software released under an ISC license.",
  "body": "Futhark is a multi-paradigm, high-level, functional, data parallel, array programming language. It is a dialect of the language ML, originally developed at UCPH Department of Computer Science (DIKU) as part of the HIPERFIT project. It focuses on enabling data parallel programs written in a functional style to be executed with high performance on massively parallel hardware, especially graphics processing units (GPUs). Futhark is strongly inspired by NESL, and its implementation uses a variant of the flattening transformation, but imposes constraints on how parallelism can be expressed in order to enable more aggressive compiler optimisations. In particular, irregular nested data parallelism is not supported. It is free and open-source software released under an ISC license. def dotprod xs ys = f64.sum (map2 (*) xs ys)) It can also be equivalently written with explicit type annotations as follows. def dotprod [n] (xs: [n]f64) (ys: [n]f64) : f64 = f64.sum (map2 (*) xs ys)) This makes the size-dependent types explicit: this function can only be invoked with two arrays of the same size, and the type checker will reject any program where this cannot be statically determined. def matmul [n][m][p] (A: [n][m]f64) (B: [m][p]f64) : [n][p]f64 = map (\\A_row -> map (\\B_col -> dotprod A_row B_col) (transpose B)) A This shows how the types enforce that the function is only invoked with matrices of compatible size. Also, it is an example of nested data parallelism.",
  "categories": [
    "101754114",
    "109372535",
    "20161863",
    "2239607",
    "22947099",
    "23603337",
    "24153109",
    "24153113",
    "24769764",
    "25199199",
    "26220375",
    "27367243",
    "33798696",
    "3926236",
    "56294529"
  ],
  "license": "CC BY-SA 4.0",
  "source_uri": "https://en.wikipedia.org/w/index.php?oldid=1271834659",
  "content_hash": "",
  "created_at": null,
  "updated_at": 1737844835.0,
  "claims": [],
  "contradictions": [],
  "confidence": 0.6,
  "csl": {
    "id": "enwiki-001271834659",
    "type": "webpage",
    "title": "Futhark (programming language)",
    "author": [
      {
        "family": "Anticloud FZ LLE",
        "literal": "Anticloud FZ LLE"
      }
    ],
    "container-title": "encyclopegia.org",
    "publisher": "Anticloud FZ LLE",
    "publisher-place": "Dubai, United Arab Emirates",
    "URL": "https://encyclopegia.org/a/futhark-programming-language",
    "issued": {
      "date-parts": [
        [
          2026,
          11,
          14
        ]
      ]
    },
    "accessed": {
      "date-parts": [
        [
          2026,
          11,
          14
        ]
      ]
    },
    "license": "CC BY-SA 4.0",
    "DOI": "eo1:enwiki-001271834659",
    "isBasedOn": "https://en.wikipedia.org/w/index.php?oldid=1271834659",
    "note": "Immutable snapshot enwiki-001271834659"
  }
}