Concurnas:JVM上用于并发和GPU计算的新语言

Concurnas是一种新的开源JVM编程语言,旨在用于构建并发和分布式系统。Concurnas是一种静态类型的语言,具有面向对象,功能和反应式编程构造。

凭借隐藏多线程复杂性的简洁语法以及对GPU计算,向量化和矩阵等数据结构的本机支持,Concurnas可以构建机器学习应用程序和高性能并行应用程序。此外,Concurnas还提供了与其他JVM语言(如Java和Scala)的互操作性。Concurnas支持Oracle JDK和OpenJDK版本1.8到最新的GA版本14。

以下是与Concurnas的创始人兼Concurnas Ltd.的创始人Jason Tatton的交谈,讨论了该语言,其某些设计决策和功能。

是什么促使您创建一种新的编程语言?

贾森·塔顿(Jason Tatton):在我职业生涯的第一阶段,我曾在投资银行业务团队工作,并为高频交易建立交易模型和系统。我看到我们每天要解决的工程问题主要集中在构建可靠的可扩展高性能分布式并发系统上。

我发现在大多数流行的编程语言(例如Java和C ++)中公开的,具有共享的可变可变状态并发状态模型的当前线程和锁对于即使是非常有才华的世界一流的工程师来说也太难了。我对自己说:“必须有一种更好的方法来解决这类并发的问题”。因此,我于2017年辞职并着手解决这个问题,Concurnas 作为一种使并发编程变得更容易的编程语言诞生了。

是什么促使您选择JVM而不是说LLVM?

Tatton:在运行时/虚拟机(例如LLVM或JVM)和宿主语言方面都需要进行很多创新。构建新的语言或虚拟机是一项艰巨的任务,而实际上,尤其是在与小型团队合作且期限紧迫的情况下,必须选择专注于某个领域或另一领域。

使用Concurnas时,我选择专注于语言,因此这决定了要使用哪个运行时。在性能方面,LLVM和JVM类似。最后,选择JVM的原因有两个:

(1)JVM是地球上最流行且分布最广泛的虚拟机-大多数企业使用Java,因此已经建立了JVM用例

(2)现有大量使用JVM语言(例如Java,Scala和Kotlin)编写的企业级代码,它们在一种可以提供易于理解和使用的并发模型的语言中寻求利用。

通过在JVM上实现Concurnas,可以为用户提供利用其所有现有JVM语言代码的功能。我们还可以访问Java标准库,因此不必从头开始创建一个支持该语言的库。

您是怎么想到“ Concurnas”这个名字的?

Tatton:由于Concurnas主要是一种语言,旨在使每个人都可以更轻松地进行并发编程,因此我们开始将其称为“ Concur”,即“ Concur-rent”。后来,对“ -nas”进行了标记,使“ Concurnas”听起来更好。

总体趋势是主要在系统编程中使用C,Rust和Go,而Java,Python和C#等语言则主要用于应用程序编程。Concurnas在哪里?

Tatton:Concurnas专为解决并发,并行和分布式计算问题而设计。在很大程度上,Concurnas擅长解决编程的系统和应用程序领域中存在的各种问题。我们现在正在研究的一件事是采用一种更类似于Rust的内存管理模型,以便为需要执行更多低级内存管理的用户提供机会,同时在Concurnas中拥有自动内存管理和垃圾回收的现有功能。如果他们愿意的话,就退缩。

您会推荐Concurnas来编写机器学习算法吗?

Tatton:尽管JVM和Java语言提供了卓越的性能,但尚未被ML应用广泛采用。这是不幸的。我相信这可能是由于Java语言的冗长。Concurnas解决了许多此类问题,因此在此基础上,我要说它是出色的候选人,这要归功于其并发模型和对GPU计算的一流公民支持-这对ML应用程序非常有益。

此外,我们正在寻找增加对语言自动区分的一流公民支持。这样,除了Apple Swift之外,Concurnas将成为第二种支持该语言功能的语言。这对于实施ML算法以及从事金融衍生工具计算的用户将带来巨大的好处。

