|
The YAMI4 libraries do not depend on any other libraries and are implemented entirely in terms of language standard libraries and system calls. This lack of external dependencies means that the library is easy to deploy and that all organizational considerations like software licensing are simplified as much as possible.
Still, the dependency on the language standard library can be itself minimized by careful selection of the subset of the standard library that is used and such effort is aligned with strict coding guidelines and with audit or certification attempts as well as with the ease of porting to other platforms.
In order to help users with these efforts, the YAMI4 core library provides complete information related to library dependencies.
The C++ Core library depends on the following functions from the C++ standard library:
malloc
and free
- these can be eliminated when private memory partition is used, as explained in the next chaptersnprintf
, strtol
- for formatting and parsing of integer numbersmemcmp
, memcpy
, memset
, strchr
, strcmp
, strcpy
, strlen
, strncmp
, strncpy
- for general manipulation of byte buffersIn addition, the core library depends on the following POSIX system calls:
open
- for filesaccept
, bind
, connect
, fcntl
, freeaddrinfo
, getaddrinfo
, gethostname
, getsockname
, listen
, recvfrom
, sendto
, setsockopt
, socket
, unlink
- for network sockets and their configurationpipe
, select
- for I/O event processingread
, write
- for data transferclose
pthread_mutex_init
, pthread_mutex_destroy
, pthread_mutex_lock
, pthread_mutex_unlock
It should be noted that with the elimination of malloc
and free
(via private memory partitions) and with fairly easy replacement of the other standard library calls, the YAMI4 Core library can be built with no dependency on the language runtime. This property is of particular importance for embedded and special-purpose systems.
It should be also noted that the core library does not depend on thread-creation system calls. In fact, the core library does not create any threads and relies on the user code to provide appropriate processing threads - in particular it is possible to process messages purely in the main application thread.
The Ada Core library depends on the following standard packages:
Ada.Finalization
Ada.Streams
- for Stream_Element_Count
Ada.Unchecked_Deallocation
- needed only if agents are created dynamicallyInterfaces.C
Interfaces.C.Strings
System
- for Address
System.Address_To_Access_Conversions
System.Storage_Elements
- for Storage_Count
These dependencies can be easily satisfied even in a very constrained environment, since they do not rely on the more involving parts of the language run-time library. In particular, there is no dependency on tasking. The library does, however, depend on the exception system.