From 324616f828d906c9c5b0d29c46cb80a7883e7ddb Mon Sep 17 00:00:00 2001 From: ababup1192 Date: Thu, 16 Jul 2026 20:55:31 +0900 Subject: [PATCH] =?UTF-8?q?=E7=BF=BB=E8=A8=B3=E5=85=A8=E4=BD=93=E3=83=AC?= =?UTF-8?q?=E3=83=93=E3=83=A5=E3=83=BC:=20=E8=A1=A8=E8=A8=98=E6=8F=BA?= =?UTF-8?q?=E3=82=8C=E3=81=AE=E7=B5=B1=E4=B8=80=E3=81=A8=E8=A8=80=E3=81=84?= =?UTF-8?q?=E5=9B=9E=E3=81=97=E3=81=AE=E8=87=AA=E7=84=B6=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5 --- glossary.md | 8 ++++++ src/advanced-features.md | 2 +- src/arrays.md | 2 +- src/associated-types.md | 2 +- src/build-and-packages.md | 2 +- src/calling-methods.md | 4 +-- src/chains-and-vectors.md | 6 ++--- src/concurrency.md | 2 +- src/debugging.md | 2 +- src/effect-polymorphism.md | 16 ++++++------ src/effect-system.md | 19 +++++++------- src/effects-and-handlers.md | 10 +++---- src/enums.md | 2 +- src/foreach.md | 2 +- src/getting-started.md | 2 +- src/hello-world.md | 2 +- src/higher-kinded-types.md | 4 +-- src/interoperability.md | 2 +- src/introduction.md | 4 +-- src/library-effects.md | 2 +- src/monadic-for-yield.md | 10 +++---- src/mutable-collections.md | 16 ++++++------ src/pattern-matching.md | 4 +-- src/process.md | 4 +-- src/references.md | 12 ++++----- src/regions.md | 12 ++++----- src/sets-and-maps.md | 2 +- src/sleep.md | 4 +-- src/stratified-negation.md | 2 +- src/structs.md | 52 ++++++++++++++++++------------------- src/type-ascriptions.md | 1 + src/using-modules.md | 2 +- 32 files changed, 112 insertions(+), 104 deletions(-) diff --git a/glossary.md b/glossary.md index b0d94f9..a112966 100644 --- a/glossary.md +++ b/glossary.md @@ -150,6 +150,14 @@ | 基底ケース | Base case | | スタックセーフ | Stack-safe | | 継続渡しスタイル | Continuation-passing style (CPS) | +| イミュータブル | Immutable | +| ミュータブル | Mutable | +| 第一級 | First-class | +| 脱糖 | Desugaring | +| フルーエント API | Fluent API | +| 空でないリスト | Non-empty list | +| ラベル付き引数 | Labelled argument | +| エフェクト除外 | Effect exclusion | | エフェクトメンバ | Effect member | | 型メンバ | Type member | | 限定継続 | Delimited continuation | diff --git a/src/advanced-features.md b/src/advanced-features.md index cd77515..76e27be 100644 --- a/src/advanced-features.md +++ b/src/advanced-features.md @@ -4,7 +4,7 @@ この章では、Flix の高度な機能について解説します。内容は次のとおりです: -- [チェック付きキャスト](./checked-casts.md)と[チェックなしキャスト](./unchecked-casts.md) +- [検査付きキャスト](./checked-casts.md)と[未検査キャスト](./unchecked-casts.md) - [`bug!` 関数と `unreachable!` 関数](./bug-and-unreachable.md) - [純粋性リフレクション](./purity-reflection.md) - [停止性検査](./termination-checking.md) diff --git a/src/arrays.md b/src/arrays.md index 2799db1..cc0fe09 100644 --- a/src/arrays.md +++ b/src/arrays.md @@ -6,7 +6,7 @@ Flix は、ミュータブル(可変)な _スコープ付き_ 配列(Array)を Flix では、配列の型は `Array[t, r]` です。ここで `t` は要素の型、`r` はそのリージョン(region)です。Flix のすべての可変メモリと同様に、すべての配列はいずれかのリージョンに属さなければなりません。配列の読み取りと書き込みは _エフェクトを持つ_ 操作です。たとえば、型 `Array[t, r]` の配列から要素を読み取る操作はエフェクト `r` を持ちます。同様に、リージョン内で配列を作成する操作もエフェクトを持つ操作です。 -配列は _常に_ アンボックス(unboxed)化されています。たとえば、型 `Array[Int32, r]` の配列は、プリミティブな32ビット整数の列として表現されます。すなわち JVM の用語で言えば、その配列は `int[]` として表現されます。Flix はプリミティブな整数を `java.lang.Integer` オブジェクトとしてボックス化することは決してありませんが、それでもジェネリックなコレクションや関数の中でプリミティブを使うことは許可しています。これは他の種類のプリミティブやプリミティブの配列についても同様です。 +配列は _常に_ アンボックス化(unboxed)されています。たとえば、型 `Array[Int32, r]` の配列は、プリミティブな32ビット整数の列として表現されます。すなわち JVM の用語で言えば、その配列は `int[]` として表現されます。Flix はプリミティブな整数を `java.lang.Integer` オブジェクトとしてボックス化することは決してありませんが、それでもジェネリックなコレクションや関数の中でプリミティブを使うことは許可しています。これは他の種類のプリミティブやプリミティブの配列についても同様です。 配列は低レベルのデータ構造であり、通常はより高レベルなデータ構造を実装するために使われます。したがって、そのようなデータ構造を実装する場合を除いては、配列の使用は控えめにすることをおすすめします。代わりに、`MutList`、`MutDeque`、`MutSet`、`MutMap` といったデータ構造を使うことをおすすめします。 diff --git a/src/associated-types.md b/src/associated-types.md index bf98934..39e0ed1 100644 --- a/src/associated-types.md +++ b/src/associated-types.md @@ -2,7 +2,7 @@ > 💡 **お知らせ**: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、[原文(英語)](https://doc.flix.dev/associated-types.html)を参照してください。 -関連型(Associated type)とは、トレイトの型メンバーであり、各トレイトインスタンスごとに指定されるものです。関連型は、[多引数型クラス](https://en.wikipedia.org/wiki/Type_class#Multi-parameter_type_classes)に代わる、より自然な選択肢と見なされることがよくあります。 +関連型(Associated type)とは、トレイトの型メンバであり、各トレイトインスタンスごとに指定されるものです。関連型は、[多引数型クラス](https://en.wikipedia.org/wiki/Type_class#Multi-parameter_type_classes)に代わる、より自然な選択肢と見なされることがよくあります。 例を使って関連型を説明します。 diff --git a/src/build-and-packages.md b/src/build-and-packages.md index e13e0bf..cb75122 100644 --- a/src/build-and-packages.md +++ b/src/build-and-packages.md @@ -2,7 +2,7 @@ > 💡 **お知らせ**: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、[原文(英語)](https://doc.flix.dev/build-and-packages.html)を参照してください。 -Flix にはビルドシステム(Build system)とパッケージマネージャ(Package manager)が付属しています。ビルドシステムを使うと、Flix プログラムを Java クラスの集まりにコンパイルしたり、fat JAR(ファットジャー)をビルドしたりすることが簡単にできます。パッケージマネージャを使うと、Flix パッケージを作成して GitHub に公開し、マニフェストファイル(Manifest file)を介してそれらに依存することができます。また、パッケージマネージャによって、Maven で公開されている Java の JAR アーティファクトに依存することも可能です。 +Flix にはビルドシステム(Build system)とパッケージマネージャ(Package manager)が付属しています。ビルドシステムを使うと、Flix プログラムを Java クラスの集まりにコンパイルしたり、fat JAR(ファット JAR)をビルドしたりすることが簡単にできます。パッケージマネージャを使うと、Flix パッケージを作成して GitHub に公開し、マニフェストファイル(Manifest file)を介してそれらに依存することができます。また、パッケージマネージャによって、Maven で公開されている Java の JAR アーティファクトに依存することも可能です。 Flix のビルドシステムは、以下のコマンドをサポートしています: diff --git a/src/calling-methods.md b/src/calling-methods.md index 25cb912..8fea5ba 100644 --- a/src/calling-methods.md +++ b/src/calling-methods.md @@ -109,7 +109,7 @@ def f(): String \ IO = `o` の型が不明であるため、`String.valueOf(boolean)`、`String.valueOf(char)`、`String.valueOf(double)`、あるいはその他のオーバーロードされたバージョンのどれを呼び出したいのか、Flix には分かりません。 -解決策は、該当する引数に型指定(type ascription)を付けることです: +解決策は、該当する引数に型注釈(type ascription)を付けることです: ```flix import java.lang.{String => JString} @@ -119,7 +119,7 @@ def f(): String \ IO = JString.valueOf((o: Bool)) ``` -この型指定は `o` が `Bool` 型であることを指定しており、これによってメソッド解決を正常に完了できるようになります。なお、追加の括弧のペアが必要であることに注意してください。 +この型注釈は `o` が `Bool` 型であることを指定しており、これによってメソッド解決を正常に完了できるようになります。なお、追加の括弧のペアが必要であることに注意してください。 ## 純粋であると分かっている Java メソッドの呼び出し diff --git a/src/chains-and-vectors.md b/src/chains-and-vectors.md index 7662059..67ce78b 100644 --- a/src/chains-and-vectors.md +++ b/src/chains-and-vectors.md @@ -2,7 +2,7 @@ > 💡 **お知らせ**: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、[原文(英語)](https://doc.flix.dev/chains-and-vectors.html)を参照してください。 -Flix は不変な `List` に加えて、不変な `Chain` と `Vector` もサポートしています。 +Flix はイミュータブルな `List` に加えて、イミュータブルな `Chain` と `Vector` もサポートしています。 次の表は、list、chain、vector のあいだの性能上のトレードオフを示しています: @@ -22,7 +22,7 @@ Flix は不変な `List` に加えて、不変な `Chain` と `Vector` もサポ ## Chains -`Chain[t]` は、要素の不変な連結シーケンスです。 +`Chain[t]` は、要素のイミュータブルな連結シーケンスです。 `Chain[t]` データ型は次のように定義されています: @@ -49,7 +49,7 @@ println(c) ## Vectors -`Vector[t]` は、型 `t` の連続した要素からなる、不変で固定長のシーケンスです。 +`Vector[t]` は、型 `t` の連続した要素からなる、イミュータブルで固定長のシーケンスです。 Flix は `Vector` リテラルをサポートしています。たとえば、次のように書けます: diff --git a/src/concurrency.md b/src/concurrency.md index ec5394b..dfbeb48 100644 --- a/src/concurrency.md +++ b/src/concurrency.md @@ -33,7 +33,7 @@ def main(): Unit \ IO = ## チャネルによる通信 -プロセス間で通信するには、チャネルを使用します。*チャネル(Channel)*を使うと、2つ以上のプロセスが互いに不変(イミュータブル)なメッセージを送り合うことで、データを交換できます。 +プロセス間で通信するには、チャネルを使用します。*チャネル(Channel)*を使うと、2つ以上のプロセスが互いにイミュータブルなメッセージを送り合うことで、データを交換できます。 チャネルには、*バッファ付き(Buffered)*と*バッファなし(Unbuffered)*の2つの種類があります。チャネルは必ずリージョンに関連付けられます。 diff --git a/src/debugging.md b/src/debugging.md index df860fd..151d37c 100644 --- a/src/debugging.md +++ b/src/debugging.md @@ -26,7 +26,7 @@ def sum(x: Int32, y: Int32): Int32 = 4 |> result ``` -問題は、`println` が `IO` エフェクトを持つことです。そのため、純粋な関数の中でプリントデバッグ(Print debugging)のために `println` を使うことはできません。`sum` 関数に `IO` エフェクトを持たせることもできますが、それが望ましいことはめったにありません。その代わりに、Flix にはプリント行デバッグを可能にする組み込みのデバッグ機能が用意されています。 +問題は、`println` が `IO` エフェクトを持つことです。そのため、純粋な関数の中でプリントデバッグ(Print debugging)のために `println` を使うことはできません。`sum` 関数に `IO` エフェクトを持たせることもできますが、それが望ましいことはめったにありません。その代わりに、Flix にはプリントデバッグを可能にする組み込みのデバッグ機能が用意されています。 ## `Debug.dprintln` 関数 diff --git a/src/effect-polymorphism.md b/src/effect-polymorphism.md index e45cdd8..10d9ca3 100644 --- a/src/effect-polymorphism.md +++ b/src/effect-polymorphism.md @@ -129,11 +129,11 @@ def recoverWith(f: Unit -> a \ Throw, h: ErrMsg -> a \ (ef - Throw)): a = ... ここで `recoverWith` 関数は2つの関数引数を取ります。例外を投げる可能性のある関数 `f` と、そのエラーを処理できるハンドラ `h` です。注目すべきは、エフェクトシステムが `h` 自身は例外を投げられないことを強制する点です。 -## サブエフェクト +## サブエフェクティング > **注意:** この機能はまだ有効化されていません。 -Flix は _サブエフェクト_ をサポートしており、これによって式や関数がそのエフェクト集合を _広げる_ ことができます。 +Flix は _サブエフェクティング_ をサポートしており、これによって式や関数がそのエフェクト集合を _広げる_ ことができます。 例えば、次のように書いた場合を考えます。 @@ -141,7 +141,7 @@ Flix は _サブエフェクト_ をサポートしており、これによっ if (???) { x -> x + 1 } else { x -> {println(x); x + 1}} ``` -最初の分岐は型 `Int32 -> Int32 \ { }`(つまり純粋)を持つはずであり、一方で2番目の分岐は型 `Int32 -> Int32 \ { IO }` を持ちます。サブエフェクトがなければ、`{ } != { IO }` であるためこれら2つの型は互換性がありません。しかし、サブエフェクトのおかげで、Flix は最初の分岐に新しいエフェクト変数 `ef` を用いた型 `Int32 -> Int32 \ ef` を与えます。これによって型推論は最初の分岐のエフェクトを `IO` に _広げる_ ことができます。したがってコンパイラは式全体を型検査できます。 +最初の分岐は型 `Int32 -> Int32 \ { }`(つまり純粋)を持つはずであり、一方で2番目の分岐は型 `Int32 -> Int32 \ { IO }` を持ちます。サブエフェクティングがなければ、`{ } != { IO }` であるためこれら2つの型は互換性がありません。しかし、サブエフェクティングのおかげで、Flix は最初の分岐に新しいエフェクト変数 `ef` を用いた型 `Int32 -> Int32 \ ef` を与えます。これによって型推論は最初の分岐のエフェクトを `IO` に _広げる_ ことができます。したがってコンパイラは式全体を型検査できます。 別の例として、次を考えます。 @@ -149,15 +149,15 @@ if (???) { x -> x + 1 } else { x -> {println(x); x + 1}} def handle(f: Unit -> a \ (ef + Throw)): a = ... ``` -ここで `handle` 関数は `Throw` エフェクトを持つ関数引数 `f` を期待します。しかし、サブエフェクトのおかげで、純粋な関数を使って `handle` 関数を呼び出すこともできます。つまり、次の通りです。 +ここで `handle` 関数は `Throw` エフェクトを持つ関数引数 `f` を期待します。しかし、サブエフェクティングのおかげで、純粋な関数を使って `handle` 関数を呼び出すこともできます。つまり、次の通りです。 ```flix def handle(x -> Throw.throw(x)) // OK。`Throw` エフェクトを持つ。 -def handle(x -> x) // OK。サブエフェクトによる。 +def handle(x -> x) // OK。サブエフェクティングによる。 def handle(x -> println(x)) // NG。handle は `IO` を許可しない。 ``` -Flix はインスタンス宣言でもサブエフェクトを許可します。 +Flix はインスタンス宣言でもサブエフェクティングを許可します。 例えば、次のトレイトを定義できます。 @@ -177,7 +177,7 @@ instance Foo[Int32] { `f` の宣言されたエフェクトは `IO` ですが、ここでの `f` の実装は純粋です(つまり、空のエフェクト集合 `{ }` を持ちます)。`{ }` は `IO` に広げることができるため、このプログラムは依然として型検査を通ります。 -しかし、Flix はトップレベル関数についてはサブエフェクトを許可しません。 +しかし、Flix はトップレベル関数についてはサブエフェクティングを許可しません。 例えば、次の関数を宣言した場合を考えます。 @@ -197,7 +197,7 @@ Flix コンパイラは次のエラーメッセージを出力します。 expression has unexpected type. ``` -まとめると、Flix は2つの場合にエフェクトの拡大を許可します。(a) ラムダ式と (b) インスタンス定義です。これを、Flix は _抽象化サイトのサブエフェクト_ と _インスタンス定義のサブエフェクト_ をサポートしている、と言います。 +まとめると、Flix は2つの場合にエフェクトの拡大を許可します。(a) ラムダ式と (b) インスタンス定義です。これを、Flix は _抽象化サイトのサブエフェクティング_ と _インスタンス定義のサブエフェクティング_ をサポートしている、と言います。