C++ component API
Bir C++ Pipelogic bileşeni, component.yml artı src/main.cpp'dir. YAML, platforma dönük girişleri, çıkışları, config'i, dosyaları ve build ayarlarını bildirir; main.cpp, bileşen ikilisinde çalışan worker mantığını içerir. Build sistemi bu giriş noktasını derler ve deployment içinde gönderir.
Bu sayfa, C++ component API'nin dizinidir. Ayrıntılı sayfalar component-api/cpp/ altında bulunur — class description, factory-typed bileşenler, stateful kalıpları, hata işleme, başlıklar ve tam tür referansı.
C++ bileşenleri için (language: cpp), yazdığın tek dosya src/main.cpp'dir. Bileşen dizininde xmake.lua yoktur — build base, build betiğine sahiptir. Derleme aşaması main.cpp'yi giriş noktası olarak ele alır, onu C++ ML SDK runtime + bildirdiğin xmake_packages: ile linkler ve platformun bir container içinde çalıştırdığı bileşen ikilisini üretir.
Bu dizin, component-api/cpp/ altındaki her dokümanı ve neyi kapsadığını listeler. Daha önce hiç C++ bileşeni yazmadıysan sırayla oku; hangi biçim/konunun peşinde olduğunu biliyorsan belirli bir sayfaya atla.
Gerekli okuma sırası
component-api/cpp/types—Message,Object<T>,String,List<T>,Tuple<T...>'ın ne anlama geldiği. Diğer her doküman bunları bildiğini varsayar.component-api/cpp/headers— başlık kataloğu. Hangi#includeneyi getirir.component-api/cpp/config—parse_config,read_config, mutable parametreler.component.yml'ine uyan bileşen biçimini seç (sonraki bölüm).component-api/cpp/errors— istisnalar, log konvansiyonları.
API referansları
Anlatı açıklaması değil de her türün her genel üyesinin tam imzasına ihtiyaç duyduğunda:
- Types reference —
types.hppiçindeki her ad: atomik etiketler,List/Tuple/Union/Record/Named,concepts::ad alanı,Type,TypeManager, tümcreate_*fabrikaları. - Object reference — 8 temel türün tamamında
Object<T>,Reference<T>,ConstReference<T>'nin her genel üyesi, artı yaşam süresi / aliasing değişmezleri.
Yukarıdaki anlatı dokümanları hâlâ doğru giriş noktasıdır — bu referanslar „statik bir Reference<Record> üzerindeki mutable_get'in tam imzası nedir?" gibi sorular için vardır.
Bileşen biçimleri
Biçimi şuna göre seç: kaç giriş aldığın, bunların 1'e 1 eşlenip eşlenmediği ve durum veya pull kontrolüne ihtiyacın olup olmadığı:
| Bu biçimi kullan | Ne zaman |
|---|---|
component-api/cpp/single-io | Bir giriş, bir çıkış, durumsuz. Varsayılan ve en basit durum. |
component-api/cpp/multi-input-positional | Her zaman birlikte gelen birden çok giriş (tick başına 1 tick), her biri bir Message argümanı. |
component-api/cpp/vector-io | std::vector<Message> olarak alınan birden çok giriş/çıkış (variadik / genel). |
component-api/cpp/stateful | Mesajlar arası duruma ihtiyacın var (sayaçlar, EMA, oturum eşlemesi, biriktirici). |
component-api/cpp/factory-typed | Bileşen biçimi bağlanan türe bağlıdır (t gibi generic'ler). |
component-api/cpp/class-description | Tam pull kontrolüne ihtiyacın var (oran sınırlayıcılar, batcher'lar, eşzamansız akış, yaşam döngüsü kancaları). |
İskelet
Her main.cpp şöyle başlar ve biter:
#include "pipelogic/pipelogic.hpp"using namespace ppl;// ... your worker function(s) ...PIPELOGIC_MAIN() { run(<your_function>); return EXIT_SUCCESS;}
PIPELOGIC_MAIN(), int main(int, char**) artı runtime bootstrap'a açılan bir makrodur. Asla kendin int main yazmazsın. Makro gövdesindeki tek çağrı run(...)'dur — bileşen biçimine uyan varyant (her biçim dokümanı tam biçimi gösterir).
return EXIT_SUCCESS; zorunludur — makro, gövdenin bir şey döndürmesini gerektirir.
Build yapılandırması
component.yml içindeki build_system:, derleme + runtime base'ini seçer (bkz. concepts/build-systems). C++ bileşenleri için:
| build_system | Getirdiği |
|---|---|
2 | C++ ML SDK araç zinciri ve runtime, ek ML kitaplığı yok. |
2-ml | 2 + OpenCV, C++ ML SDK'nın ML başlıkları, yaygın çıkarım bağımlılıkları. |
Base'in ötesindeki kitaplıklar için bunları component.yml içinde xmake_packages: altında listele:
xmake_packages: - libcurl - nlohmann_json
xmake paketi config gerektirdiğinde yapılandırılmış biçimi kullan:
xmake_packages: - require: arrow 7.0.0 package: arrow configs: parquet: true csv: false snappy: true zstd: true
require, tam add_requires(...) belirtimidir. package, add_packages(...)'a geçirilen addır; çıkarılan ad doğruysa onu atla. configs doğrudan xmake {configs = {...}}'a eşlenir.
Build bunları xmake'in paket kayıt defterinden çözer — hiç build betiği yazmazsın.
İlgili
- component.yml —
component.ymliçindeki her alan,worker.input_type(s),output_type(s),config_schema:,file_schema:,xmake_packages:,depends_on:dahil. - Türler —
worker.input_type:/output_type:içinde kullanılan tür kataloğu. - Build Systems —
build_system:'in neyi seçtiği.