This is an automated email from the ASF dual-hosted git repository.
wangweipeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-fury.git
The following commit(s) were added to refs/heads/main by this push:
new 95979623 feat(spec): add xlang type mapping (#1468)
95979623 is described below
commit 959796233fdd25a3bf47bc2dd75c6d60e5d7d08e
Author: Shawn Yang <[email protected]>
AuthorDate: Sat Apr 6 20:30:50 2024 +0800
feat(spec): add xlang type mapping (#1468)
---
docs/guide/DEVELOPMENT.md | 2 +-
docs/guide/xlang_type_mapping.md | 73 +++++++++++++++++++++++++-
docs/specification/xlang_serialization_spec.md | 2 -
3 files changed, 73 insertions(+), 4 deletions(-)
diff --git a/docs/guide/DEVELOPMENT.md b/docs/guide/DEVELOPMENT.md
index 5d71166a..bfab5417 100644
--- a/docs/guide/DEVELOPMENT.md
+++ b/docs/guide/DEVELOPMENT.md
@@ -1,6 +1,6 @@
---
title: Development
-sidebar_position: 6
+sidebar_position: 7
id: development
---
diff --git a/docs/guide/xlang_type_mapping.md b/docs/guide/xlang_type_mapping.md
index f529d4ef..bec22957 100644
--- a/docs/guide/xlang_type_mapping.md
+++ b/docs/guide/xlang_type_mapping.md
@@ -4,4 +4,75 @@ sidebar_position: 3
id: xlang_type_mapping
---
-Coming soon.
+Note:
+
+- For type definition, see [Type Systems in
Spec](../specification/xlang_serialization_spec.md#type-systems)
+- `int16_t[x]/vector<~>` indicates `int16_t[x]/vector<int16_t>`
+- The cross-language serialization is not stable, do not use it in your
production environment.
+
+# Type Mapping
+
+| Type | Type ID | Java | Python |
Javascript | C++ | Golang | Rust
|
+|--------------------|---------|-----------------|----------------------|-----------------|--------------------------------|------------------|------------------|
+| bool | 1 | bool/Boolean | bool |
Boolean | bool | bool | bool
|
+| int8 | 2 | byte/Byte | int/pyfury.Int8 |
Type.int8() | int8_t | int8 | i8
|
+| int16 | 3 | short/Short | int/pyfury.Int16 |
Type.int16() | int16_t | int16 | i6
|
+| int32 | 4 | int/Integer | int/pyfury.Int32 |
Type.int32() | int32_t | int32 | i32
|
+| var_int32 | 5 | int/Integer | int/pyfury.VarInt32 |
Type.varint32() | fury::varint32_t | fury.varint32 |
fury::varint32 |
+| int64 | 6 | long/Long | int/pyfury.Int64 |
Type.int64() | int64_t | int64 | i64
|
+| var_int64 | 7 | long/Long | int/pyfury.VarInt64 |
Type.varint64() | fury::varint64_t | fury.varint64 |
fury::varint64 |
+| sli_int64 | 8 | long/Long | int/pyfury.SliInt64 |
Type.sliint64() | fury::sliint64_t | fury.sliint64 |
fury::sliint64 |
+| float16 | 9 | float/Float | float/pyfury.Float16 |
Type.float16() | fury::float16_t | fury.float16 | fury::f16
|
+| float32 | 10 | float/Float | float/pyfury.Float32 |
Type.float32() | float | float32 | f32
|
+| float64 | 11 | double/Double | float/pyfury.Float64 |
Type.float64() | double | float64 | f64
|
+| string | 12 | String | str |
String | string | string |
String/str |
+| enum | 13 | Enum subclasses | enum subclasses | /
| enum | / | enum
|
+| list | 14 | List/Collection | list/tuple |
array | vector | slice | Vec
|
+| set | 15 | Set | set | /
| set | fury.Set | Set
|
+| map | 16 | Map | dict | Map
| unordered_map | map | HashMap
|
+| duration | 17 | Duration | timedelta |
Number | duration | Duration | Duration
|
+| timestamp | 18 | Instant | datetime |
Number | std::chrono::nanoseconds | Time | DateTime
|
+| decimal | 19 | BigDecimal | Decimal |
bigint | / | / | /
|
+| array | 20 | array | np.ndarray | /
| / | array/slice | Vec
|
+| bool_array | 21 | bool[] | ndarray(np.bool_) | /
| `bool[x]` | `[x]bool/[]~` | `Vec<bool>`
|
+| int16_array | 22 | short[] | ndarray(int16) | /
| `int16_t[x]/vector<~>` | `[x]int16/[]~` | `Vec<i16>`
|
+| int32_array | 23 | int[] | ndarray(int32) | /
| `int32_t[x]/vector<~>` | `[x]int32/[]~` | `Vec<i32>`
|
+| int64_array | 24 | long[] | ndarray(int64) | /
| `int64_t[x]/vector<~>` | `[x]int64/[]~` | `Vec<i64>`
|
+| float16_array | 25 | float[] | ndarray(float16) | /
| `fury::float16_t[x]/vector<~>` | `[x]float16/[]~` |
`Vec<fury::f16>` |
+| float32_array | 26 | float[] | ndarray(float32) | /
| `float[x]/vector<~>` | `[x]float32/[]~` | `Vec<f32>`
|
+| float64_array | 27 | float[] | ndarray(float64) | /
| `double[x]/vector<~>` | `[x]float64/[]~` | `Vec<f64>`
|
+| tensor | 28 | / | / | /
| / | / | /
|
+| sparse tensor | 29 | / | / | /
| / | / | /
|
+| arrow record batch | 30 | / | / | /
| / | / | /
|
+| arrow table | 31 | / | / | /
| / | / | /
|
+
+# Type annotation(not implemented)
+
+Due to differences between type systems of languages, those types can't be
mapped one-to-one between languages. Users
+can provide meta hints for fields of a type, or for the whole type. Such
information can be provided in other languages
+too:
+
+- java: use annotation.
+- cpp: use macro and template.
+- golang: use struct tag.
+- python: use typehint.
+- rust: use macro.
+
+Here is en example:
+
+- Java:
+ ```java
+ class Foo {
+ @Int32Type(varint = true)
+ int f1;
+ List<@Int32Type(varint = true) Integer> f2;
+ }
+ ```
+- Python:
+
+```python
+class Foo:
+ f1: Int32Type(varint=True)
+ f2: List[Int32Type(varint=True)]
+```
+
diff --git a/docs/specification/xlang_serialization_spec.md
b/docs/specification/xlang_serialization_spec.md
index e01ec921..7838f78c 100644
--- a/docs/specification/xlang_serialization_spec.md
+++ b/docs/specification/xlang_serialization_spec.md
@@ -29,11 +29,9 @@ also introduce more complexities compared to static
serialization frameworks. So
- int16: a 16-bit signed integer.
- int32: a 32-bit signed integer.
- var_int32: a 32-bit signed integer which use fury var_int32 encoding.
-- fixed_int32: a 32-bit signed integer which use two's complement encoding.
- int64: a 64-bit signed integer.
- var_int64: a 64-bit signed integer which use fury PVL encoding.
- sli_int64: a 64-bit signed integer which use fury SLI encoding.
-- fixed_int64: a 64-bit signed integer which use two's complement encoding.
- float16: a 16-bit floating point number.
- float32: a 32-bit floating point number.
- float64: a 64-bit floating point number including NaN and Infinity.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]