Tip ifadesi söz dizimi
Özet
- Pipelang, Pipelogic'in her hat üzerindeki veriyi tanımlamak için kullandığı tip dilidir — küçük, yapısal, özyinelemeli.
- Bir tip, atomic keyword'lerden (
Int32,Double,String,Bool, …) inşa edilir ve composite biçimler aracılığıyla bir araya getirilir —[t](list),(a, b)(tuple),{x: A, y: B}(record),A | B(union),Name<T>(named-type uygulaması). - Küçük harfli tanımlayıcılar (
t,a,frame) type variable'lardır; büyük harfli tanımlayıcılar catalog'dan gelen somut adlardır. - Aynı grammar platform derleyicisinde, C++ çalışma zamanında ve Python catalog'da çalışır —
component.ymliçinde yazılan tip ifadeleri, nerede görünürlerse görünsünler aynı şekilde denetlenir. - Okuduğunuz sayfa zihinsel modeldir. Tam grammar, her production, her disambiguation kuralı, her işlenmiş köşe durumu için referansı CLI'dan getirin:
ppl docs get type-api/type-syntax.
Bir Pipelang tipi size gerçekte ne kazandırır
Pipelang, Pipelogic'in bir sözleşmeyi çalışma zamanından önce dayattığı tek yerdir. Bir component input_type: "Image" bildirir; başka bir component output_type: "Image" bildirir; platform bunları yalnızca tipler birleşirse (unify) bağlar. "Neredeyse uyumlu" diye bir şey yoktur, çağrı noktasında tesadüfen doğru görünen bir JSON dict yoktur, eksik bir alanda çalışma zamanı KeyError'ı yoktur — hat ya tip denetiminden geçer ya da var olmayı reddeder.
Grammar bilerek küçük tutulmuştur, böylece bu denetim hızlı, anlaşılır ve dil sınırları boyunca tutarlı olur. Üretici Python ve tüketici C++ olsa da, tersi olsa da aynı ifade, aynı anlam.
En sık kullanacağınız biçimler
| Form | Örnek | Ne zaman başvurursunuz |
|---|---|---|
| Atomic | Int32, Double, String | Hat bir skaler taşır. |
| Named | Image, AudioFrame, Tensor | Hat, catalog'dan bir alan nesnesi taşır. |
| List | [BoundingBox] | Eleman tipinin homojen dizisi. |
| Tuple | (Image, String) | Heterojen, sabit elemanlı dizi; sıra önemlidir. |
| Record | {x: Double, y: Double} | Adlandırılmış alanlar; hat üzerinde ad-hoc bir struct. |
| Union | Image | DepthImage | Alternatiflerden biri tüketici için kabul edilebilir. |
| Generic uygulaması | Polygon<Double>, Maybe<a> | Bir veya daha fazla tip argümanıyla parametrelenmiş bir catalog tipi. |
| Type variable | a, t, elem | Platformun kompozisyon zamanında bağladığı bir yer tutucu (küçük harfli tanımlayıcı). |
| Refinement | Int32<0..=255>, String<email> | Bir yüklemle daraltılmış bir taban tip — bir aralık, enum, desen ya da format takma adı. |
Grammar bunları özyinelemeli olarak birleştirir: [Maybe<{x: Double, y: Double}>], yukarıdaki tablodan bir araya getirilmiş her biçimle, isteğe bağlı noktaların bir list'idir.
Generic vs somut: tek satırlık bir kural
Tanımlayıcı küçük harfle başlıyorsa, component bir backend'e bağlandığında platformun bağladığı generic bir yer tutucudur. Büyük harfle başlıyorsa (ya da on atomic keyword'den biriyse) somuttur. Bu tek kural, günlük olarak yazacağınız şeylerin çoğunu kapsar; bunun ötesindeki her şey — pack variable'lar $ts, pattern expansion'lar T..., field-pack expansion'lar $ns: T..., bir tabanı bir yüklemle daraltan refinement'lar (Int32<0..=255>) ve bounded küme oneof[…] — tipin variadic ya da kısıtlı olduğu ileri düzey durumlar içindir.
Bu nereye uyar
Tip ifadesi dili, component'ler arasındaki sözleşmedir. Tip denetleyicisinin girdisi, görsel builder'daki bağlanabilirlik grafiğinin kaynağı, agent catalog'undaki otomatik tamamlamanın temelidir. Component'ler boyunca görünen her şey — neyin nereye uyduğu, neyin uymadığı — bu grammar'dan gelir. Tip imzasını spesifikasyon olarak ele alın; platform da onu öyle ele alıyor.
Tam grammar için
Web sitesi modeli ve yaygın biçimleri kapsar. Her production, her disambiguation kuralı ((T) vs (T,), T | U vs T |), pack variable'lar, pattern expansion'lar, refinement'lar, bounded tip oneof[…], default değer literalleri, eşitlik ve kanonikleştirme kuralları ve her catalog köşe durumu için işlenmiş örnekler içeren tam grammar için referansı CLI'dan getirin:
ppl docs get type-api/type-syntax
İlgili
- /type-api/types — bir platform kavramı olarak tip sistemi.
- /component-api/component-contract — bu ifadeleri saran dosya.
- /type-api/catalog — yerleşik named type'ların catalog'u.
- /concepts/components — tipli bir component'in bir backend'e nasıl uyduğu.