diff --git a/_ja/overviews/collections/sets.md b/_ja/overviews/collections/sets.md index f5fab5cee4..47e7a40b62 100644 --- a/_ja/overviews/collections/sets.md +++ b/_ja/overviews/collections/sets.md @@ -104,7 +104,7 @@ language: ja 可変集合は `+=` と `-=` の別形として `add` と `remove` を提供する。違いは `add` と `remove` は集合に対して演算の効果があったかどうかを示す `Boolean` の戻り値を返すことだ。 -現在の可変集合のデフォルトの実装では要素を格納するのにハッシュテーブルを使っている。不変集合のデフォルトの実装は集合の要素数に応じて方法を変えている。空集合はシングルトンで表される。サイズが4つまでの集合は全要素をフィールドとして持つオブジェクトとして表される。それを超えたサイズの不変集合は[ハッシュトライ]()として表される。 +現在の可変集合のデフォルトの実装では要素を格納するのにハッシュテーブルを使っている。不変集合のデフォルトの実装は集合の要素数に応じて方法を変えている。空集合はシングルトンで表される。サイズが4つまでの集合は全要素をフィールドとして持つオブジェクトとして表される。それを超えたサイズの不変集合は[ハッシュトライ](concrete-immutable-collection-classes.html)として表される。 このような設計方針のため、(例えば 4以下の) 小さいサイズの集合を使う場合は、通常の場合、可変集合に比べて不変集合の方が、よりコンパクトで効率的だ。集合のサイズが小さいと思われる場合は、不変集合を試してみてはいかがだろうか。 diff --git a/_ja/overviews/macros/blackbox-whitebox.md b/_ja/overviews/macros/blackbox-whitebox.md index 9fe6fd313e..30e582f473 100644 --- a/_ja/overviews/macros/blackbox-whitebox.md +++ b/_ja/overviews/macros/blackbox-whitebox.md @@ -33,7 +33,7 @@ Scala 2.11.x および Scala 2.12.x 系列では、マクロ機能が blackbox しかし、ときとして def マクロは「ただのメソッド呼び出し」という概念を超越することがある。例えば、展開されたマクロは、元のマクロの戻り値の型よりも特化された型を持つ式を返すことが可能だ。Scala 2.10 では、StackOverflow の [Static return type of Scala macros](https://stackoverflow.com/questions/13669974/static-return-type-of-scala-macros) で解説したように、そのような展開は特化された型を保持し続けることができる。 -この興味深い機能がもたらす柔軟性によって、[偽装型プロバイダ](https://meta.plasm.us/posts/2013/07/11/fake-type-providers-part-2/)、[具現化の拡張](https://github.com/scala/improvement-proposals/pull/18)、[関数従属性の具現化](/ja/overviews/macros/implicits.html#fundep_materialization)、抽出子マクロなどを可能とするけども、書かれたコードの明確さ (人にとってもマシンにとっても) が犠牲になるという側面がある。 +この興味深い機能がもたらす柔軟性によって、[偽装型プロバイダ](https://meta.plasm.us/posts/2013/07/11/fake-type-providers-part-2/)、[具現化の拡張](https://github.com/scala/improvement-proposals/pull/18)、[関数従属性の具現化](/ja/overviews/macros/implicits.html#関数従属性の具現化)、抽出子マクロなどを可能とするけども、書かれたコードの明確さ (人にとってもマシンにとっても) が犠牲になるという側面がある。 普通のメソッド同様に振る舞うマクロと戻り値の型を細別化 (refine) するマクロという決定的な区別を明確にするために、blackbox マクロと whitebox マクロという概念を導入することにした。型シグネチャに忠実に従うマクロは、振る舞いを理解するのに実装を知る必要が無い (ブラックボックスとして扱うことができる) ため、**blackbox マクロ** (blackbox macro) と呼ぶ。 Scala の型システムを使ってシグネチャを持つことができないマクロは **whitebox マクロ** (whitebox macro) と呼ぶ。(whitebox def マクロもシグネチャは持つが、これらのシグネチャは近似値でしかない) @@ -49,7 +49,7 @@ blackbox マクロと whitebox マクロの両方とも大切なことは認識 blackbox def マクロは Scala 2.10 の def マクロと異なる扱いとなる。Scala の型検査において以下の制限が加わる: 1. blackbox マクロが構文木 `x` に展開するとき、展開される式は型注釈 `(x: T)` でラップされる。この `T` は blackbox マクロの宣言された戻り値の型に、マクロ適用時に一貫性を持つように型引数やパス依存性を適用したものとなる。これによって、blackbox マクロを[型プロバイダ](https://meta.plasm.us/posts/2013/07/11/fake-type-providers-part-2/)のための手段としての利用は無効となる。 -1. Scala の型推論アルゴリズムが終わった後でも blackbox マクロの適用に未決定の型パラメータが残る場合、これらの型パラメータは普通のメソッドと同様に強制的に型推論が実行される。これによって blackbox マクロから型推論に影響を与えることが不可能となり、[関数従属性の具現化](/ja/overviews/macros/implicits.html#fundep_materialization)に使うことが無効となる。 +1. Scala の型推論アルゴリズムが終わった後でも blackbox マクロの適用に未決定の型パラメータが残る場合、これらの型パラメータは普通のメソッドと同様に強制的に型推論が実行される。これによって blackbox マクロから型推論に影響を与えることが不可能となり、[関数従属性の具現化](/ja/overviews/macros/implicits.html#関数従属性の具現化)に使うことが無効となる。 1. blackbox マクロの適用が implicit の候補として使われる場合、implicit 検索がそのマクロを選択するまでは展開は実行されない。これによって [implicit マクロの入手可能性を動的に計算する](https://github.com/scala/improvement-proposals/pull/18)ことが無効となる。 1. blackbox マクロの適用がパターンマッチの抽出子として使われる場合、無条件でコンパイラエラーを発生するようにして、マクロで実装されたパターンマッチングのカスタマイズを無効となる。 diff --git a/_ja/overviews/macros/bundles.md b/_ja/overviews/macros/bundles.md index c62f99e2ef..b2c4809533 100644 --- a/_ja/overviews/macros/bundles.md +++ b/_ja/overviews/macros/bundles.md @@ -21,7 +21,7 @@ Scala 2.10.x においてマクロ実装は関数として表されている。
マクロバンドルは、マクロ実装を diff --git a/_ja/overviews/macros/implicits.md b/_ja/overviews/macros/implicits.md index 619997501d..9119b0a5a3 100644 --- a/_ja/overviews/macros/implicits.md +++ b/_ja/overviews/macros/implicits.md @@ -86,7 +86,6 @@ Scala implicit の標準機能である複数のパラメータや重複した この場合、必須のインスタンスである `Showable[Int]` は先に定義した具現化マクロによって生成される。つまり、マクロを implicit にすることで型クラスインスタンスの具現化を自動化すると同時にマクロを使わない implicit もシームレスに統合することができる。 - ## 関数従属性の具現化 diff --git a/_ja/overviews/macros/overview.md b/_ja/overviews/macros/overview.md index 02997905c9..ff18d7f2b6 100644 --- a/_ja/overviews/macros/overview.md +++ b/_ja/overviews/macros/overview.md @@ -214,7 +214,6 @@ Scala コードの生成については[リフレクションの概要](https:// このシナリオは前節で説明したとおりだ。つまり、マクロとそれを使用するコードを別に呼び出した `scalac` によってコンパイルすることで、全てうまくいくはずだ。REPL をつかっているなら、さらに都合がいい。なぜなら REPL はそれぞれの行を独立したコンパイルとして扱うため、マクロを定義してすぐに使うことができる。 - ### Maven か sbt を用いてマクロを使う 本稿での具体例では最もシンプルなコマンドラインのコンパイルを使っているが、マクロは Maven や sbt などのビルドツールからも使うことができる。完結した具体例としては [https://github.com/scalamacros/sbt-example](https://github.com/scalamacros/sbt-example) か [https://github.com/scalamacros/maven-example](https://github.com/scalamacros/maven-example) を見てほしいが、要点は以下の 2点だ: @@ -321,7 +320,6 @@ Scala コードの生成については[リフレクションの概要](https:// [SI-6910](https://issues.scala-lang.org/browse/SI-6910) に記述されているとおり、現時点ではある位置から複数の警告やエラーの報告はサポートされていないことに注意してほしい。そのため、ある位置で最初のエラーか警告だけが報告され他は失くなってしまう。(ただし、同じ位置で後から報告されてもエラーは警告よりも優先される) - ### より大きなマクロを書く マクロ実装が実装メソッドの本文におさまりきらなくなって、モジュール化の必要性が出てくると、コンテキストパラメータを渡して回る必要があることに気付くだろう。マクロを定義するのに必要なもののほとんどがこのコンテキストにパス依存しているからだ。 diff --git a/_ja/overviews/macros/paradise.md b/_ja/overviews/macros/paradise.md index 93d610a649..7c897ff357 100644 --- a/_ja/overviews/macros/paradise.md +++ b/_ja/overviews/macros/paradise.md @@ -35,7 +35,7 @@ title: マクロパラダイス 詳細は[機能の一覧を](/ja/overviews/macros/roadmap.html)参照。 具体例に関しては [https://github.com/scalamacros/sbt-example-paradise](https://github.com/scalamacros/sbt-example-paradise) を参照してほしいが、要点をまとめると、マクロパラダイスを使うには以下の二行をビルド定義に加えるだけでいい -(すでに[sbt を使っている](/ja/overviews/macros/overview.html#using_macros_with_maven_or_sbt)ことが前提だが): +(すでに[sbt を使っている](/ja/overviews/macros/overview.html#maven-か-sbt-を用いてマクロを使う)ことが前提だが): resolvers += Resolver.sonatypeRepo("releases") diff --git a/_ja/overviews/macros/roadmap.md b/_ja/overviews/macros/roadmap.md index 5be65f30df..9300672ba6 100644 --- a/_ja/overviews/macros/roadmap.md +++ b/_ja/overviews/macros/roadmap.md @@ -27,7 +27,7 @@ title: ロードマップ | [def マクロ](/ja/overviews/macros/overview.html) | Yes | Yes 1 | Yes | Yes 1 | Yes | Yes 1 | | [マクロバンドル](/ja/overviews/macros/bundles.html) | No | No 1 | Yes | Yes 1 | Yes | Yes 1 | | [implicit マクロ](/ja/overviews/macros/implicits.html) | Yes (since 2.10.2) | Yes 1 | Yes | Yes 1 | Yes | Yes 1 | -| [関数従属性の具現化](/ja/overviews/macros/implicits.html#fundep_materialization) | No | Yes 2 | Yes | Yes 1 | Yes | Yes 1 | +| [関数従属性の具現化](/ja/overviews/macros/implicits.html#関数従属性の具現化) | No | Yes 2 | Yes | Yes 1 | Yes | Yes 1 | | [型プロバイダ](/ja/overviews/macros/typeproviders.html) | 一部サポート (see docs) | Yes 2 | 一部サポート (see docs) | Yes 2 | 一部サポート (see docs) | Yes 2 | | 準クォート | No | Yes 1 | Yes | Yes 1 | Yes | Yes 1 | | [型マクロ](/ja/overviews/macros/typemacros.html) | No | No | No | No | No | No | diff --git a/_ja/overviews/reflection/overview.md b/_ja/overviews/reflection/overview.md index 92b0673a22..e7d28c55fd 100644 --- a/_ja/overviews/reflection/overview.md +++ b/_ja/overviews/reflection/overview.md @@ -54,7 +54,6 @@ Scala の式を抽象構文木へと**レイファイ** (reify) する機能 (3) ### 具体例 - #### ランタイム型のインスペクション (実行時におけるジェネリック型も含む) 他の JVM言語同様に、Scala の型はコンパイル時に**消去** (erase) される。