A statically typed language that can deeply improve the Python ecosystem

Overview

The Erg Programming Language


This is the main source code repository for Erg. This contains the compiler and documentation.

Build status Build status
日本語 | 简体中文 | 繁體中文

Erg can be recommended to a person that:

  • wants Rust-like robustness and comfortable compiler support, and yet, doesn't need the verbose type specifications & memory management model like Rust.
  • frustrated with Python, but can't throw away Python code assets.
  • wants a simple and consistent language like ML.
  • wants a practical general-purpose language with dependent/refinement types.
  • wants a language like Scala that can be used both object-oriented and functional.

Features

Some features are not yet implemented. Please see TODO.md for implementation status.

  1. Robustness

    Erg has a smart & powerful type system. For example, Erg can do null checking (Option type), division by zero, and out-of-range addresses in arrays at compile time.

    rand = pyimport "random"
    
    l = [1, 2, 3]
    assert l in [Nat; 3] # type checking
    assert l in [1..3; 3] # more detailed
    l2 = l.push(rand.choice! 0..10)
    assert l2 in [0..10; 4]
    assert l2 + [3, 5, 7] in [0..10; 7]
    # This causes an IndexError, Erg can detect it at compile time
    l2[10] # IndexError: `l2` has 7 elements but was accessed the 11th element
    
    2.times! do!:
        print! "hello, ", end := ""
    # => hello, hello,
    -2.times! do!:
        print! "hello, ", end := ""
    # TypeError: `.times!` is a method of `Nat` (0 or more Int), not `Int`
    
    {Meter; Sec; meter; yard; sec; ...} = import "unit"
    
    velocity x: Meter, t: Sec = x / t
    
    v = velocity 3yard, 2sec # TypeError: the type of `x` was mismatched: expect `Meter`, found `Yard`
    v = velocity 3meter, 2sec # v == 1.5 m/s
  2. Simplicity

    Erg consists of a very simple syntax, which can significantly reduce the amount of code compared to other languages. However, its functionality is not inferior to them.

    Since the type inference system is powerful, you can code like a dynamically typed language.

    fib 0 = 0
    fib 1 = 1
    fib n = fib(n - 1) + fib(n - 2)
    assert fib(10) == 55

    In Erg, there are very few things that are treated as special; there are no reserved words. even for and while expressions are just one of the subroutines, so this is possible.

    loop! block = while! True, block
    
    # equals to `while! True, do! print! "hello"`
    loop! do!:
        print! "hello"
  3. Functional & Object-oriented

    Erg is a pure object-oriented language. Everything is an object; types, functions, and operators are all objects. On the other hand, Erg is also a functional language. Erg requires some kinds of markers to be placed on code that causes side effects or changes internal state, which can localize the complexity of code. This will greatly improve the maintainability of your code.

    # Functional style (immutable), same as `sorted(list)` in Python
    immut_arr = [1, 3, 2]
    assert immut_arr.sort() == [1, 2, 3]
    # Object-oriented style (mutable)
    mut_arr = ![1, 3, 2]
    mut_arr.sort!()
    assert mut_arr == [1, 2, 3]
    i = !1
    i.update! old -> old + 1
    assert i == 2
    
    # Functions cannot cause side effects
    inc i: Int! =
        i.update! old -> old + 1
    # SyntaxError: cannot call a procedural method in a function
    # hint: only methods of mutable types can change the state of objects
    
    # Code that uses a lot of side effects is redundant, so you will naturally write pure code
    Counter! = Inherit Int!
    Counter!.
        new i: Int = Self!::__new__ !i
        inc! ref! self =
            self.update! old -> old + 1
    
    c = Counter!.new 1
    c.inc!()
    assert c == 2
  4. Interoperability

    Erg is internally compatible with Python and can import the Python API at zero cost.

    # using built-in Python modules
    math, time = pyimport "math", "time"
    {sin; pi; ...} = math
    # using an external Python module
    Tqdm! = pyimport("tqdm").'tqdm'
    
    print! sin pi # 1.2246467991473532e-16
    for! Tqdm!.'__call__'(0..99), i =>
        time.sleep! 0.01 * i
  5. Readable Error Messages

    Erg emphasizes the readability of error messages; Erg is a programmer-friendly language, unlike C++.

    proc! x =
        l = [1, 2, 3]
        l.push!(x)
        l
    Error[#12]: File example.er, line 3, in <module>::proc!
    2│     l = [1, 2, 3]
    3│     l.push!(x)
             ^^^^^
    AttributeError: Array object has no attribute `.push!`
    hint: to update the internal state of an object, make it mutable by using `!` operator
    hint: `Array` has `push`, see https://erg-lang.github.io/docs/prelude/Array/##push for more information
    hint: `Array!` has `push!`, see https://erg-lang.github.io/docs/prelude/Array!/##push! for more information

Requirements

A Python3 interpreter is required. If it is already installed on your machine, no setup is required.

Installation

Installing by cargo (Rust package manager)

cargo install erg

By enabling the --features flag, you can change the language in which error messages are displayed.

  • Japanese
cargo install erg --features japanese
  • Chinese (Simplified)
cargo install erg --features simplified_chinese
  • Chinese (Traditional)
cargo install erg --features traditional_chinese

And more languages will be added (we are looking for translators. Please join the Translation Project).

  • Debugging mode (for contributors)
cargo install erg --features debug

Building from source

Building from source code requires the Rust toolchain.

git clone https://github.com/erg-lang/erg.git
cd erg
cargo build --release

Building by Nix

If you've been installed Nix, the following command will be generate binary into result/bin/erg under the project.

git clone https://github.com/erg-lang/erg.git
cd erg
nix-build

If you've been enabled Nix Flakes.

git clone https://github.com/erg-lang/erg.git
cd erg
nix build

Contribution

Contributions are always welcome! To get started with contributions, please look CONTRIBUTING.md.

If you have any questions, please feel free to ask them on the Discord channel.

License

All files in the assets and doc folders are licensed with CC-BY-4.0. The rest of the files in this repository are licensed with Apache License 2.0 + MIT License.

For credits about third party crates, see THIRD_PARTY_CREDITS.md.

Comments
  • feat: switch to pipe mode if piped from stdin

    feat: switch to pipe mode if piped from stdin

    This PR close https://github.com/erg-lang/erg/issues/1.

    Case

    on 527afef:

    $ echo "1 + 2" | cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.01s
         Running `target/debug/erg`
    Error[#0000]: File <stdin>, line 1, in <module>
    1│ 1 + 2
       ^^^^^
    SyntaxError: the evaluation result of the expression is not used
    hint: if you don't use the value, use `discard` function
    

    on 5267e918 (base branch):

    $ echo "1 + 2" | cargo run
        Finished dev [unoptimized + debuginfo] target(s) in 0.01s
         Running `target/debug/erg`
    Starting the REPL server...
    Connecting to the REPL server...
    Retrying to connect to the REPL server...
    Erg interpreter 0.2.5 (tags/?:5267e91, 2022/08/17 16:31:29) on x86_64/linux
    >>> 3
    >>> XXX lineno: 1, opcode: 0
    Traceback (most recent call last):
      File "<string>", line 25, in <module>
      File "<string>", line 1, in <module>
      File "/usr/lib/python3.9/importlib/__init__.py", line 169, in reload
        _bootstrap._exec(spec, module)
      File "<frozen importlib._bootstrap>", line 613, in _exec
      File "<frozen importlib._bootstrap_external>", line 790, in exec_module
      File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
      File "<stdin>", line 1, in <module>
    SystemError: unknown opcode
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "<string>", line 28, in <module>
    NameError: name 'e' is not defined
    
    >>> 
    >>> thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 32, kind: BrokenPipe, message: "Broken pipe" }', src/dummy.rs:69:49
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    
    opened by KisaragiEffective 11
  • Implement normal set literal

    Implement normal set literal

    Implementation is simple. If there are duplicate element(s), they are not pushed.

    • [ ] Completed implement normal set
      • [x] parse
      • [x] hir
      • [ ] lower
        • [x] add Set(T, N)/Set!(T, !N) type (almost same as Array!(T, N)/Array!(T, !N))
        • [x] register Set, Set! definitions to the builtin Context
        • [x] check if objects implement Eq
        • [ ] (optional) warn of any duplicate elements
        • [x] tyvar
        • [x] link
      • [x] effectcheck
      • [x] memcheck
      • [x] codegen

    Additional

    • [ ] comparing
    • [ ] set operations
      • [ ] and
      • [ ] or
      • [ ] in
      • [ ] not

    @mtshiba

    enhancement 
    opened by GreasySlug 10
  • Add basic numeric calc and bool type

    Add basic numeric calc and bool type

    Related #178.

    Four arithmetic operations, comparisons, and logical operations were missing, so those were added in Japanese.

    Once this has been reviewed, then I' ll translate it into English and add it later.

    @mtshiba

    opened by GreasySlug 10
  • Modify error fomat

    Modify error fomat

    Fix: #2.

    Intro

    The error handling code you wrote was very clear and abstract. But what I am rewriting now is not. This code is pretty dirty and you can just discard it.

    Changes proposed in this PR

    • [x] Add styled about color and attribute
    • [x] Coloring using prescribed colors
    • [x] Modify error formatting using prescribed color and chars
    • [ ] Fix #2
    • [ ] Long error description formatting

    I want to reformat like following.

    • Current format
    +----------------+
    | header         |
    +----------------+
    | linen + codes  |
    |         points |
    +----------------+
    | footer         |
    +----------------+
    Error[#0555]: File .\examples\array.er, line 6, in <module>
    6│ mut_content_arr.map!(x -> x + 1)
       ^^^^^^^^^^^^^^^
    NameError: ::mut_content_arr(: Failure) is not defined
    Error[#0555]: File .\examples\array.er, line 10, in <module>
    10│ telescoping_arr.push!(6)
        ^^^^^^^^^^^^^^^
    NameError: ::telescoping_arr(: Failure) is not defined
    
    • [WIP] Modifying format
    +-------------+
    | header      |
    +-------------+
    | codes       |
    | lbot + desc |
    + ------------+
    | footer      |
    +-------------+
    Error[#0572]: File .\examples\array.er, line 6, in <module>
    
    6 | mut_content_arr.map!(x -> x + 1)
      : ---------------
      :                `- NameError: ::mut_content_arr(: Failure) is not defined
    
    Error[#0572]: File .\examples\array.er, line 10, in <module>
    
    10 | telescoping_arr.push!(6)
       : ---------------
       :                `- NameError: ::telescoping_arr(: Failure) is not define
    
    Error[#0357]: File <stdin>, line 1, in <module>
    
    1 | print
      : -----
      :      `- NameError: print is not defined
    
    hint: exists a similar name variable: print!
    

    Edit

    Enable colors and chars in a specified theme experimentally.

    cargo run --features "unicode pretty"
    

    Default is ANSI color and ASCII.

    The above will use unicode chars and custom colors.

    • unicode: use , , · and

    • pretty: use emoji and custom colors This is a experimental addition to prove that changes can be made Custom colors are put on in order to set up coloring for CVD(Color Vision Deficiency) etc. in the future, and will be separated from pretty

    • original error format origin_err

    • default format default_err

    • unicode and pretty format emoji_err

    @mtshiba

    opened by GreasySlug 9
  • Implement `Dict`

    Implement `Dict`

    The following new implementations have been included to implement Dict.

    • Type::ProjMethod: This allows for advanced type operations such as {Int: Str}[Int] (== Str).

    And with this, erg_type::ConstSubr now depends on Context in erg_compiler, so the erg_type crate has been downgraded to a module.

    opened by mtshiba 7
  • Dict is not implemented

    Dict is not implemented

    Reproducible code:

    > erg examples/dict.er
    

    Result:

    thread 'main' panicked at 'not yet implemented', C:\Users\sbym8\.cargo\registry\src\github.com-1ecc6299db9ec823\erg_parser-0.2.4\parse.rs:1425:17
    stack backtrace:
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    
    bug parser-bug seems-medium 
    opened by mtshiba 6
  • Fixed an issue where multiple chunks can be declared on a single line

    Fixed an issue where multiple chunks can be declared on a single line

    Fixes #281

    It is possible to declare multiple chunks on a single line with whitespace

    It is an invalid syntax and should be detected as an error in the parser

    • [x] declaration
    • [x] Array
    • [x] Set
    • [x] Dict
    • [x] Record
    • [x] Tuple
    • [ ] ~~Class~~ @mtshiba
    opened by GreasySlug 5
  • Possible to localized to help commands

    Possible to localized to help commands

    When feature flag is specified, comments are switched to the respective language. This can be used to switch help commands as well. Translate from Japanese text to EN and CH.

    • [x] Help command review
      • [x] JA
      • [x] EN
      • [x] zh_CN
      • [x] zh_TW
    • [x] Mode help command review
      • [x] JA
      • [x] EN
      • [x] zh_CN
      • [x] zh_TW

    Unwrap() is often used to parse arguments, causing panic with wrong arguments.

    Changes proposed in this PR:

    • Possible to localize to help command
    • Add help_message.rs
    • Error handling of args parsing (Shouldn't this be included?)

    @mtshiba

    opened by GreasySlug 5
  • Function definition is ignored

    Function definition is ignored

    Describe the bug Function declaration ignored, i.e. like encountering NameError on f(1) after f x = x.

    Reproducible code

    f x = x
    f
    # compiler complains even f is defined.
    Error[#0213]: File <stdin>, line 1, in <module>
    1│ f(1)
       ^
    NameError: f is not defined
    

    Expected behavior Call f.

    Additional context Actually I found it's originated in Desugarer::desugar_pattern. Its matching ignores Expr::Def(Def { sig: Signature::Subr(v)..}) like:

    while let Some(chunk) = module.lpop() {
        match chunk {
            Expr::Def(def) => {
                if let Signature::Var(v) = def.sig {
                    /* desugaring */
                } // if end
            },
            other => new.push(other),
        } // match end
    } 
    

    Thus, function parsed as Subr vanishes there.

    However just fixing this as

    match chunk {
        Expr::Def(Def { sig: Signature::Var(v) .. }) => { /* omit */ }
        other => /* omit */
    }
    

    produces stack overflow (eternal recursion) in compile process. Maybe compiler also have some bug as the eternal recursion is not desireble if it's fatal error, but we have to add desugaring logic for Signature::Subr here first, rather than just passing it through this matching, right?

    If so, I'm willing to implement them as it seems to be good first implementation to get used to Erg's syntax. (And maybe fixing compiler bug is also not difficult and I'm willing to do it too.)

    bug parser-bug compiler-bug 
    opened by ytoml 5
  • Added normal tuple type structure and parser

    Added normal tuple type structure and parser

    related: #34

    • [x] add ast struct of normal type tuple
      • [x] NormalTuple use paren: Option<Token, Token>
    • [x] add parser with parentheses
    • [ ] add parser without parentheses ~~add type checking (Do you think this should not be included?)~~
    opened by GreasySlug 5
  • About the synchronization of each translated version with the English version

    About the synchronization of each translated version with the English version

    This problem needs to be solved very much, otherwise it will create a very confusing situation

    Here are my ideas: 1.Each translated version requires 100% coverage (means that the PR for adding a new language should translate all the documents at once) 2.In the process of adding a new language, changes to the content of the English version must be alerted in adding-new-language PR(Finally, translation contributors are asked to carefully review the content of the translation, to prevent it from not tracking the full process of translation in PR) 3.All new content should be added to the English version first 4.Changes to the English version of the content need to be made via PR, and all language translations for the new content must be completed before the PR can be merged

    @mtshiba

    documentation 
    opened by C-BJ 5
  • Improve Tuple Type parse

    Improve Tuple Type parse

    Describe the code issue?

    In the current implementation, the parse starts when the first element is followed by a comma This is processed in the same way for parentheses Thus, the parentheses will cause unintended behavior, since the analysis will be the same as if the parentheses were not present

    >> f x, y)
    Error[#0205]: File <stdin>, line 1, 
    
    1 | f x, y)
      : ------
      :      `- `;` or newline should be added
    
    SyntaxError: invalid syntax
    
    >>> f(x, y
    ::f:
        ::x
        ::y
    

    Additional context

    Erg version

    0.6.1-nightly.1

    Python version

    Python3.11.x

    OS

    Windows 10

    parser-bug code-issue 
    opened by GreasySlug 1
  • Exit with 1 in tests

    Exit with 1 in tests

    Describe the behavior?

    The test passes on macOS and Linux, but fails on Windows. For some reason, the exit code of the last test executed is 1. But I don't know why.

    https://github.com/erg-lang/erg/actions/runs/3814673301/jobs/6489147639

    This is reproduced even when a test run is performed with pre-commit, so a special build flag is used to avoid this. But this is an ugly hack.

    https://github.com/erg-lang/erg/blob/3ad6059070ac690cd0d2c765ac7a86bb01c5cf2a/tests/test.rs#L49-L57

    Reproducible code

    No response

    Expected result

    No response

    Actual result

    No response

    Additional context

    No response

    Erg version

    0.6.1-nightly.1

    Python version

    None

    OS

    Windows 11

    help wanted cause-unknown unintended-behavior 
    opened by mtshiba 0
  • Runtime error exit status becomes 0

    Runtime error exit status becomes 0

    Describe the bug?

    Run-time error exit status in python is not reflected.

    Reproducible code

    $ erg -c "assert 1 == 2" ; echo $?         
    

    Expected result

    $ erg -c "assert 1 == 2" ; echo $?         
    Traceback (most recent call last):
      File "<string>", line -1, in <module>
    AssertionError
    1
    

    Because of the following

    $ python -c "assert 1 == 2" ; echo $?
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
    AssertionError
    1
    

    Actual result

    $ erg -c "assert 1 == 2" ; echo $?         
    Traceback (most recent call last):
      File "<string>", line -1, in <module>
    AssertionError
    0
    

    Additional context

    OS: macOS 13 (Ventura)

    Erg version

    Erg 0.6.0

    Python version

    Python3.11.x

    OS

    Other (write in Additional context)

    bug help wanted cause-unknown 
    opened by toddlerer 0
  • [WIP] Classify parser errors and use them

    [WIP] Classify parser errors and use them

    Currently, many of the errors in the parser use simple_syntax_error( or skip_and_throw_syntax_err). This causes almost all errors to generate invalid syntax error, making them difficult to understand. This lets you know how invalid syntax is.

    In addition, add doc comment.

    Changes proposed in this PR:

    • Define specify error
    • Use each error
    • Add doc comment

    @mtshiba

    opened by GreasySlug 0
  • Comments cause errors to be misaligned

    Comments cause errors to be misaligned

    Describe the behavior

    Currently comments are not included in tokens, though, they are there as characters in the actual code. Therefore, when an error occurs, the comment is not reflected and the error position is misaligned.

    Reproducible code

    #[]# a = 1
    

    Expected behavior

    rror[#0404]: File <stdin>, line 1, 
    
    1 |   a = 1
      : --
    
    SyntaxError: invalid indent
    

    Current behavior

    Error[#1447]: File .\tests\should_ok\comment.er, line 1, 
    
    1 | #[]# print! "hi"
      : -
    
    SyntaxError: invalid character: ' '
    
    error: process didn't exit successfully: `target\debug\erg.exe .\tests\should_ok\comment.er` (exit cod
    

    OS Windows 10

    unintended-behavior 
    opened by GreasySlug 0
  • Declaration of invalid collections

    Declaration of invalid collections

    Describe the bug?

    ~~The following collections allow elements to be declared by using whitespace~~ Different error occurs instead of error due to delimitation

    • array
    • tuple
    • dict
    • set
    • record

    But these are syntax error

    Reproducible code

    [1 2 3] (1 2 3) {"a": 1 "b": 2 "c": 3} {1 2 3} {name = "John" age = 21}

    Expected result

    syntax error needs comma or semicolon

    Actual result

    Error[#0000]: File <stdin>, line 1, 
    
    1 | [1 2 3]
      :       -
    
    SyntaxError: invalid syntax
    
    >>> (1 2 3)
    Error[#0000]: File <stdin>, line 1, 
    
    1 | (1 2 3)
      :       -
    
    SyntaxError: invalid syntax
    
    >>> {"a": 1 "b": 2}
    Error[#3374]: File <stdin>, line 1, 
    
    1 | {"a": 1 "b": 2}
      :              -
    
    SyntaxError: invalid syntax
    
    Error[#0000]: File <stdin>, line 1, 
    
    1 | {"a": 1 "b": 2}
      :               -
    
    SyntaxError: invalid syntax
    
    >>> {name = "John" age = 21}
    Record(name='John', age=21)
    

    Additional context

    When I look at how it is parsed using cargo dprs, we see that each syntax is parsed differently, and a patch is needed for each of them.

    Erg version

    Erg 0.6.0-beta.3

    Python version

    python3.10.8

    OS

    Windows 10

    bug seems-hard unintended-behavior 
    opened by GreasySlug 0
Releases(v0.6.0)
  • v0.6.0(Dec 25, 2022)

    What's Changed

    • Fix #247 by @mtshiba in https://github.com/erg-lang/erg/pull/254
    • Fix #205 by @mtshiba in https://github.com/erg-lang/erg/pull/256
    • Fix #259 by @mtshiba in https://github.com/erg-lang/erg/pull/260
    • Fix #261 by @mtshiba in https://github.com/erg-lang/erg/pull/262
    • Fix #255 by @mtshiba in https://github.com/erg-lang/erg/pull/264
    • Fix #255 by @mtshiba in https://github.com/erg-lang/erg/pull/268
    • Add => proc and -> func hint by @GreasySlug in https://github.com/erg-lang/erg/pull/249
    • Fix #265 by @mtshiba in https://github.com/erg-lang/erg/pull/270
    • Fix #272 by @mtshiba in https://github.com/erg-lang/erg/pull/273
    • Implement Patch by @mtshiba in https://github.com/erg-lang/erg/pull/271
    • Implement string interpolation by @mtshiba in https://github.com/erg-lang/erg/pull/274
    • Update codegen.rs by @mtshiba in https://github.com/erg-lang/erg/pull/277
    • Fix #278 by @mtshiba in https://github.com/erg-lang/erg/pull/280
    • Fix #282 by @mtshiba in https://github.com/erg-lang/erg/pull/284
    • Fix #283 by @mtshiba in https://github.com/erg-lang/erg/pull/285
    • Avoid panicking with invalid option args by @GreasySlug in https://github.com/erg-lang/erg/pull/288
    • Fix and clean lex Str and MultilineStr by @GreasySlug in https://github.com/erg-lang/erg/pull/290
    • Add pylyzer-mode by @mtshiba in https://github.com/erg-lang/erg/pull/293
    • Feature return by @mtshiba in https://github.com/erg-lang/erg/pull/295
    • remove: duplicates by @GreasySlug in https://github.com/erg-lang/erg/pull/297
    • Fix #301 by @mtshiba in https://github.com/erg-lang/erg/pull/302
    • Fix #296, #303 by @mtshiba in https://github.com/erg-lang/erg/pull/304
    • Fixed infinite loop if #[ is more than ]# by @GreasySlug in https://github.com/erg-lang/erg/pull/300
    • Missing return Err(()) caused overflow by @GreasySlug in https://github.com/erg-lang/erg/pull/307
    • Extract errors as methods and use them by @GreasySlug in https://github.com/erg-lang/erg/pull/308

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.13...v0.6.0

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.62 MB)
    erg-x86_64-apple-darwin.tar.gz(2.42 MB)
    erg-x86_64-pc-windows-msvc.zip(2.58 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(3.06 MB)
  • v0.5.13(Nov 26, 2022)

    What's Changed

    • Implement Python transpiler by @mtshiba in https://github.com/erg-lang/erg/pull/236
    • Enable shortened/normal mixed record definition by @ytoml in https://github.com/erg-lang/erg/pull/239
    • Implement new SubMessage struct and main_message by @GreasySlug in https://github.com/erg-lang/erg/pull/237
    • Split error messages by @mtshiba in https://github.com/erg-lang/erg/pull/232
    • Additional fixes to #232 by @GreasySlug in https://github.com/erg-lang/erg/pull/243

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.12...v0.5.13

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.43 MB)
    erg-x86_64-apple-darwin.tar.gz(2.23 MB)
    erg-x86_64-pc-windows-msvc.zip(2.37 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(2.80 MB)
  • v0.5.12(Nov 16, 2022)

    What's Changed

    • Tiny refactor on desugar.rs by @ytoml in https://github.com/erg-lang/erg/pull/228
    • Fix: #230 cause of overflow by @GreasySlug in https://github.com/erg-lang/erg/pull/231
    • Modify error fomat by @GreasySlug in https://github.com/erg-lang/erg/pull/212
    • Add stream operator by @ytoml in https://github.com/erg-lang/erg/pull/233

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.11...v0.5.12

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.34 MB)
    erg-x86_64-apple-darwin.tar.gz(2.14 MB)
    erg-x86_64-pc-windows-msvc.zip(2.31 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(2.72 MB)
  • v0.5.11(Nov 4, 2022)

    What's Changed

    • Optimize the inference system by @mtshiba in https://github.com/erg-lang/erg/pull/219
    • Support Python 3.8 by @mtshiba in https://github.com/erg-lang/erg/pull/223
    • Support Python 3.11 by @mtshiba in https://github.com/erg-lang/erg/pull/227

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.10...v0.5.11

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.31 MB)
    erg-x86_64-apple-darwin.tar.gz(2.12 MB)
    erg-x86_64-pc-windows-msvc.zip(2.22 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(2.68 MB)
  • v0.5.10(Oct 20, 2022)

    In this release, Python module type declarations previously written in Rust have been replaced with declarations in d.er.

    And the following modules have been added:

    • http
    • urllib
    • json
    • tarfile
    • subprocess

    Other Changes

    • Improve the document (not adding content) by @C-BJ in https://github.com/erg-lang/erg/pull/209
    • Fix wrong links and hash value by @GreasySlug in https://github.com/erg-lang/erg/pull/210

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.9...v0.5.10

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.20 MB)
    erg-x86_64-apple-darwin.tar.gz(2.09 MB)
    erg-x86_64-pc-windows-msvc.zip(2.14 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(2.66 MB)
  • v0.5.9(Oct 15, 2022)

    What's Changed

    • Several useful features added by @GreasySlug in https://github.com/erg-lang/erg/pull/197
    • Implement assert casting by @mtshiba in https://github.com/erg-lang/erg/pull/199
    • Tokenize the <- by @GreasySlug in https://github.com/erg-lang/erg/pull/198
    • Translate untranslated zh_CN and zh_TW documents and add translation synchronization tag to one JA markdown file by @C-BJ in https://github.com/erg-lang/erg/pull/200
    • Implement Array/SetWithLength by @mtshiba in https://github.com/erg-lang/erg/pull/201
    • Fix to crash with invalid decimal literal in exponent literal by @GreasySlug in https://github.com/erg-lang/erg/pull/202
    • [WIP] Implement floordiv operator by @GreasySlug in https://github.com/erg-lang/erg/pull/203
    • Implement Dict by @mtshiba in https://github.com/erg-lang/erg/pull/204
    • compiler: Improve error messages by @C-BJ in https://github.com/erg-lang/erg/pull/208

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.8...v0.5.9

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.13 MB)
    erg-aarch64-unknown-linux-gnu.tar.gz(3.13 MB)
    erg-armv7-unknown-linux-gnueabihf.tar.gz(3.07 MB)
    erg-x86_64-apple-darwin.tar.gz(2.00 MB)
    erg-x86_64-pc-windows-msvc.zip(2.05 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(3.65 MB)
    erg-x86_64-unknown-linux-musl.tar.gz(2.23 MB)
  • v0.5.7(Oct 7, 2022)

    What's Changed

    • Add type displaying mode by @mtshiba in https://github.com/erg-lang/erg/pull/190
    • Translate untranslated Chinese documents and do something else by @C-BJ in https://github.com/erg-lang/erg/pull/192
    • Implement normal set literal by @GreasySlug in https://github.com/erg-lang/erg/pull/191

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.6...v0.5.7

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(2.22 MB)
    erg-aarch64-unknown-linux-gnu.tar.gz(3.23 MB)
    erg-armv7-unknown-linux-gnueabihf.tar.gz(3.16 MB)
    erg-x86_64-apple-darwin.tar.gz(2.10 MB)
    erg-x86_64-pc-windows-msvc.zip(2.14 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(2.27 MB)
    erg-x86_64-unknown-linux-musl.tar.gz(2.32 MB)
  • v0.5.6(Oct 3, 2022)

    What's Changed

    • Python methods declarations by @mtshiba in https://github.com/erg-lang/erg/pull/186
    • Add execution test by @mtshiba in https://github.com/erg-lang/erg/pull/187
    • Add basic numeric calc and bool type document by @GreasySlug in https://github.com/erg-lang/erg/pull/182
    • Possible to localized to help commands by @GreasySlug in https://github.com/erg-lang/erg/pull/189

    Full Changelog: https://github.com/erg-lang/erg/compare/0.5.5...v0.5.6

    Source code(tar.gz)
    Source code(zip)
    erg-aarch64-apple-darwin.tar.gz(1.85 MB)
    erg-aarch64-unknown-linux-gnu.tar.gz(2.82 MB)
    erg-armv7-unknown-linux-gnueabihf.tar.gz(2.78 MB)
    erg-x86_64-apple-darwin.tar.gz(1.73 MB)
    erg-x86_64-pc-windows-msvc.zip(1.76 MB)
    erg-x86_64-unknown-linux-gnu.tar.gz(1.89 MB)
    erg-x86_64-unknown-linux-musl.tar.gz(1.93 MB)
  • 0.5.5(Sep 30, 2022)

    What's Changed

    • Added cargo command aliases, and cfg target for Windows by @GreasySlug in https://github.com/erg-lang/erg/pull/183
    • Fix #179 by @mtshiba in https://github.com/erg-lang/erg/pull/184
    • Add links to subtitle in syntax dir by @GreasySlug in https://github.com/erg-lang/erg/pull/178
    • Implement with! by @mtshiba in https://github.com/erg-lang/erg/pull/185

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.4...0.5.5

    Source code(tar.gz)
    Source code(zip)
  • v0.5.4(Sep 27, 2022)

    d.er syntax has been implemented. This allows Python scripts to be typed, but the validity of the typing is not currently checked.

    Other changes

    • Fix repl by @mtshiba in https://github.com/erg-lang/erg/pull/175
    • Fix broken links in doc directory by @GreasySlug in https://github.com/erg-lang/erg/pull/172

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.5.0...v0.5.4

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Sep 22, 2022)

    With this release, traits and user-defined modules are now available.

    Other Changes

    • Updated and added testing of tokenize by file input by @GreasySlug in https://github.com/erg-lang/erg/pull/156
    • Added handling of escape char by @GreasySlug in https://github.com/erg-lang/erg/pull/160
    • Insert " in match pattern and add test for escape chars by @GreasySlug in https://github.com/erg-lang/erg/pull/162
    • Implement multi line comment method by @GreasySlug in https://github.com/erg-lang/erg/pull/164
    • Added error on line braek in string by @GreasySlug in https://github.com/erg-lang/erg/pull/169
    • Translate En to Ja and Update a few hash values by @GreasySlug in https://github.com/erg-lang/erg/pull/166
    • Implemtent the multi-line string method by @GreasySlug in https://github.com/erg-lang/erg/pull/171
    • Add user-defined module by @mtshiba in https://github.com/erg-lang/erg/pull/173

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.4.6...v0.5.0

    Source code(tar.gz)
    Source code(zip)
  • v0.5.0-beta.0(Sep 18, 2022)

  • v0.4.2(Sep 14, 2022)

    This release fixes bugs in the parser and enhances type inference for projection-types.

    Other changes

    • Add "lower" mode by @mtshiba in https://github.com/erg-lang/erg/pull/141
    • Fix new line handlings in REPL by @ytoml in https://github.com/erg-lang/erg/pull/146
    • Update value.rs by @mtshiba in https://github.com/erg-lang/erg/pull/148
    • Fix #72 by @mtshiba in https://github.com/erg-lang/erg/pull/149
    • Fix #95, #84 by @mtshiba in https://github.com/erg-lang/erg/pull/150
    • Fix #108 (OwnershipChecker bugs) by @mtshiba in https://github.com/erg-lang/erg/pull/151
    • Fix #112 by @mtshiba in https://github.com/erg-lang/erg/pull/155
    • Repel invalid blocks with equals and whitespace in REPL by @GreasySlug in https://github.com/erg-lang/erg/pull/154

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.4.1...v0.4.2

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Sep 10, 2022)

    Class syntax is added in this release.

    Other Changes

    • Update version (v0.3.2) by @mtshiba in https://github.com/erg-lang/erg/pull/100
    • Fixed up-to-date hash values in badges of EN docs by @GreasySlug in https://github.com/erg-lang/erg/pull/101
    • Fix method call bugs by @mtshiba in https://github.com/erg-lang/erg/pull/103
    • Implement some Python built-in modules by @mtshiba in https://github.com/erg-lang/erg/pull/104
    • Update docs by @mtshiba in https://github.com/erg-lang/erg/pull/105
    • update docs by @mtshiba in https://github.com/erg-lang/erg/pull/106
    • Add forgotten inheritances around mutable builtin classes by @ytoml in https://github.com/erg-lang/erg/pull/109
    • Fix #110 by @mtshiba in https://github.com/erg-lang/erg/pull/111
    • Update docs by @mtshiba in https://github.com/erg-lang/erg/pull/113
    • Renovate Parser by @mtshiba in https://github.com/erg-lang/erg/pull/114
    • Add more abbreviations of build parameters by @C-BJ in https://github.com/erg-lang/erg/pull/117
    • Add files not in EN docs and Fix typo by @GreasySlug in https://github.com/erg-lang/erg/pull/118
    • Update to remove badges from EN docs by @GreasySlug in https://github.com/erg-lang/erg/pull/122
    • Fix to trim unnecessary newline by @GreasySlug in https://github.com/erg-lang/erg/pull/129
    • Translate all Japanese documents into English, simplified Chinese and traditional Chinese by @C-BJ in https://github.com/erg-lang/erg/pull/121
    • Implement todo!() part of Parser by @mtshiba in https://github.com/erg-lang/erg/pull/132
    • Implement class syntax by @mtshiba in https://github.com/erg-lang/erg/pull/138
    • Follow clippy warnings by @ytoml in https://github.com/erg-lang/erg/pull/137
    • Impl some unimplemented parsing methods by @mtshiba in https://github.com/erg-lang/erg/pull/139

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.3.2...v0.4.0

    Source code(tar.gz)
    Source code(zip)
  • v0.4.0-beta.0(Sep 8, 2022)

  • v0.3.2(Aug 30, 2022)

    A highlight in this release is that variable-length and keyword arguments are now available for function calls.

    What's Changed

    • Allow multiple REPL server at once by @ytoml in https://github.com/erg-lang/erg/pull/86
    • Translate the Japanese documents into English and some text corrections #87 by @GreasySlug in https://github.com/erg-lang/erg/pull/88
    • Fix a type inference bug for dependent procedural methods by @mtshiba in https://github.com/erg-lang/erg/pull/89
    • [WIP] Added normal tuple type structure and parser by @GreasySlug in https://github.com/erg-lang/erg/pull/67
    • Tuple type checking by @mtshiba in https://github.com/erg-lang/erg/pull/90
    • Implement access to array/tuple elements by @mtshiba in https://github.com/erg-lang/erg/pull/91
    • Make debug log outputs neater by @ytoml in https://github.com/erg-lang/erg/pull/93
    • Implement variable-length/keyword arguments by @mtshiba in https://github.com/erg-lang/erg/pull/94
    • Update tyvar.rs by @mtshiba in https://github.com/erg-lang/erg/pull/96
    • Added badges to check if a document has been updated by @GreasySlug in https://github.com/erg-lang/erg/pull/97
    • Fixed vanishing function definition by @ytoml in https://github.com/erg-lang/erg/pull/99

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.3.1...v0.3.2

    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Aug 28, 2022)

    This release fixes minor bugs.

    • Fix Lambda parsing bugs
    • Fix a bug that is registered as parameters instead of variables
    • Fix Lambda formatting

    Other changes

    • Fixed broken link in Syntax Documentation by @ytoml in https://github.com/erg-lang/erg/pull/82

    New Contributors

    • @ytoml made their first contribution in https://github.com/erg-lang/erg/pull/82

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.3.0...v0.3.1

    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Aug 28, 2022)

  • v0.2.8(Aug 22, 2022)

    This version introduces variable visibility. Now, Erg's compiled files (.pyc) can be imported correctly from Python (private variables are not accessible)!

    スクリーンショット 2022-08-23 003216

    (You need to compile the Erg file by running erg --mode compile [file].er before executing the Python file.)

    A Chinese translation of the error messages was then added by a volunteer. If you want to use this, please install the Chinese version as cargo install erg --features simplified_chinese (or cargo install erg --features traditional_chinese).

    Other Changes

    • Add error message translation for Simplified Chinese and Traditional Chinese by @C-BJ in https://github.com/erg-lang/erg/pull/64
    • Make REPL not show the day of the week on Windows by @C-BJ in https://github.com/erg-lang/erg/pull/69
    • Update README by @C-BJ in https://github.com/erg-lang/erg/pull/71
    • Add CC-BY-4.0 LICENSE for documentation and image by @C-BJ in https://github.com/erg-lang/erg/pull/68
    • Update commit hash by @C-BJ in https://github.com/erg-lang/erg/pull/74
    • Fix README display by @C-BJ in https://github.com/erg-lang/erg/pull/77
    • Change the wrong placement of pull_request_template.md by @C-BJ in https://github.com/erg-lang/erg/pull/78
    • Delete additional PR templates by @C-BJ in https://github.com/erg-lang/erg/pull/79

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.2.6...v0.2.8

    Source code(tar.gz)
    Source code(zip)
  • v0.2.6(Aug 18, 2022)

    This release continues to fix type inference bugs (examples/fib.er now compiles successfully again).

    What's Changed

    • add instruction for REPL/File execution by @ShantanuKumar in https://github.com/erg-lang/erg/pull/37
    • Add README translation for simplified Chinese and traditional Chinese by @C-BJ in https://github.com/erg-lang/erg/pull/39
    • Fix a small problem about traditional Chinese Translation by @C-BJ in https://github.com/erg-lang/erg/pull/41
    • Make the code of erg use Python highlighting in GitHub by @C-BJ in https://github.com/erg-lang/erg/pull/44
    • feat: switch to pipe mode if piped from stdin by @KisaragiEffective in https://github.com/erg-lang/erg/pull/38
    • Fix some small problems about traditional Chinese Translation by @C-BJ in https://github.com/erg-lang/erg/pull/43
    • cargo fmt by @ShantanuKumar in https://github.com/erg-lang/erg/pull/42
    • Make Github recognize the English version of CODE_OF_CONDUCT and add a link from CONTRIBUTING to CODE_OF_CONDUCT by @C-BJ in https://github.com/erg-lang/erg/pull/47
    • Add simplified and traditional Chinese translations of the code of conduct by @C-BJ in https://github.com/erg-lang/erg/pull/49
    • Synchronize Simplified Chinese and Traditional Chinese translations with the English README by @C-BJ in https://github.com/erg-lang/erg/pull/46
    • Add support for parse tests by @toddlerer in https://github.com/erg-lang/erg/pull/50
    • Updata README and all its translations by @C-BJ in https://github.com/erg-lang/erg/pull/54

    New Contributors

    • @ShantanuKumar made their first contribution in https://github.com/erg-lang/erg/pull/37
    • @C-BJ made their first contribution in https://github.com/erg-lang/erg/pull/39
    • @KisaragiEffective made their first contribution in https://github.com/erg-lang/erg/pull/38

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.2.5...v0.2.6

    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(Aug 17, 2022)

    What's Changed

    • Stricter type-check
    • Set timeout for REPL
    • Apply trivial clippy fixes by @passcod in https://github.com/erg-lang/erg/pull/22
    • Fix --verbose option typo by @toddlerer in https://github.com/erg-lang/erg/pull/33
    • Add Nix support for reproducible build and develop by @SnO2WMaN in https://github.com/erg-lang/erg/pull/32

    New Contributors

    • @passcod made their first contribution in https://github.com/erg-lang/erg/pull/22
    • @toddlerer made their first contribution in https://github.com/erg-lang/erg/pull/33
    • @SnO2WMaN made their first contribution in https://github.com/erg-lang/erg/pull/32

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.2.4...v0.2.5

    Source code(tar.gz)
    Source code(zip)
  • v0.2.3(Aug 16, 2022)

    What's Changed

    • fix: many type inference bugs
    • fix: use where instead of 'which' in windows by @GreasySlug in https://github.com/erg-lang/erg/pull/10
    • Added an example of omitting the integer portion in the Ratio document. by @soukouki in https://github.com/erg-lang/erg/pull/9
    • Replaced JP documents in regular form with honorifics by @soukouki in https://github.com/erg-lang/erg/pull/12
    • Cache dependencies in GitHub Actions by @TaKO8Ki in https://github.com/erg-lang/erg/pull/14
    • Fix broken links by @TaKO8Ki in https://github.com/erg-lang/erg/pull/15
    • Fix sorted Python example by @pingiun in https://github.com/erg-lang/erg/pull/18
    • Revised the style of jp documents from regular to honorific. by @soukouki in https://github.com/erg-lang/erg/pull/27
    • Update README.md by @SkiingIsFun123 in https://github.com/erg-lang/erg/pull/24
    • Update TODO.md by @SkiingIsFun123 in https://github.com/erg-lang/erg/pull/25

    New Contributors

    • @GreasySlug made their first contribution in https://github.com/erg-lang/erg/pull/10
    • @soukouki made their first contribution in https://github.com/erg-lang/erg/pull/9
    • @TaKO8Ki made their first contribution in https://github.com/erg-lang/erg/pull/14
    • @pingiun made their first contribution in https://github.com/erg-lang/erg/pull/18
    • @SkiingIsFun123 made their first contribution in https://github.com/erg-lang/erg/pull/24

    Full Changelog: https://github.com/erg-lang/erg/compare/v0.2.2...v0.2.3

    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Aug 13, 2022)

    In this release, type inference for general polymorphic types can now take variance into account. For example, since the Seq(T) type is covariant with respect to T, Range(T), which implements Seq(T) as a trait, for example, is recognized as a subtype of it.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Aug 12, 2022)

    With this release, some of the APIs of the math and random modules of Python are now available.

    In addition, several type inference bugs have been fixed.

    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Aug 12, 2022)

  • v0.1.1(Aug 12, 2022)

Owner
The Erg Programming Language
The Erg Programming Language
Putting a brain behind `cat`🐈‍⬛ Integrating language models in the Unix commands ecosystem through text streams.

smartcat (sc) Puts a brain behind cat! CLI interface to bring language models in the Unix ecosystem and allow power users to make the most out of llms

Emilien Fugier 28 Dec 2, 2023
Unwrap Macros to help Clean up code and improve production.

unwrap_helpers Unwrap Macros to help Clean up code and improve production. This does include a pub use of https://github.com/Mrp1Dev/loop_unwrap to ga

Ascending Creations 2 Nov 1, 2021
Rust-clippy - A bunch of lints to catch common mistakes and improve your Rust code

Clippy A collection of lints to catch common mistakes and improve your Rust code. There are over 450 lints included in this crate! Lints are divided i

The Rust Programming Language 8.7k Dec 31, 2022
Statically allocated, runtime initialized cell.

static-cell Statically allocated, initialized at runtime cell. StaticCell provides a no-std-compatible, no-alloc way to reserve memory at compile time

null 4 Oct 2, 2022
Adapt the screen's color spectrum according to the hour of the day in order to improve your sleep

circadianlight What It Is Circadian Light is a program, currently only working on Linux with X, that controls the color spectrum of your screen accord

null 7 Dec 28, 2022
This CLI will help you improve your typing accuracy and speed

This CLI will help you improve your typing accuracy and speed! Improve your personal bests and look back on your previous records in a graph. All in the convenience of your own terminal!

Mitchel Wijt 8 May 25, 2023
Statically verified Rust struct field names as strings.

field Statically verified struct field names as strings. See the documentation for more details. Installation Add the following to your Cargo manifest

Indraneel Mahendrakumar 3 Jul 9, 2023
A parser combinator that is fully statically dispatched and supports both sync/async.

XParse A parser combinator that is fully statically dispatched and supports both sync & async parsing. How to use An example of a very simple JSON par

Alsein 4 Nov 27, 2023
dwarf is a typed, interpreted, language that shares syntax with Rust.

The dwarf Programming Language dwarf is a programming language based heavily upon, and implemented in, Rust. The language is interpreted (and slow) wi

Keith Star 17 Jul 12, 2023
Rust Imaging Library's Python binding: A performant and high-level image processing library for Python written in Rust

ril-py Rust Imaging Library for Python: Python bindings for ril, a performant and high-level image processing library written in Rust. What's this? Th

Cryptex 13 Dec 6, 2022
Trento checks' ecosystem linting tool

Rashomon Validation engine for Trento Checks DSL. Usage $ tlint -h tlint 0.9.0 USAGE: tlint [OPTIONS] OPTIONS: -f, --file <FILE> -h,

Trento 3 Dec 15, 2022
A menu widget for tui-rs ecosystem

tui-menu A menu widget for tui-rs ecosystem. Features Sub menu groups. Intuitive movement. Item's data is generic as long as it Cloneable. Try cargo r

shuo 3 Nov 30, 2022
Fully-typed, async, reusable state management and synchronization for Dioxus 🧬

dioxus-query ?? ⚡ Fully-typed, async, reusable state management and synchronization for Dioxus ??. Inspired by TanStack Query. ⚠️ Work in progress ⚠️

Marc Espín 9 Aug 7, 2023
Fully-typed global state management with a topics subscription system for Dioxus 🧬

dioxus-radio ???? ⚠️ Work in progress !! ⚠️ . Fully-typed global state management with a topics subscription system for Dioxus ??. Who is this for You

Dioxus Community 6 Dec 14, 2023
Use LLMs to generate strongly-typed values

Magic Instantiate Quickstart use openai_magic_instantiate::*; #[derive(MagicInstantiate)] struct Person { // Descriptions can help the LLM unders

Grant Slatton 4 Feb 20, 2024
Costless typed identifiers backed by UUID, with kind readable in serialized versions

Why kind ? With kind, you use typed identifiers in Rust, with no overhead over Uuid have the type be human readable and obvious in JSON and any export

Wingback 67 Mar 24, 2024
*slaps roof of [programming language]* this bad boy can fit so much [syntax sugar] into it

An attempt to give myself a new Pareto-optimal choice for quick-and-dirty scripts, particularly when I'm not on a dev computer, and to practice writin

Brian Chen 985 Apr 25, 2023
A fast static code analyzer & language server for Python

pylyzer ⚡ pylyzer is a static code analyzer / language server for Python written in Rust. Installation cargo (rust package manager) cargo install pyly

Shunsuke Shibayama 78 Jan 3, 2023
Language server for Odoo Python/JS/XML

odoo-lsp Features Completion, definition and references for models, XML IDs and model fields Works for records, templates, env.ref() and other structu

Viet Dinh 5 Aug 31, 2023