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?”类型。
这项工作的主要特点在于:
- 使用了作者自行开发的DSL(Domain Specific Language)和解释器实现类型推断功能。这大大降低了编写相关功能的难度,让整个项目的可维护性更强;
- 基于scheme-langserver的面向“未完成代码”的自动补全功能,能够补全局部变量(这在一些竞品中是不能实现的);
- 实现了“渐进定型”实现为动态类型语言的类型推导。关于这一点,可以看如下案例:
例如对于javascript代码,参数a的类型是不清楚的——关于这一点,在typescript当中的解决方法是第二行中的案例——添加类型标注(number)。
function(a){return 1+a} function(a : number){return 1+a}
但是实际上,我们当然知道“+”操作符操作的只能是“number”(当然还有string等等)。因此,应当由计算机自行推出“a”的类型为“number”而不需要自行推断(当然,这是有一定的代价和其他问题的)。
目前这项工作还存在一些问题,主要包括:
- 类型推断工作使得索引构建时间较长,较大程度影响用户使用体验;
- 类型推断系统引入了一个全排列操作,对于有较多参数(比如4个)的过程(或者说函数)的类型推导造成了限制;
- 还有大量的测试需要进行,以尽可能减少错误;
- 通过一些参数限制了涉及递归函数的类型推断以减少操作间隔感,但是这就在类型推断的可靠性上有了一些问题。
Scheme-langserver同时是“2022中国互联网发展创新与投资大赛公益项目暨2022年中国开源创新大赛”二等奖项目。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
魔豆文库 moredoc v2.1.0 发布,增强文档预览与集成Oauth登录
魔豆文库MOREDOC,使用 Go 语言开发实现的文库解决方案,dochub文库的重构版本,支持 office (全部类型)、PDF、TXT、EPUB、MOBI 等多种文档格式的在线阅读浏览,支持无限级分类、文档批量上传、文档批量转换、全文搜索、云存储、网络爬虫、VIP、手机号登录注册以及支付宝和微信支付等功能,拥有简洁美观的用户视觉和功能体验,以及配套的微信小程序。 技术栈 Golang :gin + gRPC + GORM Vue.js : nuxt2 + element-ui Database : MySQL 5.7+ 升级日志 社区版(开源版)升级日志 增加用户注册时邮箱验证控制(在后台->系统设置->安全配置->是否开启注册邮箱验证) 增加多种文档预览格式,除支持svg外,额外支持png、jpeg和webp等格式预览(在后台->系统设置->转换配置->预览格式配置) 增加reconvert指令,支持将以前的svg转为其他预览格式,以减少存储空间的占用和提升预览加载速度 变更程序指令提示,使用中文以便更清晰呈现指令的使用 专业版升级日志 专业...
- 下一篇
可观测性实战:快速定位 Redis 应用高时延问题
经验丰富的工程师都知道,在一个应用软件中,连接外部数据库的过程中,创建、获取、销毁连接是一个非常耗时的过程,如果极端情况下有几百毫秒的时延,软件整体性能就会大打折扣。所以我们一般会使用连接池来管理连接,使用连接池有以下几个优势:1. 提前创建连接,在应用真正需要连接数据库时无需耗费额外的建连时间,使高频操作节省了一大部分时间;2. 统一内存管理,如果每个开发人员都需要手动创建、手动销毁连接,如果某个地方出错,没有正确销毁连接,不仅会产生潜在的内存泄露风险、产生长连接也会消耗服务端可用的资源数量,应用服务长久运行之下会导致负荷越来越大,最终不得不重启应用,造成可用性降低。但使用连接池同时也会带来弊端:一个连接池组件通常会引入很多繁杂的配置,不合理的配置往往会造成性能隐患,并进而导致生产故障,而这样的问题也往往难以排查,在本文中,我们将从一个应用高时延问题入手,体验使用 DeepFlow 层层分析并定位根因,帮助团队找到隐患。 欢迎报名参与11月25日,由 DeepFlow 社区联合KubeSphere社区主办的《云原生 + 可观测性 Meetup》,我们在广州等你! 01、背景介绍 某日...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6