https://github.com/ninjascl/wren-odin
ð“…¨ Wren in Odin. Bindings for using Wren inside Odin.
https://github.com/ninjascl/wren-odin
bindings c99 odin-lang wren-language
Last synced: 10 months ago
JSON representation
ð“…¨ Wren in Odin. Bindings for using Wren inside Odin.
- Host: GitHub
- URL: https://github.com/ninjascl/wren-odin
- Owner: NinjasCL
- License: bsd-3-clause
- Created: 2024-11-01T21:29:56.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-06-03T02:03:20.000Z (about 1 year ago)
- Last Synced: 2025-06-03T15:08:12.345Z (about 1 year ago)
- Topics: bindings, c99, odin-lang, wren-language
- Language: C
- Homepage: https://ninjascl.github.io/wren-odin/0.4
- Size: 1.69 MB
- Stars: 10
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
- Authors: AUTHORS.md
Awesome Lists containing this project
README
# Wren in Odin
Wren is a small, fast, class-based concurrent scripting language
Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in
a familiar, modern syntax.
```js
System.print("Hello, world!")
class Wren {
flyTo(city) {
System.print("Flying to %(city)")
}
}
var adjectives = Fiber.new {
["small", "clean", "fast"].each {|word| Fiber.yield(word) }
}
while (!adjectives.isDone) System.print(adjectives.call())
```
- **Wren is small.** The VM implementation is under 4,000 semicolons.
You can skim the whole thing in an afternoon. It's *small*, but not
*dense*. It is readable and lovingly-commented.
- **Wren is fast.** A fast single-pass compiler to tight bytecode, and a
compact object representation help Wren compete with other dynamic
languages.
- **Wren is class-based.** There are lots of scripting languages out there,
but many have unusual or non-existent object models. Wren places
classes front and center.
- **Wren is concurrent.** Lightweight fibers are core to the execution
model and let you organize your program into an army of communicating
coroutines.
- **Wren is a scripting language.** Wren is intended for embedding in
applications. It has no dependencies, a small standard library,
and an easy-to-use C API. It compiles cleanly as C99, C++98
or anything later.
## Links
- Syntax: http://wren.io/syntax.html
- Github: https://github.com/wren-lang/wren/tree/main/src
- Getting Started: http://wren.io/getting-started.html
## Usage
See more complete examples at `example.odin` and `tests/wren_tests.odin`
```odin
package main
import "core:fmt"
import wren "../vendor/wren/0.4"
main :: proc() {
config := wren.Configuration{}
wren.InitConfiguration(&config)
vm := wren.NewVM(&config)
module : cstring = "main"
script : cstring = `System.print("Hello Wren from Odin!")`
result := wren.Interpret(vm, module, script)
switch result {
case .WREN_RESULT_COMPILE_ERROR:
fmt.println("Compile error")
case .WREN_RESULT_RUNTIME_ERROR:
fmt.println("Runtime error")
case .WREN_RESULT_SUCCESS:
fmt.println("Success!")
}
}
```
## License
- BSD-3
## Credits
Made with ♥ by
Ninjas.cl
.