<div align="center">
<img src="docs/RafLogo.png" alt="Raf Logo" width="500">
</div>
# Raf (Raf-rs)
An Open Source Implementation of the Actor Model in Rust. The meaning of "raf" is The Rust Actor Framework, which is inspired by **C++ Caf (C++ Actor Framework)**.
Every logic is an actor waiting to be born.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I am a coding enthusiast and also a lazy person. I always hope to complete my company projects and personal projects with a limited mastery of third-party libraries. These projects include, but are not limited to: embedded devices, IoT, distributed computing, parallel computing, online games, real-world simulation based on Unreal Engine 5, radar signal processing, and so on. The actor programming model has proven capable of meeting most of my needs.
I started learning and using the actor model for software development in 2020. Yes, I began my journey with **Caf (C++ Actor Framework)**. Later, I learned that the best practices for the actor model originated from the **Erlang** programming language.
After becoming somewhat familiar with the Rust programming language, I started exploring actor-related crates on **crates.io** and GitHub. I have followed and tested several Rust-based actor frameworks, such as **Actix**, **Bastion**, **Coerce**, and I had a pretty good experience using them. However, due to some well-known reasons, these crates are now rarely maintained or updated. Additionally, their support for distributed scenarios is quite limited.
Currently, I prefer to use **Caf** for my C++ projects and **Ractor** for my Rust projects. Although my experience with **Ractor** feels closer to the best practices of the actor model (Erlang), **Caf** performs better overall and has many unique design ideas. In fact, **Caf** even surpasses the well-known paradigms of the actor model in some aspects.
Therefore, I now want to try creating my own actor framework using Rust, inspired mainly by **Caf**. Initially, I named it **Raf**, but unfortunately, the name was already taken on `crates.io`, so I renamed it to **Raf-rs**. However, my personal projects cover a very wide range of domains and have become too numerous, making it difficult for me to fully support my ambitions with my current capacity. As a result, updates and commits to **Raf** might progress very slowly. I hope I can persevere and stick with it.