您构建的Concurnas的哪个功能最令您满意?

Tatton:现代图形卡中存在的GPU可以用于通用目的的大规模并行计算。与传统的基于单核CPU的算法相比,利用GPU的算法将计算速度提高多达100倍是很常见的。此外,与基于CPU的实现相比,对于每个FLOP,此计算的功耗和硬件成本大大降低。

传统上,用户必须学习C / C ++才能利用GPU进行通用计算,这对于许多人来说是一个很大的入门障碍。Concurnas内置了对GPU计算的一流公民支持。用户可以编写惯用的,外观正常的Concurnas代码,并使该代码直接在GPU上运行,而无需首先学习C / C ++。

提供此功能非常令人满意,原因有两个:

(1)就减少计算的环境成本而言,GPU计算可以真正发挥作用。为此提供语言级别的支持为开发人员打开了闸门,使他们可以开始利用GPU硬件并从中受益

(2)从技术上讲,Concurnas的GPU计算组件主要是用Concurnas语言代码本身编写的!

这带来了一些有关引导Concurnas语言编译器的编译的有趣技术挑战,但是必须遵循“吃自己的狗粮”的原则来进行此操作,这一点很重要。

Concurnas如何提供并发计算?它在后台使用同步原语和线程吗?

Tatton:Concurnas中公开的核心并发原语是隔离。隔离是轻量级线程,可以同时执行计算。Concurnas中的所有代码都在隔离中执行。隔离不能直接在彼此之间共享内存,从属数据在创建时就被复制到隔离中-防止状态的意外共享,否则状态共享可能导致无法扩展的,不确定的程序行为。分离物之间状态的受控通信是通过使用称为refs的特殊对象来实现的,Concurnas自身的类型系统为其提供了支持。

在使用原始线程的情况下,我们受JVM的限制(可能产生的数量)限制,而在隔离线程中,我们的限制仅受机器可访问的内存量限制。这样,隔离器的规模要比原始线程好得多。在执行方面,隔离多路复用,并以协作方式作为延续运行。当隔离由于遇到等待来自另一个隔离的数据(通过ref通信)而无法继续计算的点时,它将执行其底层原始线程的执行,以便该线程可以执行不同的隔离。无论我们是在单核还是多核机器上执行,并行执行的基本模型都保持不变。

该模型的副作用是我们能够使用ref支持反应式编程范例。我们可以创建特殊的隔离(通过everyonchange关键字或相关的紧凑型Concurnas语法),这些隔离对一个或多个输入ref所做的更改做出反应并触发,并可以选择自己返回ref-从而为自己创建反应式计算图。这是解决并发问题的自然方法。

Concurnas的生产准备好了吗?

Tatton:Concurnas的构建始于2017年,并于2019年12月在MIT许可下作为开源正式发布了第一个生产版本。Concurnas现在已经可以生产了,在Concurnas Ltd.,我们能够为各种规模的组织提供商业支持包需要它。关于互联网上可用语言的免费社区资源也越来越多。

在未来五年中,您会在哪里看到Concurnas?

塔顿(Tatton):自三年前Concurnas成立以来,已经取得了很多成就。想象一下,随着社区在未来五年,十年或三十年中的不断发展,我们将能够实现的成就令人非常兴奋!如前所述,在不久的将来,我们正在考虑为语言增加自动区分功能。除此之外,我们正在寻求对用于处理大型数据集的堆外内存管理的改进支持以及改进的GPU计算接口。最后,我们正在考虑以对Jupyter笔记本,VS Code,IntelliJ和Eclipse的IDE支持的形式提供开发人员工具支持。

我们非常注重社区,欢迎反馈,并致力于满足积极使用该语言的客户的需求。为此,我们希望听到任何读者对他们希望在Concurnas编程语言中看到的内容的看法;请随时通过Concurnas网站上列出的一种方法与我们联系。

你可能感兴趣的:(java)