Platonic C#-通过独特类型管理参照透明度

关于柏拉图C#是通过围绕数据结构的默认不变性和可变类型实例的唯一性实施一组规则,在C#上下文中加强引用透明性。

计算机历史博物馆发布PostScript源

计算机历史博物馆与Adobe联合发布了PostScript源代码。在这里是发布的,有一些有用的历史背景和几张照片:

PostScript的故事有很多不同的方面。这是一个关于人类文化深刻变化的故事,也是一个关于源代码中商业秘密的故事。这是一个关于团队和几何的重要性的故事。这是一个关于工程师工程师的动机和教育的故事。

计算机历史博物馆很高兴首次公开发布突破性打印技术PostScript的源代码。我们感谢Adobe,Inc.的许可和支持,感谢John Warnock支持此版本。

韵文演算:函数逻辑程序设计的核心演算

韵文演算:函数逻辑程序设计的核心演算

https://simon.peytonjones.org/assets/pdfs/verse-conf.pdf

  • LENNART AUGUSTSON,瑞典史诗游戏
  • 乔奇姆·布雷特纳
  • KOEN CLAESSEN,瑞典史诗游戏
  • RANJIT JHALA,史诗游戏,美国
  • 西蒙·佩顿·琼斯,英国史诗游戏
  • 奥林·希尔斯(OLIN SHIVERS),美国史诗游戏公司/li>
  • TIM SWEENEY,史诗游戏,美国

函数逻辑语言有丰富的文献,但要给它们一个令人满意的语义是很难的。在这个
本文描述了Verse演算,VC,一种新的函数逻辑编程核心演算。我们的主要
其贡献是为VC配备了一个小步重写语义,以便我们能够推理VC程序
就像对待lambda微积分一样;也就是说,通过对其进行连续重写。


这篇草稿描述了我们目前对诗歌的思考。这在很大程度上是一项正在进行的工作,而不是一项已完成的工作
产品。设计的大致轮廓是稳定的。然而,重写规则的细节很可能会发生变化;我们
认为当前的规则并非以令人厌烦的方式融合在一起。(如果你了解汇流证明,
请和我们谈谈!)我们渴望与社区进行对话。请务必给我们写信。

LtU现在正在一个新的、更稳定的环境中运行

LtU最近经历了长时间的停机。它的软件基础设施已经过时,出现问题时很难维护。它现在已经迁移到一个全新的环境中。从现在开始,它应该会更加稳定。

格雷登·霍尔(Graydon Hoare):在60分钟内完成21个编译器和3个数量级

2019年,Graydon Hoare本科生演讲(幻灯片PDF)试图从以编译器为生的人的角度来传达编译器的外观。

我知道这个演讲已经一年多了,本打算在这里提交一个故事,但被大量优秀的观察结果所征服。我将对他使用的组进行总结:

  • 巨人:他指的是以老式方式构建的大型编译器,这些编译器投入大量资源来提高效率
  • 变体使用技巧来避免如此庞大:
    1. 更少的优化:要传统,但要有选择性,只有真正有回报的优化
    2. 使用编译器友好的语言,通过这些语言,他真正了解了有利于实现编译器的语言,如Lisp和ML
    3. 理论驱动的元语言,特别是像yacc这样的东西如何让传统的龙书风格的编译器更容易编写
    4. 编译器基于精心设计的IR,该IR易于编译或适合字节码解释
    5. 行使自由裁量权,使目标代码混合编译和解释
    6. 使用复杂的部分评估
    7. 忘掉传统,直接手工实现

我真的建议花点时间看这些幻灯片。虽然我所熟悉的大部分材料都是新的,但我真的很欣赏这些精辟的观点,对那些值得更多关注的项目(如Nanopass编译器和CakeML)的呼喊,以及在本科生水平上对Futamura投影(一个著名的复杂概念)的介绍。

可重用语言组件的潜在影响

Birthe van den Berg、Tom Schrijvers、Casper Bach Poulsen、Nicolas Wu的《可重用语言组件的潜在效果》:

编程语言的开发可能相当复杂且成本高昂。因此,人们致力于对语言特性进行模块化定义,这些特性可以以各种组合方式重用,以定义新的语言并对其语义进行实验。这些努力的一个显著成果是基于代数的“数据类型”点菜法(DTC)。当与代数效应相结合时,DTC可以对广泛的通用语言特征进行建模。不幸的是
当前技术水平不包括将执行延迟到适当点的高级控制流机制的模块化定义,例如按名称调用和按需要调用评估,以及(多)分段。本文定义了潜在效应,这是此类控制流机制的一类泛型。我们演示了如何使用潜在效果以模块化方式表达函数抽象、延迟计算和类似MetaML的分段,以及如何以各种方式组合它们以获得复杂语义。我们通过一系列示例提供了我们的效果和处理程序的完整Haskell实现。

