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.

Github issue 21

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.

Github issue 22

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.

Github issue 23

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.

Github issue 24