2020-06-20 16:56:56 +02:00
|
|
|
What Rhai Isn't
|
|
|
|
===============
|
2020-06-20 09:57:15 +02:00
|
|
|
|
|
|
|
{{#include ../links.md}}
|
|
|
|
|
|
|
|
Rhai's purpose is to provide a dynamic layer over Rust code, in the same spirit of _zero cost abstractions_.
|
|
|
|
It doesn't attempt to be a new language. For example:
|
|
|
|
|
|
|
|
* No classes. Well, Rust doesn't either. On the other hand...
|
|
|
|
|
|
|
|
* No traits... so it is also not Rust. Do your Rusty stuff in Rust.
|
|
|
|
|
|
|
|
* No structures/records - define your types in Rust instead; Rhai can seamlessly work with _any Rust type_.
|
2020-06-25 12:07:57 +02:00
|
|
|
|
2020-06-20 09:57:15 +02:00
|
|
|
There is, however, a built-in [object map] type which is adequate for most uses.
|
2020-06-27 11:34:39 +02:00
|
|
|
It is possible to simulate [object-oriented programming (OOP)][OOP] by storing [function pointers]
|
|
|
|
in [object map] properties, turning them into _methods_.
|
2020-06-20 09:57:15 +02:00
|
|
|
|
|
|
|
* No first-class functions - Code your functions in Rust instead, and register them with Rhai.
|
|
|
|
|
2020-06-25 12:07:57 +02:00
|
|
|
There is, however, support for simple [function pointers] allowing runtime dispatch by function name.
|
|
|
|
|
2020-06-20 09:57:15 +02:00
|
|
|
* No garbage collection - this should be expected, so...
|
|
|
|
|
|
|
|
* No closures - do your closure magic in Rust instead; [turn a Rhai scripted function into a Rust closure]({{rootUrl}}/engine/call-fn.md).
|
|
|
|
|
|
|
|
* No byte-codes/JIT - Rhai has an AST-walking interpreter which will not win any speed races. The purpose of Rhai is not
|
|
|
|
to be extremely _fast_, but to make it as easy as possible to integrate with native Rust programs.
|
|
|
|
|
|
|
|
Due to this intended usage, Rhai deliberately keeps the language simple and small by omitting advanced language features
|
|
|
|
such as classes, inheritance, first-class functions, closures, concurrency, byte-codes, JIT etc.
|
|
|
|
|
|
|
|
Avoid the temptation to write full-fledge program logic entirely in Rhai - that use case is best fulfilled by
|
2020-06-22 16:02:49 +02:00
|
|
|
more complete languages such as JavaScript or Lua.
|
2020-06-20 09:57:15 +02:00
|
|
|
|
|
|
|
Therefore, in actual practice, it is usually best to expose a Rust API into Rhai for scripts to call.
|
|
|
|
All your core functionalities should be in Rust.
|
|
|
|
This is similar to some dynamic languages where most of the core functionalities reside in a C/C++ standard library.
|