What is the API
The Parietal Numerics API gives developers programmatic access to the computational engine. It is targeted at intermediate and advanced developers with bindings provided for C++, .NET and Java. A determined Python developer could potentially use Boost Python to create their own Python bindings although we plan on offering this eventually.
The engine as job manager
Because our engine runs as a service, it handles all queueing, canceling, caching, memory safety, async handling and multithreading.
What this means for you is that your applications get the benefit of all of those things but never import the complexity that goes with implementing them. All you need to do is send request payloads and receive response payloads.
Quickest way to get started?
We recommend starting off with the sample apps. We currently provide sample apps for C++ and C#. The apps are commented and walk you through step-by-step. Once you have a basic understanding of how the samples work, it will be much easier grasping the content in this section.
Overview
Parietal Numerics has three components:
- Core Engine
- Message Transport
- Message Serialization
1. Core Engine
The core engine runs ‘close to the metal’ and doen’t need any runtime dependencies. It has the following responsibilities:
- Send and receive payloads over the wire
- Manage internal job queue
- Conduct math operations (long running operations, immediate response operations)
2. Message Serialization
Since the engine is event driven, we need a way for clients and the engine to agree on how to communicate. Therefore, the need for schematized data. We use Microsoft Bond to generate C++, .NET and Java bindings. This way, any clients that wish to interact with the engine, can use the bindings.
3. Message Transport
We use ZeroMQ for message transport. Beyond simply passing messages back and forth, it enables messaging patterns that are reliable, low latency and low overhead. ZeroMQ obviates the need for any brokers or dedicated message passing services. From a licensing standpoint, it offered a static linking exemption which was important to us as we wanted to have a monolithic engine binary.
Who this API is for
Intermediate to advanced devs who have some knowledge of design patterns, concurrency and serialization.
Because of its modular architecture, it is possible for you to write very non-intrusive layers in your own applications. Meaning you simply have to write a message payload and send/receive. All the heavy lifting of queueing, canceling, memory safety, caching, is handled by the engine. All of that complexity is kept external from your source application.
Who the API is not for
The bar for beginning devs is a bit higher. Devs need to have a understanding of basic design patterns, networking and serialization. Devs might also need to read the ZeroMQ guides and brush up on some network patterns described over there.
Another thing to keep in mind is that by using this API you are calling a service running locally. Needless to say, that might be a deal breaker if you need to ship software to third parties who don’t have Parietal Numerics on their machines.