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

2024-07-12

    后来不断完善,准备正式发布,就更名为了 kfyty-framework,并发布了 kfyty-framework 1.0.0 版本。     再后来,有读者建议取个正式一点的名字,因为正式更名为 loveqq-framework

2022-03-27

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

2024-07-26

本次更新: 优化: loveqq-mvc,控制器全局异常切面实现从代理改为异常处理器,减少代理调用 优化:loveqq-cache,新增响应式缓存支持,默认提供 ConcurrentHashMap 实现 优化:loveqq-cache-redis,整合 redisson 响应式缓存支持

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 连接格式优化和自定义:序

2024-06-25

v3.4.0 版本主要带来了以下重磅更新:   AI 对话:集成了通义、文心、Kimi等大模型的AI对话功能 国际化:前后端完整的国际化方案实现 代码生成:devtools支持配置并生成业务对象选择器、配置并生成链接弹窗查看

2024-05-09

器等。 kfyty-aop AOP 模块,支持 ant 路径匹配、支持注解类型匹配、集成 AspectJ,可以单独使用,也可以集成到 kfyty-boot 自动配置。 kfyty-sdk 用于快速封装 sdk,只需编写请求及响应模型,支持拦截器,易于拓展,支持命令式、响

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版本