我写了 scheme-langserver,大家有什么想要问的问题么?

2023-01-24 10:13:44 +08:00
 ufo5260987423

Scheme-langserver 是基于 Chez Scheme 并兼容 scheme r6rs 的 language server protocol 实现。它最大的特点是基于未完成的代码做编程辅助,包括自动完成、定义跳转等。这些功能是基于对 r6rs 标准的 scheme 进行静态分析得到的。它被发布在 Akku 和 github 。

一些辅助功能如自动完成、定义跳转、鼠标悬停显示文档等功能对于编程十分有帮助。但是,和其他的编程语言如 java 、python 、javascript 和 c ,lisp 系的语言服务器协议实现( language server protocol implementation )几乎是一篇空白。emacs 的 Geiser 、Dr. Racket 的 racket langserver 还有 swish-lint 等等,他们的工作基本上是基于 repl ( Read-Eval-Print Loop )或者词法解析器的,而不是基于编程的一般过程。例如,如果程序员正参与一个未完成的项目,里面的代码还并不是都能跑起来,Geiser 或者其他的竞品都只能提供对顶级变量、标识符的自动补全,这些标识符在 Chez Scheme 里面一般都通过 environment-symbols 过程列出来。也就是说,对于未完成的代码和局部标识符、局部变量(在其他语言中自动完成功能主要就是在补全它们),Geiser 等等无济于事。类似的事情同样出现在定义跳转等其他功能上。

目前,scheme-langserver 已经发布了 1.0.10 版本,通过多线程加速了代码索引过程。

3059 次点击
所在节点    Visual Studio Code
29 条回复
ufo5260987423
2023-01-24 21:43:12 +08:00
@gowl 你的写大了,大概是多大的量?
可以交流一下你的 case ,我针对性写一下代码。
ufo5260987423
2023-01-24 22:09:31 +08:00
@gowl 我突然想到一点 scheme 的绝对优势:肯定不会学 python 新标准把旧标准完全抛弃哈哈哈哈
gowl
2023-01-24 22:53:44 +08:00
> 你的写大了,大概是多大的量?

不算测试,一千行左右。如果是 Java 的话不算什么,但 Scheme 这种语义密度很高的一千行的程序就不小了。

> 肯定不会学 python 新标准把旧标准完全抛弃哈哈哈哈

不要和 Python 比:)

@ufo5260987423
mascteen
2023-01-24 23:47:44 +08:00
lisp 的强大毋庸置疑,所以方言非常多也各有特色,但我更顷向于统一标准的 common lisp,一是因为标准是固定的几乎不会改变,二是学习资料的完配三是友好的社区氛围,你是怎么认为的呢?
ufo5260987423
2023-01-25 07:31:07 +08:00
@gowl 正如你所说,语义密度 scheme 太高了。scheme-langserver 表现怎么样,这种时候就看你如何在文件层面分割了。
ufo5260987423
2023-01-25 07:33:50 +08:00
@mascteen 我当年也跟着田春冰河的足迹学过一些 common lisp 。我不是很熟悉现在的 cl 实践,但是正如我上面所说的:我需要一门足够简单的语言,然后根据自己的需求通过加库的方式激活一些特性。这方面 scheme 已经满足需求了。或者这么说吧(肯定不精确),我需要 c ,但是不需要 c++。
pisc
2023-01-25 10:02:30 +08:00
@ufo5260987423

> 它是一个 prover ,用各种数学证明保证你是正确的。
狭义上,Haskell 并不算 Prover (如 Coq/HOL/Idris 之类的),广义上(根据 CH 同构),任何静态语言都可以是 Prover 。

> (Haskell)不想在写代码之前先读书。
实际上,工程化的很多 Haskell 都写的非常简单,很多人都当作 C 来写,只不过很多人容易被一些“概念”引到另一条路上。
ufo5260987423
2023-01-25 21:02:13 +08:00
@pisc 嗯呢,我对 haskell 只有一个印象,并没有使用过。也看不太懂 haskell 社区讨论的太多东西,感觉有很多学术内容。
ufo5260987423
2023-09-14 14:56:04 +08:00
@zhuangzhuang1988 #14 scheme-langserver 的上一个版本修改了逻辑,就是用户更新代码的时候先暂存更新操作,到用户需要 autocomplete 或者什么其他别的功能的时候,再去更新 index 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/910417

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX