编写绿色软件 - 是我们对环境不友好的代码
#编程 #c #vely #green

云计算在历史上是普遍存在但前所未有的。计算发生的规模是巨大的,其对环境的影响也是如此。这种影响只有预计会增长,并且会迅速增长。

公司(包括英特尔)社区概述了这些问题,并宣布了一项绿色计算计划。我说的是绿色软件基金会(GSF)。 GSF主席阿西姆·侯赛因(Asim Hussain)几天前出版了:

Our Code Is Harming The Planet, We Need Carbon Aware Design Patterns

虽然GSF的努力目前专注于位置,时间和需求转移到能源具有最低碳足迹的位置,但我认为计算本身同样重要。

有无数的语言用于云应用程序。他们中的大多数人以Python,PHP,Java等人的流行语言之一运行。这些语言中大多数共同的一件事是,它们仍在骑摩尔定律的浪潮。这意味着抽象,虚拟机(VM),字节代码和类似方案的扩散倾向于侧重于增加的人体工程学和丰富的特征而没有性能是前部和中心。随着时间的流逝,并非总是直线,膨胀使焦点更远。

这种方法增加了对CPU和更多RAM的需求,并具有可预测的后果:

  • 更高的能量使用和不断增加的碳足迹,
  • 对稀有材料的需求更大,并且稀有且有些随机分散在地壳中,获得了挑战,
  • 不关注性能的软件系统在需求增加时需要更大,更频繁地升级,这意味着更高的资源需求和更多需要回收的垃圾硬件,
  • 更大的冷却需求,在某些社区(例如Mesa,AZ和Bluffdale,UT)正在引起严重的水问题。

在此MIT press文章中探讨了其中一些问题:

Cloud现在的碳足迹比航空公司行业更大,并且对供水的影响很大。一个数据中心可以消耗50,000户房屋的等效电力。每年200 Terawatt小时(TWH),数据中心集体吞噬比某些民族国家更多的能源。

性能很重要。显然,这对于客户满意度很重要。这对您的底线很重要,因为您可以使用较便宜的服务器,而较少的服务器可以从客户的角度获得相同的结果。

,但性能除外至关重要。这对我们的环境甚至我们的长期生存都很重要。

我想起了Wirth's law,有时以其他名称(例如门法)而闻名。它基本上说“软件的速度每18个月一半”。这确实是一个具有讽刺意味的评论,但并未提及,但仍在this Forbes article中进行了探索,恰当地题为“为什么软件不遵守摩尔定律”。引用其原因为(摘录和缩短文章):

  • 懒惰设计。力量和能力的提高大大减少了对高效建筑和经济设计的需求。
  • 维护和支持。 Java的主要语言架构师Brian Goetz最近表示,能够阅读代码比编写代码要重要得多。这是因为维护一生中软件程序的成本大大超过了编写它们的初始成本。
  • 虚拟化和云。典型的Web应用程序(其中许多是用Java编写的)不会直接在操作系统上运行。他们需要一个应用程序平台,例如WebLogic,WebSphere或Apache Tomcat,然后在Java虚拟机中运行,然后在Linux操作系统上运行。

其中一些原因暗示着“/或”的含义,尽管这并非完全以这种方式阐明。例如,我完全同意Brian Goetz的观点,因为软件的可读性比编写它的能力更重要。但这不应该暗示性能仍然不在前面和中心。

可以解决许多可能的改进。解释和基于VM的语言都可以配备本机功能,其中一些已经存在(或已经存在)。其他解决方案可能包括模糊从语言到硬件的抽象层之间的线条。不论如何。

,共同的主题是更直接地到达硬件。

另一个经常被忽视的问题是编程语言本身中的抽象层。这与硬件的距离无关。它与语言本身的复杂性有关。其中更多的倾向于“权衡”普通程序员可以实现的理论性能,而实际绩效甚至更是如此。

其中一些归结为内部实施所述抽象的不可避免的成本 - 对此几乎没有什么可做的,但是重新设计语言以减少或消除它们。

另一方面,人类所见的语言结构的复杂性,通常是一个不知道如何使用它的“白痴程序员”的问题。事实更有可能是相反的,尽管训练和技能差也发挥了作用。但是随后,所需的培训和技能水平越高,人工成本越高。

为此,语言基本原理的简单性很重要。但是,对于预期的开发人员生产率的水平,这还不够。

可以首选的富函数层,功能性和声明性。这层需要偏向自然语言表达式,就像SQL一样,而不是如今如此普遍的抽象层。但是它的意图也必须是浅薄的,而不是过于专业,因此它仍然是通用开发系统。

这就像结合两个离群值(高性能和高声明功能),而不是在编程语言中以抽象的层次传播,这两项都不是很好 - 今天的景观可能是理论上最适合的景观通用问题解决。

我提出了前者 - 将两个异常值组合在一起。这是最近没有听到的。

的原因可能是软件开发的“统治范式”已自行生活,与能源,稀有材料,水问题,可持续性甚至地缘政治和供应链问题的现实有所脱离。

,但我相信这是朝着正确方向发展的需要。

我建议将应用程序开发转移到具有最高绩效的编程语言,即使您使用其他语言也很普遍。

我在谈论c-所有语言的母亲,但是本身并不仅仅是。通过改善人体工程学,丰富性,安全性和应用程序开发的速度的框架,这可能是我所暗示的。

首先,C是greenest programming language,这意味着它消耗了最少的能源和资源。它也可能是最简单的,即使不是直的,也可能是。

请记住,摩尔的定律是slowing down,即使在不久的将来的某个时候结束。麻省理工学院的研究解释了当今使用的通用语言中有多少膨胀和绩效损失,以及C可以大大减少能源和资源消耗:

汤普森和他的同事表明,他们可以通过从普通的通用编程语言Python切换到更有效的C来获得计算密集的计算,从而更快地运行47倍。它需要从程序员那里进行更多的工作,从而大大减少了所需的操作数量,从而使程序运行得更快。

以上是一个特殊的密集计算案例,通常C中的一个程序可能不会更快47倍,但是显然,有很大的空间可以改善性能和降低足迹。即使全面增长了10-20%,也将是巨大的。可能还有更多。

作为朝这个方向的候选解决方案,我已经开发了Vely,这是一个通用C框架。由于其功能性和声明性的性质,您可能同样(即使不是更多的话),即使不是更多的富有成效的语言。并且在没有任何中介机构的情况下坚定地基于本地绩效,它可以帮助改变计算的环境前景。

有关Vely的功能和人体工程学的更好感觉,请参见examples

封面图像版权所有Sergio Mijatovic 2022