6 Star 29 Fork 13

Gitee 极速下载 / Berry

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/gztss/berry
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Berry

The Berry Script Language.

Introduction

Berry is a ultra-lightweight dynamically typed embedded scripting language. It is designed for lower-performance embedded devices. The Berry interpreter-core's code size is less than 40KiB and can run on less than 4KiB heap (on ARM Cortex M4 CPU, Thumb ISA and ARMCC compiler).

The interpreter of Berry include a one-pass compiler and register-based VM, all the code is written in ANSI C99. In Berry not every type is a class object. Some simple value types, such as int, real, boolean and string are not class object, but list, map and range are class object. This is a consideration about performance. Register-based VM is the same meaning as above.

Berry has the following advantages:

  • Lightweight: A well-optimized interpreter with very little resources. Ideal for use in microprocessors.
  • Fast: optimized one-pass bytecode compiler and register-based virtual machine.
  • Powerful: supports imperative programming, object-oriented programming, functional programming.
  • Flexible: Berry is a dynamic type script, and it's intended for embedding in applications. It can provide good dynamic scalability for the host system.
  • Simple: simple and natural syntax, support garbage collection, and easy to use FFI (foreign function interface).
  • RAM saving: With compile-time object construction, most of the constant objects are stored in read-only code data segments, so the RAM usage of the interpreter is very low when it starts.

Documents

Reference Manual: Wiki

Reference Manual: Read the docs

Short Manual (slightly outdated): berry_short_manual.pdf.

Berry's EBNF grammar definition: tools/grammar/berry.ebnf

Features

  • Base Type
    • Nil: nil
    • Boolean: true and false
    • Numerical: Integer (int) and Real (real)
    • String: Single quotation-mark string and double quotation-mark string
    • Class: Instance template, read only
    • Instance: Object constructed by class
    • Module: Read-write key-value pair table
    • List: Ordered container, like [1, 2, 3]
    • Map: Hash Map container, like { 'a': 1, 2: 3, 'map': {} }
    • Range: include a lower and a upper integer value, like 0..5
  • Operator and Expression
    • Assign operator: =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
    • Relational operator: <, <=, ==, !=, >, >=
    • Logic operator: &&, ||, !
    • Arithmetic operator: +, -, *, /, %
    • Bitwise operator: &, |, ~, ^, <<, >>
    • Field operator: .
    • Subscript operator: []
    • Connect string operator: +
    • Conditional operator: ? :
    • Brackets: ()
  • Control Structure
    • Conditional statement: if-else
    • Iteration statement: while and for
    • Jump statement: break and continue
  • Function
    • Local variable and block scope
    • Return statement
    • Nested functions definition
    • Closure based on Upvalue
    • Anonymous function
    • Lambda expression
  • Class
    • Inheritance (only public single inheritance)
    • Method and Operator Overload
    • Constructor method
    • Destructive method
  • Module Management
    • Built-in module that takes almost no RAM
    • Extension module support: script module, bytecode file module and shared library (like *.so, *.dll) module
  • GC (Garbage collection)
    • Mark-Sweep GC
  • Exceptional Handling
    • Throw any exception value using the raise statement
    • Multiple catch mode
  • Bytecode file support
    • Export function to bytecode file
    • Load the bytecode file and execute

Build and Run

  1. Install the readline library (Windows does not need):

    sudo apt install libreadline-dev # Ubuntu
    brew install readline            # MacOS
  2. Build (The default compiler is GCC):

    make
  3. Run:

    ./berry # Bash or PowerShell
    berry   # Windows CMD
  4. Install (Only Unix-like):

    make install

Editor plugins

Visual Studio Code plugin are in this directory: ./tools/plugins/vscode.

Examples

After compiling successfully, use the berry command with no parameters to enter the REPL environment:

Berry 0.0.1 (build in Dec 24 2018, 18:12:49)
[GCC 8.2.0] on Linux (default)
>

Now enter this code:

print("Hello world!")

You will see this output:

Hello world!

You can copy this code to the REPL:

def fib(x)
    if x <= 1
        return x
    end
    return fib(x - 1) + fib(x - 2)
end
fib(10)

This example code will output the result 55 and you can save the above code to a plain text file (eg test.be) and run this command:

./berry test.be

This will also get the correct output.

License

Berry is free software distributed under the MIT license.

The Berry interpreter partly referred to Lua's design. View Lua's license here: http://www.lua.org/license.html.

MIT License Copyright (c) 2018-2020 Guan Wenliang Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

Berry是一款一款为32位单片机设计的脚本语言 展开 收起
C/C++ 等 4 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C/C++
1
https://gitee.com/mirrors/Berry.git
git@gitee.com:mirrors/Berry.git
mirrors
Berry
Berry
master

搜索帮助