One lesson learned from C#/Java versus other languages is that we need to include standard libraries as part of the language standard. C/C++ do not do this and suffer the consequences of lower portability between platforms as a result. The challenge is that libraries will be larger than the VM itself and many of them will need to be implemented in C/C++. The smaller MCU’s can not be expected to support the same C libraries as we expect to find on Linux/Windows level implementations.
The Assembler and RTL will sort this automatically. As we use a repository we also decide platform and what it contains. The assembler will generate an error if we attempt using content not present on a system. And the RTL will fail at binding the same rejecting any module that require content it does not support.
The following libraries are planned
System has a mandatory content and optional content – all of which is implemented in the host language to allow Plain access to the core system parts. System will cover all basic features needed to actually write a module – including access to RTOS and generic system.
HMI – Human Machine Interface cover standard keyboard, mouse and display as well as buttons, leds etc. Due to the nature of Plain we can easily create a user interface on Raspberry PI operated from an embedded device or wise versa – HMI cover standards to do this so we don’t end up with too much proprietary solutions.
Database library giving us access to any standard database as well as our own proprietary ones. The library will cover a standard way to access data and a standards to include proprietary solutions to ensure that modules accessing a database is portable. The proposal will also include a proprietary, distributed database solution that either can be used stand-alone or as a real-time, distributed front-end to 3rd party solutions. Again- due to the nature of Plain it is straight forward for an embedded device to access a database located anywhere in the network – but, we need to include this in the Plain language definition to secure portability.
Communication. We have an implicit inclusion of easyIPC since it is used by Plain VM, but we need a way to access & control other communication protocols.
Advanced math library – hard to avoid in any system that require math. Standards to let any module access and execute advanced math using resources available in the system.
Others ? I believe the more stuff we can define & support through standards the better.