It’s great to see a language take performance guarantees so seriously. For prototyping or one-off solutions, flexibility may be preferable to performance, but in all other situations reaching performance requirements can require major reworking and counter-intuitive changes. It makes more sense, in my opinion, to have different languages for the two types of programming (prototyping vs. production), or, at the least, to have clearly demarcated subsets of a language with performance and error guarantees, and automated tools to locate non-compliant code.
And when you think about it, Futhark is really designed with mechanical sympathy in mind: the language is built around the specific preferences of the target hardware platform. Most CPU-targetting languages don’t offer such a level of care for their platform, even today. For instance, most languages fail to offer alternate memory layouts that would be more cache-friendly, like columnar layout. Jay is another language that really cares about the target platform architecture.
It’s great to see a language take performance guarantees so seriously. For prototyping or one-off solutions, flexibility may be preferable to performance, but in all other situations reaching performance requirements can require major reworking and counter-intuitive changes. It makes more sense, in my opinion, to have different languages for the two types of programming (prototyping vs. production), or, at the least, to have clearly demarcated subsets of a language with performance and error guarantees, and automated tools to locate non-compliant code.
And when you think about it, Futhark is really designed with mechanical sympathy in mind: the language is built around the specific preferences of the target hardware platform. Most CPU-targetting languages don’t offer such a level of care for their platform, even today. For instance, most languages fail to offer alternate memory layouts that would be more cache-friendly, like columnar layout. Jay is another language that really cares about the target platform architecture.