Beagle,一个存储抽象语法树的源代码管理系统。
Beagle, a source code management system that stores AST trees

原始链接: https://github.com/gritzko/librdx/tree/master/be

比格尔是一个实验性的、早期阶段的源代码管理系统,它与传统系统不同之处在于存储抽象语法树(AST)而不是二进制文件。它的目标是成为所有代码相关信息的中心数据库——代码、工单、CI结果等等,并利用键值数据库(目前是RocksDB)作为其后端存储。 比格尔使用一种名为AST BASON的CRDT类数据格式,用于可合并的二进制JSON表示。目前,它可以可靠地托管自己的代码,但对于其他项目的稳定性尚不能保证。 基本命令包括`be post`用于初始化仓库,`be get`用于检索代码,`be repo`用于显示仓库信息。比格尔跟踪文件和“路标”,代表项目内的更改,提供了一种新颖的版本控制方法,侧重于代码理解而不是差异。建议用户谨慎使用,因为该项目仍在积极开发中。

## Beagle:一种新的源代码管理方法 一种名为Beagle的新源代码管理系统正受到关注,因为它存储抽象语法树(AST),而不是原始文本。讨论的重点在于这种方法是否比Git等传统系统具有优势。 支持者认为,AST存储可以消除由格式差异引起的合并冲突,并实现更智能的合并和重构,从而可能简化协作和版本控制,尤其是在AI辅助编码兴起的情况下。CRDT(无冲突复制数据类型)被用于确定性地管理更改。 然而,人们担心支持多种语言的复杂性以及版本控制系统与编辑器之间可能存在的紧密耦合。一些人认为,可以根据需要进行解析为AST,而存储文本仍然更简单且更具可读性。现有的工具,如tree-sitter,旨在解决语言解析的挑战。 最终,这场讨论凸显了对更复杂的版本控制的需求,以应对不断变化的软件开发环境,包括AI驱动的代码生成和协作。Beagle被呈现为一个探索该方向的实验性项目。
相关文章

原文

Beagle is a source code management system that stores AST trees, not binary blobs. The general idea is a database for the code as a hub of all code-related activities and storage for all the related data (tickets, CI results, whatsnot). The backing store is virtually any key-value database (rocksdb as of now). The data format AST BASON is CRDT-ish.

Beagle is early stage and experimental. It host itself, the rest is not guaranteed. Use at your own risk.

Further reading:

  1. design rationale
  2. branching and storage model
  3. BASON, cheap mergeable binary JSON
    # Initial POST of a project. We specify repo, project path.
    # Absence of http: or ssh: makes it local to the store in $HOME/.be
    $ be post //replicated.live/@gritzko/librdx
    ...
    OK   h    ast/tree-sitter/point.h
    OK   h    ast/tree-sitter/parser.h
    OK   c    ast/tree-sitter/query.c
    OK   text ast/verilog/LICENSE
    ...million more lines...

    # Inspect RocksDB inners just out of curiosity.
    $ ls $HOME/.be/replicated.live/
    # Inspect worktree/repo state
    $ cat .be
    //replicated.live/@gritzko/librdx
    $ be
    repo: replicated.live
    project: /@gritzko/librdx
    branches: *main
    base files: 574, waypoints: 0

    $ cd /some/other/dir
    $ be get //replicated.live/@gritzko/librdx
    ...a million lines...
    OK   h    rdx/test/YX.h
    OK   h    rdx/test/ZE.h
    OK   sh   rdx/test/http-test.sh
    OK   sh   rdx/test/query-test.sh
    OK   sh   scripts/ci-fast.sh
    $ cd librdx
    $ be
    repo: replicated.live
    project: /@gritzko/librdx
    branches: *main
    base files: 574, waypoints: 0
联系我们 contact @ memedata.com