icpp-pro roadmap
icpp-pro is open source, available on GitHub:
This page lists all items that are planned for implementation, in order of priority.
Please submit your bug report or feature requests by creating a new GitHub Issue
PRs are welcome too!
Priority 1
Inter-canister & self calls
Task
Implement inter-canister & self calls by wrapping the ic0 system calls with asynchronous C++ calls.
Description
Currently, a C++ canister can provide services to users or other canisters, like LLM inference services, using the Candid interface.
However, a C++ canister is not able to consume services by calling other canisters. In addition, it is not possible right now to perform a self call, which is important for C++ canisters like LLMs to improve it ability to work around the instructions limit per message.
Remove globals from wasm with binaryan.py
Task
Make binaryan.py an integral part of the icpp-pro build pipeline for wasm. Install it as a dependency and always execute it.
Description
The IC has a limit on the number of globals in a wasm file. If this limit is exceeded, the wasm can't be deployed.
It turns out that the ifstream, ofstream and filesystem commands of the C++ standard library generate thousands of globals that prevent a wasm from being deployed.
The binaryan.py package is a wrapper around the C++ binaryan library that can optimize a wasm file, and one of the optimizations is to remove unused globals. It literally removes them all, and we end up with only 1 global.
This was a very important discovery while working on llama_cpp_canister, where we currently use binaryan.py in a post wasm customization module to reduce the number of globals from thousands to one. Without this it would not be possible to deploy the llama_cpp_canister wasm module to the IC.
Priority 2
icpp-pro bootcamp for writing C++ canisters
Task
Create a bootcamp training program for writing C++ canisters with icpp-pro
Description
A participant will go from zero to hero within 5 days of intense learning & building.
The training:
- will focus on building special purpose high performance computational C++ canisters on the IC, including AI & games canisters.
- cover interoperability of the C++ canisters with Motoko canisters by providing an in depth Candid interface overview.
- can be delivered in person or remote.
Dashboard for C++ canister metrics
Task
Scan IC mainnet for C++ canisters, collect metrics, and display them in a nice dashboard.
Metrics to collect & display:
- Number of C++ canisters
- Cycles burned, by each canister & total
Description
To assess the contribution of the icpp-pro C++ CDK to the IC ecosystem, it is important to get accurate reporting on the number of C++ canisters deployed to the IC mainnet, and how many cycles are being burned by them.