#python #贝达 #读取 #函数 #导入 #功能 #语言

贝达

在 Python 中使用贝达语言函数和功能!

1 个不稳定版本

0.1.2 2024 年 7 月 9 日
0.1.1 2024 年 7 月 9 日

#1085Rust 模式

每月 29 次下载

MITLGPL-3.0-only

98KB
2K SLoC

贝达

Numba-like Python 翻译到 HVM/贝达.

Read the Docs

这是 MVP 阶段。

示例

import benda
import random

book = benda.load_book("""
(Sort List/Nil) = List/Nil
(Sort(List/Cons head tail)) =
((Part head tail) λmin λmax
 let lft=(Sort min)
 let rgt=(Sort max)
 (Concat lft(List/Cons head rgt)))

# Partitions a list in two halves, less-than-p and greater-than-p
(Part p List/Nil) = λt(t List/Nil List/Nil)
(Part p(List/Cons head tail)) = (Push(> head p) head(Part p tail))

# Pushes a value to the first or second list of a pair
(Push 0 x pair) = (pair λmin λmax λp(p(List/Cons x min) max))
(Push _ x pair) = (pair λmin λmax λp(p min(List/Cons x max)))

(Concat List/Nil tail) = tail
(Concat(List/Cons head tail) xs2) =
(List/Cons head(Concat tail xs2))
""")

List = book.adts.List

def gen_list(n: int, max_value: int = 0xffffff) -> list[int]:
    result: list[int] = []
    for _ in range(n):
        result.append(random.randint(0, max_value))
    return result


def to_cons_list(xs: list[int]):
    result = List.Nil()

    hi = len(xs)
    if hi == 0:
        return result

    while hi > 0:
        hi -= 1
        result = List.Cons(xs[hi], result)

    return result

def print_cons_list(list):
    while True:
        match list:
            case List.Cons.type(value, tail):
                print(value, end=", ")
                list = tail
            case List.Nil.type():
                break


data = gen_list(5, 1000)
cons_list = to_cons_list(data)
book.set_cmd(benda.BendRuntime.Cuda)
sorted_list = book.defs.Sort(cons_list)
sorted_list = sorted_list.to_adt(book.adts.List)
print_cons_list(sorted_list)

安装

要安装当前版本

$ pip install benda

开发

依赖项

  • Python 3.11+
  • Rust
  • C 编译器
  • maturin

使用 Nix 获取依赖项(可选)

  • 使用 Determinate Nix 安装程序 安装 Nix

    curl --proto '=https' --tlsv1.2 -sSf -L \
      https://install.determinate.systems/nix | sh -s -- install
    
  • 您可以运行 nix develop 进入一个已安装依赖项的 shell。

构建

  • 创建并激活一个 Python 虚拟环境。

    • 例如
      python -m venv .venv
      source .venv/bin/activate
      
  • 运行 make 构建项目并在虚拟环境中安装 benda 软件包。

依赖项

~17–24MB
~359K SLoC