The Beast + BSE code base origins date back to the 90ties, so hacking on it requires some knowledge about ancient aspects and mixings with newer technologies. The following gives a high-level overview of the pitfalls involved, this file can be discussed at .

1 Migrations

The code base is currently undergoing several migrations and new developments:

1.1 IDL-Migration

[ONGOING] (For BSE) Move from sfidl (and the old PROC files) to AIDA IDL (aidacc, distributed with Rapicorn). BSE already contains an AIDA style IDL file with C++11 objects that can be used in Beast. Eventually, all sfidl files need to be ported to AIDA IDL.

1.2 C++-Migration

[ONGOING] Move from GObject (BseObject) to AIDA C++11 objects, derived from Aida::ImplicitBase and specified in IDL files. The following steps are planned:

1.3 Plugin-Merging

[STARTED] The BSE plugin API has almost no uses, but plugin loading causes major slowdowns in the startup phase. As a consequence, all plugins shipped together with BSE should be linked into the same ELF library.

1.4 Rapicorn-Migration

[PLANNED] Migrate the use of the Gtk+ toolkti to use Rapicorn widgets instead.

1.5 Python-REPL

[PLANNED] Add interactive REPL loop via Python interpreter, requires
integration of multiple main loops.

1.6 Python-Scripting

[PLANNED] Use Python scripts instead of Scheme scripts. As soon as it’s
possible to implement basic Python scripts, SCM scripts may be broken and
shall be replaced.

1.7 Bstrecords-Migration

[COMPLETED] Beast used to generate some structures from bstrecords.idl (sfidl), these are all migrated into bstapi.idl (ADIA IDL).

1.8 Enum-Migration

[COMPLETE] Beast enums have all been migrated from scanned C headers into bstapi.idl.

1.9 C++11-Compilation

[COMPLETE] All .c files have been turned into .cc files, so all sources are now compiled as C++11.

2 Conversions

Conversion between object handles works as follows:
// In bse/
BseServer server = server_impl->as();
ServerImpl
server_impl = server->as();
ServerIface server_iface = server->as();
ServerIfaceP server_iface_p = shared_ptr_cast (server_iface);
// In beast-gtk/
ServerIface
server_iface;
ObjectIfaceP server_iface->from_proxy (proxyid);
SfiProxy proxy = server_iface->proxy_id();