This is an automated email from the ASF dual-hosted git repository. chaokunyang pushed a commit to branch release_1.1.0 in repository https://gitbox.apache.org/repos/asf/fory-site.git
commit 113725b84fe081db028e1c353a88bb95217c7689 Author: 慕白 <[email protected]> AuthorDate: Sun May 31 23:10:58 2026 +0800 docs: sync zh xlang getting started --- .../current/guide/xlang/getting-started.md | 247 +++++++++++++++++---- 1 file changed, 207 insertions(+), 40 deletions(-) diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md index 8d808a279f..f8fe9b2946 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang/getting-started.md @@ -31,14 +31,14 @@ license: | <dependency> <groupId>org.apache.fory</groupId> <artifactId>fory-core</artifactId> - <version>1.0.0</version> + <version>1.1.0</version> </dependency> ``` **Gradle:** ```gradle -implementation 'org.apache.fory:fory-core:1.0.0' +implementation 'org.apache.fory:fory-core:1.1.0' ``` ### Python @@ -57,22 +57,64 @@ go get github.com/apache/fory/go/fory ```toml [dependencies] -fory = "1.0.0" +fory = "1.1.0" ``` -### JavaScript +### JavaScript/TypeScript ```bash -npm install @apache-fory/fory +npm install @apache-fory/core +``` + +对于可选的 Node.js 字符串快速路径: + +```bash +npm install @apache-fory/core @apache-fory/hps +``` + +### C\# + +```bash +dotnet add package Apache.Fory --version 1.1.0 +``` + +### Dart + +```bash +dart pub add fory:^1.1.0 +dart pub add dev:build_runner +``` + +### Swift + +将 Fory 添加到 `Package.swift`: + +```swift +dependencies: [ + .package(url: "https://github.com/apache/fory.git", exact: "1.1.0") +] +``` + +### Scala + +```scala +libraryDependencies += "org.apache.fory" %% "fory-scala" % "1.1.0" +``` + +### Kotlin + +```kotlin +implementation("org.apache.fory:fory-kotlin:1.1.0") ``` ### C++ 使用 Bazel 或 CMake 从源码构建。详见 [C++ 指南](../cpp/index.md)。 -## 启用跨语言模式 +## 创建 Xlang 运行时 -每种语言都需要启用 xlang 模式,以确保跨语言之间的二进制兼容性。 +对于暴露模式开关的运行时,Xlang 模式是默认选项。Swift、C#、JavaScript/TypeScript 和 Dart +只暴露 xlang 编码格式。下面的示例将兼容的 Schema 演进保留在默认路径上,只展示会改变其他设置的选项。 ### Java @@ -81,8 +123,8 @@ import org.apache.fory.*; import org.apache.fory.config.*; Fory fory = Fory.builder() - .withLanguage(Language.XLANG) // 启用跨语言模式 - .withRefTracking(true) // 可选:用于循环引用 + .withXlang(true) + .withRefTracking(true) // Optional: for circular references .build(); ``` @@ -91,10 +133,9 @@ Fory fory = Fory.builder() ```python import pyfory -# 必须显式启用跨语言模式 fory = pyfory.Fory(xlang=True) -# 需要时启用引用跟踪 +# Enable reference tracking when needed fory = pyfory.Fory(xlang=True, ref=True) ``` @@ -104,7 +145,7 @@ fory = pyfory.Fory(xlang=True, ref=True) import forygo "github.com/apache/fory/go/fory" fory := forygo.NewFory(forygo.WithXlang(true)) -// 或启用引用跟踪 +// Or with reference tracking fory := forygo.NewFory(forygo.WithXlang(true), forygo.WithTrackRef(true)) ``` @@ -113,17 +154,61 @@ fory := forygo.NewFory(forygo.WithXlang(true), forygo.WithTrackRef(true)) ```rust use fory::Fory; -let fory = Fory::default().xlang(true); +let fory = Fory::builder().xlang(true).build(); ``` -### JavaScript +### JavaScript/TypeScript ```javascript -import Fory from "@apache-fory/fory"; +import Fory, { Type } from "@apache-fory/core"; const fory = new Fory(); ``` +### C\# + +```csharp +using Apache.Fory; + +Fory fory = Fory.Builder().Build(); +``` + +### Dart + +```dart +import 'package:fory/fory.dart'; + +final fory = Fory(); +``` + +### Swift + +```swift +import Fory + +let fory = Fory() +``` + +### Scala + +```scala +import org.apache.fory.scala.ForyScala + +val fory = ForyScala.builder() + .withXlang(true) + .build() +``` + +### Kotlin + +```kotlin +import org.apache.fory.kotlin.ForyKotlin + +val fory = ForyKotlin.builder() + .withXlang(true) + .build() +``` + ### C++ ```cpp @@ -131,9 +216,7 @@ const fory = new Fory(); using namespace fory::serialization; -auto fory = Fory::builder() - .xlang(true) - .build(); +auto fory = Fory::builder().xlang(true).build(); ``` ## 类型注册 @@ -159,42 +242,80 @@ fory.register_type(Person, typename="example.Person") **Go:** ```go -fory.RegisterNamedStruct(Person{}, "example.Person") +fory.RegisterStructByName(Person{}, "example.Person") ``` **Rust:** ```rust -use fory::{Fory, ForyObject}; +use fory::{Fory, ForyStruct}; -#[derive(ForyObject)] +#[derive(ForyStruct)] struct Person { name: String, age: i32, } -let mut fory = Fory::default().xlang(true); +let mut fory = Fory::builder().xlang(true).build(); fory - .register_by_namespace::<Person>("example", "Person") + .register_by_name::<Person>("example", "Person") .expect("register Person"); ``` -**JavaScript:** +**JavaScript/TypeScript:** ```javascript -const description = Type.object("example.Person", { - name: Type.string(), - age: Type.int32(), -}); -fory.registerSerializer(description); +const personType = Type.struct( + { typeName: "example.Person" }, + { + name: Type.string(), + age: Type.int32(), + }, +); +const { serialize, deserialize } = fory.register(personType); ``` **C++:** ```cpp -fory.register_struct<Person>("example.Person"); -// 对于枚举,使用 register_enum: -// fory.register_enum<Color>("example.Color"); +fory.register_struct<Person>("example", "Person"); +// For enums, use register_enum: +// fory.register_enum<Color>("example", "Color"); +``` + +**C#:** + +```csharp +fory.Register<Person>("example", "Person"); +``` + +**Dart:** + +```dart +PersonForyModule.register( + fory, + Person, + namespace: 'example', + typeName: 'Person', +); +``` + +**Swift:** + +```swift +try fory.register(Person.self, namespace: "example", name: "Person") +``` + +**Scala:** + +```scala +fory.register(classOf[Person], "example.Person") +``` + +**Kotlin:** + +```kotlin +fory.register(Person::class.java, "example.Person") ``` ### 按 ID 注册 @@ -219,14 +340,62 @@ fory.register_type(Person, type_id=100) fory.RegisterStruct(Person{}, 100) ``` +**Rust:** + +```rust +fory.register::<Person>(100)?; +``` + +**JavaScript/TypeScript:** + +```javascript +const personType = Type.struct( + { typeId: 100 }, + { + name: Type.string(), + age: Type.int32(), + }, +); +``` + **C++:** ```cpp fory.register_struct<Person>(100); -// 对于枚举,使用 register_enum: +// For enums, use register_enum: // fory.register_enum<Color>(101); ``` +**C#:** + +```csharp +fory.Register<Person>(100); +``` + +**Dart:** + +```dart +PersonForyModule.register(fory, Person, id: 100); +``` + +**Swift:** + +```swift +fory.register(Person.self, id: 100) +``` + +**Scala:** + +```scala +fory.register(classOf[Person], 100) +``` + +**Kotlin:** + +```kotlin +fory.register(Person::class.java, 100) +``` + ## Hello World 示例 下面给出一个完整示例,展示如何在 Java 中序列化、在 Python 中反序列化: @@ -245,9 +414,7 @@ public class Person { public class HelloWorld { public static void main(String[] args) throws Exception { - Fory fory = Fory.builder() - .withLanguage(Language.XLANG) - .build(); + Fory fory = Fory.builder().withXlang(true).build(); fory.register(Person.class, "example.Person"); Person person = new Person(); @@ -270,7 +437,7 @@ from dataclasses import dataclass @dataclass class Person: name: str - age: pyfory.Int32Type + age: pyfory.Int32 fory = pyfory.Fory(xlang=True) fory.register_type(Person, typename="example.Person") @@ -287,9 +454,9 @@ print(f"Name: {person.name}, Age: {person.age}") 1. **使用一致的类型名**:确保所有语言使用相同的类型名或 ID。 2. **启用引用跟踪**:如果你的数据包含循环引用或共享引用。 -3. **复用 Fory 实例**:创建 Fory 的成本较高,应尽量复用实例。 -4. **使用类型注解**:在 Python 中使用 `pyfory.Int32Type` 等精确类型映射。 -5. **测试跨语言链路**:验证序列化结果在所有目标语言之间都能正确工作。 +3. **复用 Fory 实例**:创建 Fory 实例成本较高,应尽量复用。 +4. **使用类型注解**:在 Python 中使用 `pyfory.Int32` 等标记来获得精确的类型映射。 +5. **测试跨语言链路**:验证序列化在所有目标语言之间都能正确工作。 ## 后续步骤 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
