scheme-langserver 发布类型推断功能,并整合进入 auto-autocomplete.


Scheme-langserver是一款面向scheme语言的语言服务器,它基于LSP协议(Language Server Protocol)提供了自动补全(auto-complete)、寻找变量定义(goto definition)等功能。

11月21日,scheme-langserver发布了类型推断功能,并将该功能整合进入了自动补全。如图所示,在补全光标处的引导词“l”(大写L)时,scheme-langserver给出了多个可选项,并且将类型匹配程度较高的“length-a”、“length-b”放到了比较靠前的位置——因为“>=”过程(也就是其他语言中的函数)要求变量必须是“real?”,而上文可以推断出“length-a”、“length-b”为“integer?”类型。

这项工作的主要特点在于:

  1. 使用了作者自行开发的DSL(Domain Specific Language)和解释器实现类型推断功能。这大大降低了编写相关功能的难度,让整个项目的可维护性更强;
  2. 基于scheme-langserver的面向“未完成代码”的自动补全功能,能够补全局部变量(这在一些竞品中是不能实现的);
  3. 实现了“渐进定型”实现为动态类型语言的类型推导。关于这一点,可以看如下案例:

例如对于javascript代码,参数a的类型是不清楚的——关于这一点,在typescript当中的解决方法是第二行中的案例——添加类型标注(number)。

function(a){return 1+a}

function(a : number){return 1+a}

但是实际上,我们当然知道“+”操作符操作的只能是“number”(当然还有string等等)。因此,应当由计算机自行推出“a”的类型为“number”而不需要自行推断(当然,这是有一定的代价和其他问题的)。

目前这项工作还存在一些问题,主要包括:

  1. 类型推断工作使得索引构建时间较长,较大程度影响用户使用体验;
  2. 类型推断系统引入了一个全排列操作,对于有较多参数(比如4个)的过程(或者说函数)的类型推导造成了限制;
  3. 还有大量的测试需要进行,以尽可能减少错误;
  4. 通过一些参数限制了涉及递归函数的类型推断以减少操作间隔感,但是这就在类型推断的可靠性上有了一些问题。

Scheme-langserver同时是“2022中国互联网发展创新与投资大赛公益项目暨2022年中国开源创新大赛”二等奖项目。


相關推薦

2023-05-01

今天,scheme-langserver( https://github.com/ufo5260987423/scheme-langserver)发布了一个最新版本 1.0.11 ,该版本中加入了 scheme 生态中第一个 gradual typing 实现。 以下内容摘自 scheme-langserver 的相关文档( https://github.com/ufo5260987423/scheme-langserver/blob

2022-03-27

Go 泛型主要设计者 Ian Lance Taylor 视频地址: 不久前正式发布的 添加了对泛型的支持,据称泛型是 Go 开源以来所做的最大改变。泛型是一种编程范式,这种范式独立于所使用的特定类型,泛型允许在函数和类型的实现中使用某

2022-05-30

PhpStorm 2022.2 早期访问计划 (EAP) 正式发布!该版本带来泛型、Rector 支持和一系列质量改进的许多新功能。 Rector 支持 Rector 可批量进行 PHP 自动升级和代码重构,现在在 PhpStorm 中为它提供内置支持。 使用 PhpStorm 的 Rector 支

2023-04-16

根据 KotlinConf 2023 的消息,Kotlin 2.0 和 Kotlin K2 编译器即将发布。 Kotlin 2.0  从 Kotlin 1.8.20 开始,已经可以通过常规 Kotlin 语言版本标志( -language-version)启用 Kotlin 2.0 的预览。 Kotlin 2.0 发布后,将提供几个备受期待的功

2022-04-09

它的类型由一个先进的全局类型推理算法来解决。 最新发布的 1.4.0 版本包含错误修复和功能改进,涉及到语法、标准库、集合、加密、文件、语法宏、网络、运行时和规范等,详情查看 release note。 值得关注的变化 初步支持 We

2023-01-06

能,支持节点的迁移。另外,我们也修复了一些问题,并发布到 1.7.x 版本中。 12月的版本发布包括: v1.8.0-alpha.3:包含 1.8.0 已开发完成的新功能 v1.7.4:包含 bug fixes v1.7.5:包含 bug fixes 连接格式优化和自定义:序

2023-01-08

型工具。Mongoose 支持 promises 和 callbacks。Mongoose 6.8.3 正式发布,本次更新内容如下: perf:提高 assignRawDocsToIdStructure 的性能,以便更快地填充大型文档 #12867   fix(model):确保 insertMany() 中验证错误的顺序一致:false

2022-06-10

Kotlin 1.7.0 已经发布啦。新版本推出了新的 Kotlin/JVM K2 编译器的 Alpha 版本,稳定了语言特性,并为 JVM、JS 和 Native 平台带来了性能改进。 以下是此版本的主要更新: 新的 Kotlin К2 编译器现在处于 Alpha 阶段,它提供了显着的

2023-04-08

确地展示规则启动中的状态。 eKuiper 1.9.0 将在本月底发布。除此之外,eKuiper 也在 3 月份发布了 1.8.2 版本,主要修复了用户和社区反馈的问题。 多 Neuron 对接 Neuron 是运行在各类物联网边缘网关硬件上的工业协议网关软件,

2022-03-22

关重要。 据介绍,伴随着支持 LoongArch 的 FFmpeg 5.0 版本发布,龙芯5000桌面处理器平台能更好地释放潜能,为龙芯电脑终端带来更佳的音视频体验,具体到使用体验以及技术支持上将有以下重要提升: 支持 4K 高码率 FFmpeg 5.0版本

2022-04-10

TypeScript 4.7 首个 Beta 版本已发布。 主要更新内容 在 Node.js 中支持 ECMAScript 模块 Control over Module Detection 面向计算属性 (Computed Properties) 的控制流分析 优化对象和方法中的函数推断功能 (Function Inference) 引入实例化表达式

2022-07-13

PhpStorm 2022.2 Beta 已发布,本期带来如下更新: 新的功能 Mockery 支持 Rector 支持 在 创建类 对话框中可创建枚举 Blade 支持 @props 和 @aware 指令 PHP、JSON、YAML 和 .properties 中的可点击 URL 对泛型的改进 支持 int 改进了

2023-09-16

发,采用SQL交互的,基于分布式向量化的统计分析、因果推断计算库;目前已在微信视频号、微信搜一搜等微信内部多个业务进行了应用。 根据介绍,该项目旨在解决已有统计模型库(R/Python)在大数据下的性能瓶颈,提供百亿级

2023-02-23

Godot Engine 是一个功能丰富的跨平台游戏引擎,可以从一个统一的界面创建 2D 和 3D 游戏。它提供了一套全面的通用工具,因此用户可以专注于制作游戏。游戏可以一键导出到多个平台,包括主要的桌面平台(Linux、macOS、Windows)