Git Product home page Git Product logo

cairo-zig's Introduction

Logo

ziggy-starkdust


GitHub Workflow Status (with event) OpenSSF Scorecard Report Project license Follow StarknetZig on Twitter

Exploration_Team

Note that ziggy-starkdust is still experimental. Breaking changes will be made before the first stable release. The library is also NOT audited or reviewed for security at the moment. Use at your own risk.

📦 Installation

📋 Prerequisites

Alternatively, if you have nix installed, you can get the full development environment nix develop.

⚡ Wanna get up to speed fast?

👇 ⚡ Zig
👇 🐺 Cairo VM

🔧 Build

make build

🤖 Usage

You can display the help message by running:

./zig-out/bin/ziggy-starkdust --help

Run a cairo program

./zig-out/bin/ziggy-starkdust execute --filename cairo_programs/fibonacci.json --proof-mode=false

🧪 Testing

Run all integration tests with summary:

make build-integration-test
./zig-out/bin/integration_test

Run all unit tests with test summary:

make test

Run a single test, for example, the "Felt252 zero" test:

$ make test-filter FILTER="Felt252 zero"
All 2 tests passed.

Notice that 2 tests passed despite running only 1 test, because our tests are wrapped in another test call within src/tests.zig.

In order to compare two memory files or trace files, use the following command:

vbindiff cairo_programs/expected_fibonacci.trace cairo_programs/fibonacci.trace

🔒 Security

Security guidelines

For security guidelines, please refer to SECURITY.md.

OpenSSF Scorecard

We are using the OpenSSF Scorecard to track the security of this project.

Scorecard assesses open source projects for security risks through a series of automated checks.

You can see the current scorecard for this project here.

🙏 Acknowledgments

⚡ Why Zig?

👇 ⚡

Choosing Zig for a third implementation of the Cairo VM brings several advantages, offering a unique blend of features not entirely covered by the existing Rust and Go implementations.

1. Simplicity and Readability

Zig aims for simplicity and clarity, enabling developers to read and understand the code quickly. It omits certain features like classes and exceptions to keep the language simple, which can be particularly useful for a VM where performance and maintainability are key.

2. Performance

Zig compiles to highly efficient native code, similar to Rust, making it an excellent choice for computationally-intensive tasks. The language's design gives the programmer direct control over memory and CPU, without unnecessary abstractions.

3. Explicit Control with Safety Features

Zig provides an environment where you have explicit control over memory allocation, similar to C and C++. While this does mean you're responsible for managing memory yourself, Zig offers certain safety features to catch common errors, like undefined behavior, during compile time or by providing runtime checks. This approach allows for a blend of performance and safety, making it a suitable choice for a VM where you often need fine-grained control.

4. C Interoperability

Zig offers first-class C interoperability without requiring any bindings or wrappers. This feature can be a game-changer for integrating with existing technologies.

5. Flexibility

Zig's comptime (compile-time) features offer powerful metaprogramming capabilities. This allows for expressive yet efficient code, as you can generate specialized routines at compile-time, reducing the need for runtime polymorphism.

6. Minimal Dependencies

Zig aims to reduce dependencies to a minimum, which could simplify the deployment and distribution of Cairo VM. This is particularly advantageous for systems that require high-reliability or have limited resources.

7. Community and Ecosystem

Although younger than Rust and Go, Zig's community is enthusiastic and rapidly growing. Adopting Zig at this stage means you can be a significant contributor to its ecosystem.

By choosing Zig for the third implementation of Cairo VM, we aim to leverage these features to build a high-performance, reliable, and maintainable virtual machine.

📄 License

This project is licensed under the MIT license.

See LICENSE for more information.

Happy coding! 🎉

Contributors ✨

Thanks goes to these wonderful people (emoji key):

Abdel @ StarkWare
Abdel @ StarkWare

💻
bing
bing

💻
Francesco Ceccon
Francesco Ceccon

💻
Thomas Coratger
Thomas Coratger

💻
lambda-0x
lambda-0x

💻
Nils
Nils

💻
johann bestowrous
johann bestowrous

💻
lanaivina
lanaivina

💻
Dhruv Kelawala
Dhruv Kelawala

💻
Godspower Eze
Godspower Eze

💻
tedison
tedison

💻
ptisserand
ptisserand

💻
ndcroos
ndcroos

📖
Icosahedron
Icosahedron

💻
Pierre-Jean
Pierre-Jean

💻
iwantanode
iwantanode

📖

This project follows the all-contributors specification. Contributions of any kind welcome!

cairo-zig's People

Contributors

tcoratger avatar abdelstark avatar dhruvkelawala avatar jobez avatar lana-shanghai avatar oxlime avatar dependabot[bot] avatar stringnick avatar bingcicle avatar lambda-0x avatar ptisserand avatar godspower-eze avatar nils-mathieu avatar edisontim avatar 0xicosahedron avatar aniketpr01 avatar fracek avatar d-roak avatar pjserol avatar drspacemn avatar tudorpintea999 avatar ndcroos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.