Yuneta โ the idea, in one page
Services, roles and messages without the runtime it usually takes to have them. The contract is not a library you link against: it is the message, which is why any endpoint that speaks it is already in.
state ร event โ action the whole contract
$ ycommand -c 'set-global-trace level=machine set=1'
Not a log somebody decided to write: it is the state table executing. Every line was already in the code before anything happened.
the map
Almost all software picks a side of the axis: either you move up the language to gain application semantics, or you go down to C and give them up. Yuneta sits in the corner almost nobody occupies.
the stack
The difference is not in what the application sees, it is in what holds it up. Where the others rest their semantics on a virtual machine, Yuneta rests them on the operating system.
The application layer does not rest on a runtime: it is the runtime, written in C. A yuno is the process that comes out: a tree of gobjs with its own event loop. The binary is static; copy it to another machine and it runs, with nothing to install.
the code
A gobj has no methods, and there is no way to call another object. There are only named events and a table saying what each state accepts. That table is written the same way in C and in the browser, which is why nothing between them needs generated glue.
server ยท c_timer.c
/* what ST_IDLE accepts */ ev_action_t st_idle[] = { {EV_TIMEOUT_PERIODIC, ac_timeout, 0}, {0,0,0} }; states_t states[] = { {ST_IDLE, st_idle}, {0, 0} };
browser ยท c_agent_login.js
/* a SPA session */ const states = [ ["ST_LOGOUT", [ ["EV_DO_LOGIN", ac_do_login, "ST_WAIT_TOKEN"], /* โฆ */ ]], ["ST_WAIT_TOKEN", [ ["EV_LOGIN_ACCEPTED", ac_login_accepted, "ST_LOGIN"], ["EV_LOGIN_DENIED", ac_login_denied, "ST_LOGOUT"] ]] ];
A C gclass and a SPA session, as they are written. Same shape, same names, same way of failing: an event that reaches a state which does not declare it is a visible error, not a hidden exception.
the wire
If what defines a gobj is the event table and not its implementation, any endpoint that speaks that protocol is part of the system, whatever it is written in.
No methods. No way to call another object.
the bill
Every framework publishes its advantages. These are the same decisions with the receipt beside them, because choosing a framework is choosing what it gives up.