看起来像是代数效应对更微妙的背景所采取的基本方法的一个很好的概括。代数效应已经在LtU上讨论过多次。我认为第2.3节中的描述是对他们方法的一个很好的概述:

LE&H是基于一种不同的,比AE&H的自由monad更复杂的结构。此结构支持非原子操作(例如,函数抽象、thunking、引用),这些操作包含或限定可能延迟执行的计算。此外,分层处理也是不同的。这个想法仍然是一样的,用它的意义来一点一点地替换树的结构。然而,虽然AE&H在不断缩小的树周围增加了含义,但LE&H在树中剩余的单个节点周围,而不仅仅是根周围,增加了很少的“意义口袋”。后者支持延迟效果,因为后期处理程序仍然可以重新排列早期处理程序创建的语义口袋。

谷歌图形查询语言PathQuery简介

谷歌图形查询语言PathQuery简介

我们引入PathQuery,这是一种图形查询语言,可以根据谷歌的查询和数据量以及内部开发人员社区进行扩展。PathQuery支持灵活的声明性语义。我们发现,这使查询开发人员能够在自然的“图形”设计空间中进行思考,并避免在关系空间中表达等效查询时经常需要协调大量连接和子查询的额外认知努力。尽管PathQuery具有面向遍历的语法风格,但它的基础是关系代数的自定义变体(我们目前暂缓对其进行阐述),允许应用常见和新颖的优化。我们相信,PathQuery在谷歌经受住了大规模和低延迟要求下的“时间考验”。因此,我们在这里分享了一种语言设计,该设计承认严格的声明语义,在实践中扩展良好,并为图遍历提供了自然语法,同时也承认复杂的图模式。

从工程的角度来看,我感兴趣的事情是:

1.PathQuery有一个模块/编译系统,可以跨项目重用PathQuery模块。(有人提到谷歌内部已经有大约40000个PathQuery模块……)
2.PathQuery支持本机函数,因此可以对某些查询片段进行程序性评估(窥视孔优化)
3.使用关系代数实现许多已知的优化,以及未来的优化

此外,从社会语言的角度来看,图形语言实际上是新的Object-Relational Mapping层,但它们解决了一个有趣的组织问题,即允许多个团队使用不同的语言进行编码,而无需在每种语言中重新编写/重新实现实体和映射配置。又是新旧事物。。。

谷歌宣布Logica:组织数据查询,使其普遍可重用且有趣

你可以在谷歌开源博客上阅读更多信息,Logica:组织数据查询,使其普遍可重用且有趣.

他们提倡在谷歌内部开发类似数据日志的语言。

原因是什么?

好的编程是关于创建小的、可理解的、可重用的逻辑块,这些逻辑块可以被测试、命名并组织成包,以后可以用来构建更有用的逻辑块。SQL抵制此工作流。尽管您可以将某些重复计算封装到视图和函数中,但这些计算的语法和支持可能因实现而异,包和导入的概念通常不存在,更高级的构造(例如将函数传递给函数)是不可能的。

Coq将被重命名

Coq-俱乐部:

Coq开发团队承认最近围绕Coq的徽标和名称进行的讨论(从Coq-Club邮件列表开始)。

我们要感谢参加这些讨论的每一个人。经历过骚扰或尴尬处境的人的证词,关于学生(尤其是女性)因Coq的名字而无法学习/使用Coq的报道都非常重要,这样社区才能充分认识到当前名称的影响及其英语俚语含义,特别是在Coq社区的性别多样性方面。

由于这些原因,Coq开发团队对重命名持开放态度。

备选名称建议go在这里.

LAMBDA:终极Excel工作表函数

安迪·戈登和西蒙·佩顿·琼斯在LAMBDA上的帖子使Excel用户能够定义函数。

自20世纪80年代发布以来,Microsoft Excel已经改变了人们组织、分析和可视化数据的方式,为每天使用它的数百万人提供了决策依据。它也是世界上使用最广泛的编程语言。Excel公式的编写用户数量比世界上所有C、C++、C#、Java和Python程序员的总和还要多。尽管Excel取得了成功,但作为一种编程语言,它仍存在根本性的弱点。多年来,两个特别的缺点已经凸显出来:(1)Excel公式语言实际上只支持标量值——数字、字符串和布尔值——以及(2)它不允许用户定义新函数。

直到现在。