プログラミング言語 Scala Wiki
http://w.atwiki.jp/tmiya/
プログラミング言語 Scala Wiki
ja
2011-05-06T09:24:01+09:00
1304641441
-
sid-annot-a
https://w.atwiki.jp/tmiya/pages/143.html
* Scala アノテーション (Internals of Scala Annotations)
#center(){Lukas Rytz}
#center(){2010 年 1 月 27 日}
#right(){[[英語PDF >http://www.scala-lang.org/sites/default/files/sids/rytz/Wed,%202010-01-27,%2015:10/annots.pdf]]}
* 目次
1 はじめに (Introduction)
2 生成定義上のアノテーション (Annotations on synthetics)
- 2.1 フィールド、ゲッターとセッター (Fields, Getters and Setters)
- 2.2 オブジェクト (Objects)
- 2.3 トレイト (Traits)
-- 2.3.1 例 (Example)
3 内部表現 (Internal Representation)
- 3.1 型チェックの前 (Before Type-Checking)
- 3.2 型チェックの後 (After Type-Checking)
4 アノテーション探訪 (Visiting Annotations)
- 4.1 ツリー:トラバーサ/トランスフォーマ (Trees : Traverser/Transformer)
- 4.2 型:TypeMap (Types : TypeMap)
5 バイトコード中のアノテーション (Annotations in bytecode)
- 5.1 Scala アノテーション (Scala annotations)
- 5.2 Java クラスファイルアノテーション (java classfile annotations)
-- 5.2.1 Java クラスファイルアノテーションの解析 (Parsing of java classfile annotations)
6 FAQ
7 事前定義アノテーション (Pre-defined annotations)
* 1 はじめに (Introduction)
このドキュメントは Scala コンパイラにおいてアノテーションがどのように表現され、処理されるか記述しま
2011-05-06T09:24:01+09:00
1304641441
-
sid-earlydef-a
https://w.atwiki.jp/tmiya/pages/142.html
* 事前初期化メンバー定義 (Early Member Definitions)
&bold(){Copyright c 2008-2009, Ingo Maier & Anders Bach Nielsen}
#right(){[[英語PDF >http://www.scala-lang.org/sites/default/files/sids/rytz/Wed,%202010-01-27,%2015:10/annots.pdf]]}
* 抄録 (Abstract)
このドキュメントは、ミックスイン合成時のオブジェクト初期化という難題に対処する、事前初期化子(early initializers)と抽象事前初期化メンバー(abstract early members)に関する完全なセマンティクススを提案します。
* 目次
1 モチベーション (Motivation)
- 1.1 目標 (Goals)
- 1.2 構文変更 (Syntax change)
-- 1.2.1 抽象事前初期化メンバー (Abstract early members)
-- 1.2.2 コンテキスト (Context)
-- 1.2.3 コンストラクタパラメータとの比較 (Comparison to constructor parameters)
-- 1.2.4 クラス中の抽象事前初期化メンバー (abstract early members in classes)
-- 1.2.5 初期化の順番 (Initialization Order)
-- 1.2.6 オーバーライド解決 (Overriding resolution)
-- 1.2.7 未解決問題 : メンバー昇格 (Open question :Member promotion)
- 1.3 この提案書の範囲を越えた将来の目標 (Future goals that extend beyond this proposal)
2 言語仕様変更 (Language specification changes)
- 2.1 SLS 5.1 節
-- 2.1.1 SLS 5.1.1 節
-- 2.1.2 SLS 5.1.3 節
-- 2.1.3 SLS 5.1.4 節
2011-05-02T09:36:19+09:00
1304296579
-
actor-short-tuto
https://w.atwiki.jp/tmiya/pages/141.html
* Scala アクター:簡易チュートリアル
(Scala Actors: A Short Tutorial)
By phaller
Created 2007-05-24, 08:26
** はじめに (Introduction)
マルチコアプロセッサの到来で並行プログラミングは不可欠になりました。並行性に関する Scala の主要な構文はアクターです。アクターは基本的に、メッセージ交換で通信する並行プロセスです。アクターは、メッセージ送信に関連するメソッドを起動する、アクティブなオブジェクトの形態と見ることもできます。
Scala アクターライブラリは、同期、非同期メッセージ送信の両方を提供します(前者は、複数の非同期メッセージ交換によって実装されます)。さらに、アクターは、リクエストを非同期に処理するフューチャ(*1)を使って通信しますが、その応答を待つことを可能にする表現(フューチャ)を返します。
このチュートリアルの主な目的は、すぐにコンパイルできて Scala 2.4 以降で実行できる、いくつかの完全なサンプルプログラムをウォークスルーすることです。
(*1)訳注:フューチャについては [[Scala By Example 17.3参照>Example17.3]]
** 最初の例 (First Example)
最初の例は、一連のメッセージを交換して終了する 2 つのアクターから成ります。最初のアクターは "ping" メッセージを 2 番目のアクターに送り、するとそれは "pong" メッセージを返送します。( 各受信 "ping"メッセージ に 1 つの "pong" メッセージ)。
はじめにアクターによって送受信されるメッセージを定義します。この場合、シングルトンオブジェクトが使えます(より先進的なプログラムでは、メッセージをパラメータ化します)。パターンマッチィングを使いたいので、各メッセージは case object (ケースオブジェクト)です:
case object Ping
case object Pong
case object Stop
ping アクターは、pong アクターに Ping メッセージを送ることで交換処理を開始します。P
2011-04-14T21:03:23+09:00
1302782603
-
28etc-a
https://w.atwiki.jp/tmiya/pages/140.html
* その他の資料
本家にあるドキュメントをいくつか訳したものです。誤訳もありそうなので参考程度にご覧ください。断り無く編集してください。気がついたことその他は、本ページ下方に投稿してください。
- [[Scala アクター:簡易チュートリアル(Scala Actors: A Short Tutorial) >actor-short-tuto]] &space(2)[[: 原ページ >http://www.scala-lang.org/node/242]]  (br,4)参考:Scala 2.8 アクター API ( ttp://eed3si9n.github.com/scala-actors-doc-ja )
- 2.8 関連
-- [[パッケージオブジェクト (Package Objects)>28-pkgobj-a]] &space(2)[[: 原ページ >http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html#]]
-- [[チェインされたパッケージ節 (Chained Package Clauses)>28-chainedpkg-a]] &space(2)[[: 原ページ : >http://www.scala-lang.org/docu/files/package-clauses/packageclauses.html#]]
--------
#comment()
2011-04-14T09:35:45+09:00
1302741345
-
28-chainedpkg-a
https://w.atwiki.jp/tmiya/pages/139.html
* チェインされたパッケージ節 (Chained Package Clauses)
&bold(){Martin_Odersky}
&bold(){2010 年 9 月 7 日}
もしあなたが既にいくつかの大規模な Scala 2.8 プログラムを見たことがあるなら、ソースファイルが時々、次のような複数のパッケージ節の列から始まるのを見て当惑したかもしれません。:
package org.myproject
package tests
...
この意味は何でしょうか? 実はこれは、次のような 2 段にネストしたパッケージ節を書くこととまったく同じです。:
package org.myproject {
package tests {
...
}
}
ネストしたパッケージ節は全く正しいのですが、それほど頻繁には Scala で使われません。記法が単一のあるいはチェインされたパッケージ節よりもずっとヘビーだからです。その利点は、パッケージのネスト構造を明示するということです。しかし Scala 2.8 以前は、たいていのプログラマーは、次のような単一のパッケージ節を選んでいました。:
package org.myproject.tests
...
- &link_anchor(what){変わったこと}
- &link_anchor(why){なぜ変えたか?}
- &link_anchor(change){変更のまとめ}
- &link_anchor(migrating){新スキームへの移行}
- &link_anchor(force){慣習の力}
- &link_anchor(version){バージョン番号}
- &link_anchor(acknow){謝辞}
- &link_anchor(contents){目次}
- &link_anchor(navigation){ナビゲーション}
#center(){==========================================}
&aname(what,option=nolink){ }
** 変わったこと (Wha
2011-04-07T09:09:50+09:00
1302134990
-
28-pkgobj-a
https://w.atwiki.jp/tmiya/pages/138.html
* パッケージオブジェクト (package_objects)
&bold(){Martin_Odersky, Lex Spoon}
&bold(){September 15, 2010}
2.8 まで、あなたがパッケージに入れることができた唯一のものはクラス、トレイトとスタンドアローンのオブジェクトでした。パッケージのトップレベルには最もよく使われる定義が置いてあります。しかし Scala プログラミング言語バージョン 2.8 にできることは、それに留まりません。クラス内のどのような種類の定義も、パッケージのトップレベルに置けます。もしパッケージ全体のスコープに入れたいヘルパーメソッドがあるなら、どうぞパッケージのトップレベルの適切な場所に入れてください。
そうするには、パッケージオブジェクトの中に定義を入れます。各パッケージは 1 つのパッケージオブジェクトを持てます。パッケージオブジェクト中に置かれたどのような定義も、パッケージそれ自身のメンバーとみなされます。
次に例をあげます。まず、パッケージ gardening.fruits にクラス Fruit と 3 つの Fruit オブジェクトがあるとします。:
// ファイル gardening/fruits/Fruit.scala 中
package gardening.fruits
case class Fruit(name: String, color: String)
object apple extends Fruit("Apple", "green")
object plum extends Fruit("Plum", "blue")
object banana extends Fruit("Banana", "yellow")
今度は、パッケージ gardening 中に直接、変数 planted とメソッド showFruit を置きたいとします。次の様にします。:
// ファイル gardening/fruits/package.scala 中
package gardening
package object fruits {
val planted =
2011-04-07T09:54:37+09:00
1302137677
-
sid-lib-a
https://w.atwiki.jp/tmiya/pages/137.html
* Scala 改善ドキュメントライブラリ
Scala Improvement Documents Library
#right(){[[原ページ>http://www.scala-lang.org/sids]]}
以下は、本家の SID (Scala Improvement Documents Library) をいくつか訳したものです。誤訳もありそうなので参考程度にご覧ください。断り無く編集してください。気がついたことその他は、本ページ下方に投稿してください。 尚、特に Statusが draft(草案)のものは、内容が一部盛り込まれていることもあれば、全く盛り込まれていないこともあります。また、今後、下記の訳と最新英語PDFのバージョンが合致しないことも考えられます。
SID#1 Revision:7 、Date:2010-01-22、Status : active
&space(9)[[名前付き引数とデフォル引数 (Named and Default Arguments)>sid-named-a]]
SID#3 Revision:5 、Date:2010-07-20、Status : active
&space(9)[[新コレクションクラス (New Collection Classes)>sid-coll-1a]]
&space(9)参考:Scala 2.8 コレクション API  (1,br,16)( ttp://eed3si9n.github.com/scala-collections-doc-ja/collections_0.html )
&space(9)参考:Scala コレクションのアーキテクチャ  (1,br,16)( ttp://eed3si9n.github.com/scala-collections-impl-doc-ja )
SID#4 Revision:1 、Date:2009-06-02、Status : draft
&space(9)[[事前初期化メンバー定義(Early Member Definintions) >sid-earlydef-a]]
SID#5 Revision:2 、Date:2010-01-27、Status : active
&space
2011-05-02T09:24:21+09:00
1304295861
-
sid-coll-2a
https://w.atwiki.jp/tmiya/pages/136.html
&aname(coll-2a,option=nolink){ }
* 4 Scala コレクションフレームワーク
(The Scala Collections Framework)
前章では、異なる複数の種類のコレクション上に一般的に存在する、多数のコレクション操作とさらに多くのコレクション実装を列挙しました。 すべてのコレクション型に対してあらゆるコレクション操作を新たに実装することは、過度のコード重複を招きます。 そのようなコード重複は、コレクションライブラリの一部の操作を追加・修正し、他の部分でそうしなければ、時間と共に矛盾を生みます。 新しいコレクションフレームワークの重要な設計目標は、いかなる重複も避け、1 つの場所ですべての操作を定義することでした。 その設計手法は、コレクションテンプレート中でほとんどの操作を実装し、それを個々の基底クラスと実装から自由自在に継承することでした。これらテンプレートクラスは、パッケージ scala.collection.generic ですべて定義されています。 この章では、最も重要なクラスとそれらがサポートする構築原理を説明します。
** 4.1 ビルダー (Builders)
ほとんどのコレクション操作は、トラバーサルとビルダーによって実装されています。 トラバーサル(渡り歩き)は Traversable の foreach メソッドによって処理され、新しいコレクションの構築はクラス Builder のインスタンスによって処理されます。
#center(){~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
package scala.collection.generic
class Builder[-Elem, +To] {
def +=(elem: Elem): this.type
def result(): To
def clear()
def mapResult(f: To => NewTo): Builder[Elem, NewTo] = ...
}
#center(){
2011-04-13T20:55:37+09:00
1302695737
-
sid-coll-1a
https://w.atwiki.jp/tmiya/pages/135.html
&aname(coll-1a,option=nolink){ }
* Scala 2.8 コレクション
#center(){Scala 2.8 Collections}
#center(){Martithe classdersky, EPFL}
#center(){2010 年 7 月 20 日}
#right(){[[英語PDF >http://www.scala-lang.org/sites/default/files/sids/admin/Tue,%202010-07-20,%2010:39/collections.pdf]]}
* 1 はじめに
Scala 2.8 は、コレクションライブラリを大きく再設計しています。このペーパーはそれらの API とアーキテクチャを記述しています。
&bold(){謝辞}
複数の人により、コレクション設計は重要な方法を使って具体化されました。 新しいライブラリはそういった貢献なしでは存在しません。 Matthias Zenger は Scalaのマップ、バッファと他の型の最初のコレクションライブラリを書きました。 彼の設計判断の多くが、再設計でも生き残りました。 そのいくつかは一般化され、彼がしたミュータブル、イミュータブルなコレクションパッケージへの分割のようなことは、今はシーケンスを含めてあらゆる種類のコレクションに等しく適用されています。 Sean McDirmid はオリジナルのコレクションライブラリにprojection(投影)を加えました。 ビューという名前の下に再設計時に取り上げられた概念です。 Adriaan Moors は、Scala 中の高階型(higher-kinded types)を開発しました。その役割は、はじめに予期されたよりも最終的には小さくなったにせよ、コレクション再設計に主たる動機を与えました。Adriaan ははじめて、Scala コレクションの基本的な抽象化であるビルダー(builder)の探求もしました。 David McIver は暗黙のパラメータとしてのビルダーのアイデアを私に与え、Iterable の一般化として Traversable (渡り歩き可能) を提案しました。 Miles Sabin は、Java コレクションと Scala コレ
2011-04-13T20:44:26+09:00
1302695066
-
test
https://w.atwiki.jp/tmiya/pages/134.html
&aname(coll-1a,option=nolink){ }
* Scala 2.8 コレクション
#center(){Scala 2.8 Collections}
#center(){Martithe classdersky, EPFL}
#center(){2010 年 7 月 20 日}
#right(){[[英語PDF >http://www.scala-lang.org/sites/default/files/sids/admin/Tue,%202010-07-20,%2010:39/collections.pdf]]}
* 1 はじめに
Scala 2.8 は、コレクションライブラリを大きく再設計しています。このペーパーはそれらの API とアーキテクチャを記述しています。
&bold(){謝辞}
複数の人により、コレクション設計は重要な方法を使って具体化されました。 新しいライブラリはそういった貢献なしでは存在しません。 Matthias Zenger は Scalaのマップ、バッファと他の型の最初のコレクションライブラリを書きました。 彼の設計結果の多くが、再設計から生き残りました。 そのいくつかは一般化され、彼がしたミュータブル、イミュータブルなコレクションパッケージへの分割のようなことは、今はシーケンスを含めてあらゆる種類のコレクションに等しく適用されています。 Sean McDirmid はオリジナルのコレクションライブラリにprojection(投影)を加えました。 ビューという名前の下に再設計時に取り上げられた概念です。 Adriaan Moors は、Scala 中の高位種型(highter-kinded types)を開発しました。その役割は、はじめに予期されたよりも最終的には小さくなったにせよ、コレクション再設計に主要なモチベーションを与えました。Adriaan ははじめて、Scala コレクションの基本的な抽象化であるビルダー(builder)の探求もしました。 David McIver は暗黙のパラメータとしてのビルダーのアイデアを私に与え、Iterable の一般化として Traversable (渡り歩き可能) を提案しました。 Miles Sabin は、Java コレクショ
2011-03-30T17:47:06+09:00
1301474826