SlideShare a Scribd company logo
1 of 41
Download to read offline
“ネクストJava”の大本命!?
マルチパラダイム言語「Scala」


2009年8月6日
浅海智晴
匠Lab、edge2.cc、日本Javaユーザグループ
自己紹介
SimpleModeler
  Scala DSLを用いたモデル・コンパイラ
  Scala DSLで記述したモデルからクラス図、ステートマシーン
  図やGoogle App Engineのアプリケーションを生成
  http://code.google.com/p/simplemodeler/
  Scalaプログラミング歴1年強
edge2.cc
  クラウド・コンピューティングの実証研究プロジェクト
  http://www.edge2.cc
匠Lab
  匠の技でビジネスとITを繋げる
  http://www.takumi-lab.co.jp/
  要求開発×モデル駆動開発×クラウド・コンピューティング
内容

Scalaとは
Scala文法ハイライト
Scalaの応用分野
Scalaとは
Scalaとは

 Scalable Language
 「純粋」オブジェクト指向&「本格」関数型の
 ハイブリッド言語
 現時点のプログラミング言語の便利機能を
 貪欲に吸収
 体感的には…
  使いやすいJava
  関数型までついてる
Scalaは巨大?
 言語仕様はJavaの方が大きいかも
  『Programming in Scala』 776ページ
  『Java Programming Language第4版』 928ページ
  『Java Programming Language第1版』 333ページ
 クラスライブラリ
  Scala固有のクラスライブラリ
    言語と緊密な関係を持つもの
    Scalaならではの応用
  その他はJavaと共通
 実行環境
  Java VM → Javaと共通
プログラミング言語の歴史
手続き型/C→OO/Java→関数型/Scala?
    1985                    1995                      2009




                               ハ ー ドウ ェ ア 性 能 の 向 上




    C                       Java                  Scala ?




           オ ブ ジ ェ ク ト指 向              関数型

              ク ラ ス /オ ブ ジ ェ ク ト               高階関数
                     継承                        遅延評価
手続き型・オブジェクト指向・関数型

             フレームワーク                      フレームワーク




                  呼び出し    クラス/オブジェクト            呼び出し
プログラム本体
                              継承


                                          プログラム本体
             プログラム本体                                      高階関数
                                             アルゴリズム
                                                          遅延評価


     呼び出し          呼び出し                          呼び出し




サブルーチン       サブルーチン                        サブルーチン




手続き型言語      オブジェクト指向言語                 関数型(+オブジェクト指向言語)
関数型言語の2つの側面
関数型言語
 関数が基本的な構成要素となる言語
 数学のバックボーン(ラムダ計算)を持つプログラミング言
 語
数学を基盤にすることで、プログラムの処理内容の
証明が可能
 研究継続中?
 並列処理では重要な意味を持つかもしれない
高階関数、遅延評価の機構によってプログラム断
片の再利用率が飛躍的に高まる
 実用言語としては、これが重要
Scalaの特徴
                                                                                         Smalltalk


             C                  C++    Java
                                                                               統一        Ruby
                                                                             オブジェクト
                                                          オブジェクト指向            モデル
                        ML
                                                                                                 Algol
                                              C#
                        SML                                                    普遍
                                                                             ネスティング              Simula

                        Ocaml
                                                                                                     Beta

                        F#
                                              関数型                                                gbeta

                              Haskel                                          統一アクセス
            Ruby
                                                                                                        Effiel

Smalltalk

                                       オブジェクト指向&
 Python                                   関数型                        Scala    アクター基盤                 Erlang
                                                                              並行ライブラリ

 Pizza
                                                                                                      Smalltalk


  Nice
                                                                                                      Iswim

 Multi-Java                                                                   スケーラビリティ
                                                    abstract type                                    Lisp

     OCaml

                                                        trait                                         C++
                   F#


                   PLT-Scheme
                                                      extractor
Scalaの言語機能
                  Scala
                               スクリプト言語

                 コンパイラ
                               インタープリタ
     Java       インタープリタ
                                動的型付
    C文法          静的型付
                             統一オブジェクト・モデル
                               テキスト指向
   コンパイラ          型推論
                             使いやすいコレクション
                                クロージャ
   静的型付        オブジェクト指向
                              メタ・オブジェクト
                 Java VM
  オブジェクト指向
               クラス・ライブラリ

    Java VM
                業界標準API
  クラス・ライブラリ                     関数型言語

   業界標準API    統一オブジェクト・モデル
                テキスト指向          高階関数
              使いやすいコレクション       遅延評価
                 クロージャ
                                 型推論
                 高階関数
                 遅延評価
                               不変オブジェクト
                              パターン・マッチング
                不変オブジェクト
                                 モナド
               パターン・マッチング
                                 アクター
                  モナド
                  アクター


                  抽象型
                  トレイツ
                エクストラクタ
                ケース・クラス
                 暗黙変換
                XMLリテラル
              パーサー・コンビネータ
Scalaの特徴的な機能(私見best 5)
 trait(トレイツ)
    抽象クラスーα
    多重継承の問題を回避しつつ、多重継承的な機能を実現
    mix-inに使用
 for文
    モナドの文法糖衣
 チェック付き例外なし
    プログラミングが楽に!
    特に問題は感じられなかった
 match文
    パターン・マッチングがデータ構造操作でも非常に重要
    Javaプログラミングではイディオムとして繰り返し手入力が必要な処理がmatch
    文で簡明に記述
 caseクラス
    データを記述するためのクラスの記述が楽になる
    match文との連携
Scalaクラスライブラリ
 Parser Combinator
   パーサージェネレータ
   BNFを記述するScala DSL
 Actor
   アクター・モデルによる並行処理
         副作用がない関数型を活かす並行処理モデル
   Scala DSLによる専用文法
 Scala Swing
   Swing用Scala DSL
 BDD (Behavior Driven Development)
   scalatest
   http://www.artima.com/scalatest/
   BDD用Scala DSL
応用
Lift
   Webフレームワーク
Twitterメッセージ・エンジン
   RubyからScalaに変更
Apache CamelのDSL
   XML DSL (SpringのXMLコンフィグに埋め込んで使用)、
   Java DSLに続いて、Scala DSLを開発中
SimpleModeler
   浅海が開発中
   Scala DSLで記述したモデルからクラス図、ステートマシーン
   図やGoogle App Engine/Javaのアプリケーションを生成
   http://code.google.com/p/simplemodeler/
なぜScalaなのか
 ハードウェアの進化
  スクリプト言語と関数型の機能を実用言語の言語機能と
  して利用することが可能になった。
 Webの台頭
  Web指向、テキスト指向のプログラミング言語が必要に
  なった。
 マルチコア、クラウド・コンピューティング、DSLなど
 の新しい応用
  これらの応用に対応できるプログラミング言語が必要に
  なった。
Scala文法ハイライト
Scala文法ハイライト
for文
for (i <- 0 until 3) {
  println(i)
}

0
1
2

val list = List(1, 2, 3)
for (elem <- list) {
  println(elem)
}

0
1
2
Scala文法ハイライト
for yield文
val list = List(1, 2, 3)
val result0 = list.map(_ + 1)
println("pre = " + result0)
val result1 = list.map(elem => (elem + 1).toString)
println("use map = " + result1)
val result2 = for (elem <- list) yield
                         (elem + 1).toString
println("use for = " + result2)

pre = List(2, 3, 4)
use map = List(2, 3, 4)
use for = List(2, 3, 4)
Scala文法ハイライト
Extractor&正規表現
val extractor = """(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d)""".r
val extractor(yearString, monthString, dayString) =
   "2009-08-06"
val year = yearString.toInt
val month = monthString.toInt
val day = dayString.toInt
val result = "%04d-%02d-%02d".format(year,
   month, day)
println(result)

2009-08-06
Scala文法ハイライト
match文
abstract class Base
class Concrete1 extends Base {
  def one = println("concrete one")
}
class Concrete2 extends Base {
  def two = println("concrete two")
}
class Concrete3 extends Base {
  def three = println("concrete three")
}

def get_base = if (true) new Concrete2 else new Concrete3
val b = get_base
b match {
  case c: Concrete1 => c.one
  case c: Concrete2 => c.two
  case c: Concrete3 => c.three
}



concrete two
Scala文法ハイライト
Extractorとmatch文
val extractor = """(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d)""".r
val ymd = "2009-08-06"
ymd match {
  case extractor("2008", _, _) => println("2008")
  case extractor("2009", _, _) => println("2009")
  case extractor("2010", _, _) => println("2010")
  case _ => println("Unkonwn")
}

2009
Scala文法ハイライト
ケースクラスとmatch文
case class YearMonthDay(year: Int, month: Int, day: Int)

val ymd = YearMonthDay(2009, 8, 6)
ymd match {
  case YearMonthDay(2008, _, _) => println("2008")
  case YearMonthDay(2009, _, _) => println("2009")
  case YearMonthDay(2010, _, _) => println("2010")
  case _ => println("Unkonwn")
}


2009
Scala文法ハイライト
クロージャ
val closures = for (index <- 0 until 3) yield
     { (number: Int) => number + index }
println(closures)
for (closure <- closures) {
  val result = closure(100)
  println(result)
}

RangeM(<function>, <function>, <function>)
100
101
102
Scala文法ハイライト
XML
val cities =
   <cities><city>Tokyo</city><city>Osaka</city></cities>
val names = for (city <- cities ¥¥ "city") yield city.text
println(names)
val cities2 = <cities>{
 for (city <- names) yield <city>{ city }</city>
}</cities>
println(cities2)


ArrayBufferRO(Tokyo, Osaka)
<cities><city>Tokyo</city><city>Osaka</city></cities>
Scalaの応用分野
マルチコア

単一のCPU筐体の中に複数のCPUコアが
同梱されているプロセッサ。
 アプリケーション・プログラムの観点からはマル
 チ・プロセッサとしてみえる。
性能向上はクロック数の向上ではなく、使用
するコア数の増加によって達成する。
 並列処理を行うアプリケーションでないと、性能
 が向上しない。
マルチコア
       関数による副作用を伴わない計算

      手続き               手続き
                                         関数             関数
      メソッド              メソッド


                                               変換・複写
                                     不変データ             不変データ

              可変データ
                                              不変データ
                                                        変換・複写
複数の関数がメモリを
                        変更がない部分は共有する。          不変データ
 共有するので競合が                                                関数は不変データを変換しながら
                              不変データなので
      発生する                                                複写したデータを他の関数に受け
                        データが破壊されることはない
                                                          渡す

               手続き
                                                 関数
               メソッド


               手続き型
                                               純粋関数型
             オブジェクト指向
マルチコア
  共有メモリ方式とメッセージパッシング方式
                                                                                              メモリはスレッドが
                                                                                              占有するので、 競
                                                                            メモリ               合が発生しない




     スレッド                           スレッド             スレッド                 スレッド

                                                               メッセージ
                                                                ボックス
                                                                                      メッセージ
                                                                                       ボックス
                 メモリ

                                            メッセージボックスを経由したメッ
                                           セージ交換によって非同期処理を                スレッド
複数のスレッドが
                                                       実現する
メモリを共有する
ので競合が発生
      する         スレッド
                                                                           メモリ


                        Javaモニタ
       共有メモリ方式      java.util.concurrent            メッセージパッシング方式       scala.actors
                      scala.concurrent
クラウド・コンピューティング
Webプラットフォーム
 テキスト指向、XML指向
スケーラビリティ
 パブリックなインターネット空間上に事実上無尽
 蔵に用意されたCPUやストレージなどのリソース
 を活用
 非同期、並列、分散
分散アプリケーション
 非同期、並列、分散
アプリケーション・アーキテクチャ
                 プレゼンテーション層
                                                クラウド・アプリケーション
        クライアント側           サーバ側                                     アプリケーションの論理的な構成は
                                                                   従来のものと変わらない
                                                 プレゼンテーション層
           GUI            サービス

                                                   ビジネス層

           RIA                Web
                                                   ドメイン層


                                                    統合層           アクセス方式1:ローカル・データベース
                                                                  アプリケーションが占有するデータはロー
                                                                  カルデータベースに格納する。

           アクセス方式5:REST
  Webページを手繰って情報を取得する
                                                   統合層
                                                                            データベース




                                                                                 アクセス方式2: 手続き呼出し
                                                                                 性能特性、 障害特性がローカル
                  REST                                                           の手続き呼び出しよりも脆弱。

                                                 メッセージ・キュー           サービス

                                      分散ストレージ




    サービス




                          サービス                      サービス        アクセス方式3: メッセージング
                                                                分散環境での連携に適応する特性をもつ。




                                    アクセス方式4: 分散ストレージ
                                    通常のデータベースのような更新処理は難し
                                    い。
クラウド・アプリケーションの構成例
                           マスターデータなど更新頻度が低い
                           データは分散ストレージで配布して                   結果を直接知りたい場合には、 手
                                    直接参照する。                   続き呼び出しで同期型の連携を
                                                       分散     行う。
                                                      ストレージ   この形式の連携を行うとスケーラ
 プレゼンテーションの段階ででき                                              ビリティが低くなる。
 ることをやっておくと、 スケールア
ウトの効果によってスケーラビリテ
           ィが高まる。
 外部サービスからRESTを用いて              クラウド・アプリケーション
                                                                                   サービス利用の主力はメッセージ
 情報を取得するのが典型的な利
                                                                                   である。 この形式の連携を行うと
              用方法。   プレゼンテーション                 サービス                サービス            スケールアウトによってスケーラビ
                                                                                   リティを確保できる。




                                                                   サービス          バックエンドのサービス群もメッセ
                                                メッセージ・キュー
                        REST                                                     ージによって連携。




                                                  サービス           メッセージ・キュー

                                                                                          同期通信
                       サービス

                                                                                        メッセージ送信

                                                                                        メッセージ配信


                                                 データベース
                     データベースをアクセスするスコ
                     ープはサービスに閉じておくのが
                                 よい。
クラウド・コンピューティングとScala
 テキスト指向、XML指向
  Scalaの得意とするところ
    生文字リテラル、正規表現、パターン・マッチング、
    Extractor
    XMLリテラル、パス検索、パターン・マッチング
 非同期・並列・分散
  Javaの並列処理機能
     スレッド、モニタ、並列ライブラリ
  関数型言語
     不変オブジェクト
     モナド
  アクター・ライブラリ
DSL(Domain Specific Language)
 応用分野、技術分野の領域(ドメイン)ごとに専用の言語を用意する
   簡潔で過不足のない適切なモデルを記述できる
 テキストDSL
   UMLのようなグラフィカル言語は、モデルを記述する作業が煩雑
   プログラミング言語のようにテキストでモデルを記述すると効率がよい
 内部DSL
   ホスト言語となるプログラミング言語上にDSLを構築
   Scalaはホスト言語に最適の文法を備えている
      スケーラブル
 外部DSL
   parser combinator
      Scalaが提供するパーサー・ジェネレータ
      専用DSLでBNF相当の文法を定義
モデル駆動開発&コンポーネント
      分析           設計         実装



             DSL           自動生成      コンポーネント

      OO分析

                   OO設計       OO実装   コンポーネント




DSL                 自動生成             コンポーネント




             DSL           自動生成      コンポーネント

      OO分析

                   OO設計       OO実装   コンポーネント
DSL
DSLの例
case class App20090505() extends 施設利用申請書 {
 会員番号 = 123456
 名前 = "Scala太郎"
 理由(<div>Scalaの勉強会を行うため。</div>)
 理由("Liftも少し取り上げるかもしれません。")

  申請 {
    施設(20090601, 1300, 1400, 講堂) 理由は <div>初日は講堂で講演したいか
     ら</div>
    同時利用(20090602, 1000, 1200) {
     施設(第1会議室)
     施設(第2会議室) 理由は "第1会議室だけだと足りないから"
     設備(ホワイトボード) 個数は 2 理由は "会議室ごとに利用"
    } 理由は """両方同時に利用希望します。
片方だけだと入りきらないので。"""
  }
}
DSLから生成したHTML
DSL
変換処理
       オブジェクト
                       オブジェクト



                変換処理




        XML             XML




       テキスト            テキスト
アプリケーション・フレームワーク
APIからDSLへ
  旧来のAPI:手続き呼び出し、抽象クラスの継承
  DSLを用いることで、簡潔、適切にフレームワークの提供する
  機能を利用することができる
  Springに対するGrails
    Groovyを用いたSpring DSLと考えることで、アーキテクチャ
    上の位置付けが理解できる
  Apache Camel
    インテグレーションフレームワーク
    XML DSL、Java DSLに続いてScala DSLを開発中
ScalaとJavaの協業
  アプリケーション・フレームワークはScala
  コンポーネントはScalaまたはJava
  アプリケーションはJavaまたはGroovy(JRuby, Jython)
アプリケーション・フレームワーク
Scalaの使いどころ

              アプリケーション            Java    API : Application Programming Interface
                                 Groovy   DSL : Domain Specific Language
                                          SPI : Service Provider Interface
        API   Java         DSL   Scala


構成管理
               フレームワーク
 定義
                                 Scala
Scala

                     SPI          Java



               コンポーネント           Scala
                                 Java
アプリケーション・フレームワーク
開発の流れ
                         設計                 製造          組立て       運用管理


ビジネス・モデリング
                 分析    設計   実装   テスト   設計   実装   テスト   組立   テスト   配備   管理




                 分析    設計   実装   テスト   設計   実装   テスト




                                       設計   実装   テスト




                                       設計   実装   テスト




                       フレームワーク          フレームワーク




             コンポーネント                    コンポーネント
まとめ
JavaプログラマにとってのScala

 まず最初は便利なJavaとして使っても十分
 に有益
  浅海の体感では3倍の生産性
  最初はScala特有の難しい(そして便利な)機能
  は使わなくてもよい
 これから興隆する新しい技術はScalaで攻
 めるのが得策
  新技術分野のための機能が満載
  マルチコア、クラウド・コンピューティング、DSL

More Related Content

Viewers also liked

Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and designTomoharu ASAMI
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々ScalaプログラミングTomoharu ASAMI
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Tomoharu ASAMI
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional ProgrammingTomoharu ASAMI
 
Scalaでプログラムを作りました
Scalaでプログラムを作りましたScalaでプログラムを作りました
Scalaでプログラムを作りましたTomoharu ASAMI
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDoxTomoharu ASAMI
 
Scala in Model-Driven development for Apparel Cloud Platform
Scala in Model-Driven development for Apparel Cloud PlatformScala in Model-Driven development for Apparel Cloud Platform
Scala in Model-Driven development for Apparel Cloud PlatformTomoharu ASAMI
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalazTomoharu ASAMI
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingTomoharu ASAMI
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考えるオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考えるTomoharu ASAMI
 
Prefer Cloud Platform - ビジョン、アーキテクチャ
Prefer Cloud Platform - ビジョン、アーキテクチャPrefer Cloud Platform - ビジョン、アーキテクチャ
Prefer Cloud Platform - ビジョン、アーキテクチャTomoharu ASAMI
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチTomoharu ASAMI
 
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。なおき きしだ
 

Viewers also liked (15)

Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
 
楽々Scalaプログラミング
楽々Scalaプログラミング楽々Scalaプログラミング
楽々Scalaプログラミング
 
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
 
Everforth AWS
Everforth AWSEverforth AWS
Everforth AWS
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
Scalaでプログラムを作りました
Scalaでプログラムを作りましたScalaでプログラムを作りました
Scalaでプログラムを作りました
 
Scala DSLの作り方
Scala DSLの作り方Scala DSLの作り方
Scala DSLの作り方
 
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox 文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
文書をプログラムにする技術 - SimpleModeler + Mindmap & SmartDox
 
Scala in Model-Driven development for Apparel Cloud Platform
Scala in Model-Driven development for Apparel Cloud PlatformScala in Model-Driven development for Apparel Cloud Platform
Scala in Model-Driven development for Apparel Cloud Platform
 
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
 
Scalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive ProgrammingScalaz-StreamによるFunctional Reactive Programming
Scalaz-StreamによるFunctional Reactive Programming
 
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考えるオブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ  クラウド時代のモデリングを考える
オブジェクト・関数型プログラミングからオブジェクト・関数型分析設計へ クラウド時代のモデリングを考える
 
Prefer Cloud Platform - ビジョン、アーキテクチャ
Prefer Cloud Platform - ビジョン、アーキテクチャPrefer Cloud Platform - ビジョン、アーキテクチャ
Prefer Cloud Platform - ビジョン、アーキテクチャ
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
 

Similar to JavaWorld Day 2009 Scala

Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Asami Abe
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみてKota Mizushima
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!Yukei Wachi
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題Kota Mizushima
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning TipsKota Mizushima
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発Kota Mizushima
 
Next Language Scala
Next Language ScalaNext Language Scala
Next Language Scalapengin01
 
Ruby Extended Library
Ruby Extended LibraryRuby Extended Library
Ruby Extended LibraryAkio Tajima
 
第一回社内 Scala 勉強会(一部抜粋)
第一回社内 Scala 勉強会(一部抜粋)第一回社内 Scala 勉強会(一部抜粋)
第一回社内 Scala 勉強会(一部抜粋)lyrical_logical
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門Yoshimura Soichiro
 
こわくないScala
こわくないScalaこわくないScala
こわくないScalaFScoward
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.jsYuto Suzuki
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc賢太郎 前多
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用Takuya Iwatsuka
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしいke-m kamekoopa
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 

Similar to JavaWorld Day 2009 Scala (20)

Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
Scala再入門 @2014/02/08 Scala関西ビギナーズ第3回
 
Scalaノススメ
ScalaノススメScalaノススメ
Scalaノススメ
 
Scala Daysに行ってみて
Scala Daysに行ってみてScala Daysに行ってみて
Scala Daysに行ってみて
 
ざっくり DDD 入門!!
ざっくり DDD 入門!!ざっくり DDD 入門!!
ざっくり DDD 入門!!
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Scala Performance Tuning Tips
Scala Performance Tuning TipsScala Performance Tuning Tips
Scala Performance Tuning Tips
 
SimpleModeler
SimpleModelerSimpleModeler
SimpleModeler
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Next Language Scala
Next Language ScalaNext Language Scala
Next Language Scala
 
Ruby Extended Library
Ruby Extended LibraryRuby Extended Library
Ruby Extended Library
 
第一回社内 Scala 勉強会(一部抜粋)
第一回社内 Scala 勉強会(一部抜粋)第一回社内 Scala 勉強会(一部抜粋)
第一回社内 Scala 勉強会(一部抜粋)
 
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
 
こわくないScala
こわくないScalaこわくないScala
こわくないScala
 
【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js【LT】 怖くない恐怖のScala.js
【LT】 怖くない恐怖のScala.js
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
Akkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka docAkkaの翻訳みんなでやろう Let's translate akka doc
Akkaの翻訳みんなでやろう Let's translate akka doc
 
SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用SpringOne 2016 報告 Reactive APIの設計・実装・使用
SpringOne 2016 報告 Reactive APIの設計・実装・使用
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 

More from Tomoharu ASAMI

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】Tomoharu ASAMI
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】Tomoharu ASAMI
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】Tomoharu ASAMI
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】Tomoharu ASAMI
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】Tomoharu ASAMI
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】Tomoharu ASAMI
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】Tomoharu ASAMI
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】Tomoharu ASAMI
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】Tomoharu ASAMI
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】Tomoharu ASAMI
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】Tomoharu ASAMI
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】Tomoharu ASAMI
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】Tomoharu ASAMI
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】Tomoharu ASAMI
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】Tomoharu ASAMI
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】Tomoharu ASAMI
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】Tomoharu ASAMI
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】Tomoharu ASAMI
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】Tomoharu ASAMI
 

More from Tomoharu ASAMI (20)

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
 

Recently uploaded

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

JavaWorld Day 2009 Scala

  • 2. 自己紹介 SimpleModeler Scala DSLを用いたモデル・コンパイラ Scala DSLで記述したモデルからクラス図、ステートマシーン 図やGoogle App Engineのアプリケーションを生成 http://code.google.com/p/simplemodeler/ Scalaプログラミング歴1年強 edge2.cc クラウド・コンピューティングの実証研究プロジェクト http://www.edge2.cc 匠Lab 匠の技でビジネスとITを繋げる http://www.takumi-lab.co.jp/ 要求開発×モデル駆動開発×クラウド・コンピューティング
  • 5. Scalaとは Scalable Language 「純粋」オブジェクト指向&「本格」関数型の ハイブリッド言語 現時点のプログラミング言語の便利機能を 貪欲に吸収 体感的には… 使いやすいJava 関数型までついてる
  • 6. Scalaは巨大? 言語仕様はJavaの方が大きいかも 『Programming in Scala』 776ページ 『Java Programming Language第4版』 928ページ 『Java Programming Language第1版』 333ページ クラスライブラリ Scala固有のクラスライブラリ 言語と緊密な関係を持つもの Scalaならではの応用 その他はJavaと共通 実行環境 Java VM → Javaと共通
  • 7. プログラミング言語の歴史 手続き型/C→OO/Java→関数型/Scala? 1985 1995 2009 ハ ー ドウ ェ ア 性 能 の 向 上 C Java Scala ? オ ブ ジ ェ ク ト指 向 関数型 ク ラ ス /オ ブ ジ ェ ク ト 高階関数 継承 遅延評価
  • 8. 手続き型・オブジェクト指向・関数型 フレームワーク フレームワーク 呼び出し クラス/オブジェクト 呼び出し プログラム本体 継承 プログラム本体 プログラム本体 高階関数 アルゴリズム 遅延評価 呼び出し 呼び出し 呼び出し サブルーチン サブルーチン サブルーチン 手続き型言語 オブジェクト指向言語 関数型(+オブジェクト指向言語)
  • 9. 関数型言語の2つの側面 関数型言語 関数が基本的な構成要素となる言語 数学のバックボーン(ラムダ計算)を持つプログラミング言 語 数学を基盤にすることで、プログラムの処理内容の 証明が可能 研究継続中? 並列処理では重要な意味を持つかもしれない 高階関数、遅延評価の機構によってプログラム断 片の再利用率が飛躍的に高まる 実用言語としては、これが重要
  • 10. Scalaの特徴 Smalltalk C C++ Java 統一 Ruby オブジェクト オブジェクト指向 モデル ML Algol C# SML 普遍 ネスティング Simula Ocaml Beta F# 関数型 gbeta Haskel 統一アクセス Ruby Effiel Smalltalk オブジェクト指向& Python 関数型 Scala アクター基盤 Erlang 並行ライブラリ Pizza Smalltalk Nice Iswim Multi-Java スケーラビリティ abstract type Lisp OCaml trait C++ F# PLT-Scheme extractor
  • 11. Scalaの言語機能 Scala スクリプト言語 コンパイラ インタープリタ Java インタープリタ 動的型付 C文法 静的型付 統一オブジェクト・モデル テキスト指向 コンパイラ 型推論 使いやすいコレクション クロージャ 静的型付 オブジェクト指向 メタ・オブジェクト Java VM オブジェクト指向 クラス・ライブラリ Java VM 業界標準API クラス・ライブラリ 関数型言語 業界標準API 統一オブジェクト・モデル テキスト指向 高階関数 使いやすいコレクション 遅延評価 クロージャ 型推論 高階関数 遅延評価 不変オブジェクト パターン・マッチング 不変オブジェクト モナド パターン・マッチング アクター モナド アクター 抽象型 トレイツ エクストラクタ ケース・クラス 暗黙変換 XMLリテラル パーサー・コンビネータ
  • 12. Scalaの特徴的な機能(私見best 5) trait(トレイツ) 抽象クラスーα 多重継承の問題を回避しつつ、多重継承的な機能を実現 mix-inに使用 for文 モナドの文法糖衣 チェック付き例外なし プログラミングが楽に! 特に問題は感じられなかった match文 パターン・マッチングがデータ構造操作でも非常に重要 Javaプログラミングではイディオムとして繰り返し手入力が必要な処理がmatch 文で簡明に記述 caseクラス データを記述するためのクラスの記述が楽になる match文との連携
  • 13. Scalaクラスライブラリ Parser Combinator パーサージェネレータ BNFを記述するScala DSL Actor アクター・モデルによる並行処理 副作用がない関数型を活かす並行処理モデル Scala DSLによる専用文法 Scala Swing Swing用Scala DSL BDD (Behavior Driven Development) scalatest http://www.artima.com/scalatest/ BDD用Scala DSL
  • 14. 応用 Lift Webフレームワーク Twitterメッセージ・エンジン RubyからScalaに変更 Apache CamelのDSL XML DSL (SpringのXMLコンフィグに埋め込んで使用)、 Java DSLに続いて、Scala DSLを開発中 SimpleModeler 浅海が開発中 Scala DSLで記述したモデルからクラス図、ステートマシーン 図やGoogle App Engine/Javaのアプリケーションを生成 http://code.google.com/p/simplemodeler/
  • 15. なぜScalaなのか ハードウェアの進化 スクリプト言語と関数型の機能を実用言語の言語機能と して利用することが可能になった。 Webの台頭 Web指向、テキスト指向のプログラミング言語が必要に なった。 マルチコア、クラウド・コンピューティング、DSLなど の新しい応用 これらの応用に対応できるプログラミング言語が必要に なった。
  • 17. Scala文法ハイライト for文 for (i <- 0 until 3) { println(i) } 0 1 2 val list = List(1, 2, 3) for (elem <- list) { println(elem) } 0 1 2
  • 18. Scala文法ハイライト for yield文 val list = List(1, 2, 3) val result0 = list.map(_ + 1) println("pre = " + result0) val result1 = list.map(elem => (elem + 1).toString) println("use map = " + result1) val result2 = for (elem <- list) yield (elem + 1).toString println("use for = " + result2) pre = List(2, 3, 4) use map = List(2, 3, 4) use for = List(2, 3, 4)
  • 19. Scala文法ハイライト Extractor&正規表現 val extractor = """(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d)""".r val extractor(yearString, monthString, dayString) = "2009-08-06" val year = yearString.toInt val month = monthString.toInt val day = dayString.toInt val result = "%04d-%02d-%02d".format(year, month, day) println(result) 2009-08-06
  • 20. Scala文法ハイライト match文 abstract class Base class Concrete1 extends Base { def one = println("concrete one") } class Concrete2 extends Base { def two = println("concrete two") } class Concrete3 extends Base { def three = println("concrete three") } def get_base = if (true) new Concrete2 else new Concrete3 val b = get_base b match { case c: Concrete1 => c.one case c: Concrete2 => c.two case c: Concrete3 => c.three } concrete two
  • 21. Scala文法ハイライト Extractorとmatch文 val extractor = """(¥d¥d¥d¥d)-(¥d¥d)-(¥d¥d)""".r val ymd = "2009-08-06" ymd match { case extractor("2008", _, _) => println("2008") case extractor("2009", _, _) => println("2009") case extractor("2010", _, _) => println("2010") case _ => println("Unkonwn") } 2009
  • 22. Scala文法ハイライト ケースクラスとmatch文 case class YearMonthDay(year: Int, month: Int, day: Int) val ymd = YearMonthDay(2009, 8, 6) ymd match { case YearMonthDay(2008, _, _) => println("2008") case YearMonthDay(2009, _, _) => println("2009") case YearMonthDay(2010, _, _) => println("2010") case _ => println("Unkonwn") } 2009
  • 23. Scala文法ハイライト クロージャ val closures = for (index <- 0 until 3) yield { (number: Int) => number + index } println(closures) for (closure <- closures) { val result = closure(100) println(result) } RangeM(<function>, <function>, <function>) 100 101 102
  • 24. Scala文法ハイライト XML val cities = <cities><city>Tokyo</city><city>Osaka</city></cities> val names = for (city <- cities ¥¥ "city") yield city.text println(names) val cities2 = <cities>{ for (city <- names) yield <city>{ city }</city> }</cities> println(cities2) ArrayBufferRO(Tokyo, Osaka) <cities><city>Tokyo</city><city>Osaka</city></cities>
  • 27. マルチコア 関数による副作用を伴わない計算 手続き 手続き 関数 関数 メソッド メソッド 変換・複写 不変データ 不変データ 可変データ 不変データ 変換・複写 複数の関数がメモリを 変更がない部分は共有する。 不変データ 共有するので競合が 関数は不変データを変換しながら 不変データなので 発生する 複写したデータを他の関数に受け データが破壊されることはない 渡す 手続き 関数 メソッド 手続き型 純粋関数型 オブジェクト指向
  • 28. マルチコア 共有メモリ方式とメッセージパッシング方式 メモリはスレッドが 占有するので、 競 メモリ 合が発生しない スレッド スレッド スレッド スレッド メッセージ ボックス メッセージ ボックス メモリ メッセージボックスを経由したメッ セージ交換によって非同期処理を スレッド 複数のスレッドが 実現する メモリを共有する ので競合が発生 する スレッド メモリ Javaモニタ 共有メモリ方式 java.util.concurrent メッセージパッシング方式 scala.actors scala.concurrent
  • 29. クラウド・コンピューティング Webプラットフォーム テキスト指向、XML指向 スケーラビリティ パブリックなインターネット空間上に事実上無尽 蔵に用意されたCPUやストレージなどのリソース を活用 非同期、並列、分散 分散アプリケーション 非同期、並列、分散
  • 30. アプリケーション・アーキテクチャ プレゼンテーション層 クラウド・アプリケーション クライアント側 サーバ側 アプリケーションの論理的な構成は 従来のものと変わらない プレゼンテーション層 GUI サービス ビジネス層 RIA Web ドメイン層 統合層 アクセス方式1:ローカル・データベース アプリケーションが占有するデータはロー カルデータベースに格納する。 アクセス方式5:REST Webページを手繰って情報を取得する 統合層 データベース アクセス方式2: 手続き呼出し 性能特性、 障害特性がローカル REST の手続き呼び出しよりも脆弱。 メッセージ・キュー サービス 分散ストレージ サービス サービス サービス アクセス方式3: メッセージング 分散環境での連携に適応する特性をもつ。 アクセス方式4: 分散ストレージ 通常のデータベースのような更新処理は難し い。
  • 31. クラウド・アプリケーションの構成例 マスターデータなど更新頻度が低い データは分散ストレージで配布して 結果を直接知りたい場合には、 手 直接参照する。 続き呼び出しで同期型の連携を 分散 行う。 ストレージ この形式の連携を行うとスケーラ プレゼンテーションの段階ででき ビリティが低くなる。 ることをやっておくと、 スケールア ウトの効果によってスケーラビリテ ィが高まる。 外部サービスからRESTを用いて クラウド・アプリケーション サービス利用の主力はメッセージ 情報を取得するのが典型的な利 である。 この形式の連携を行うと 用方法。 プレゼンテーション サービス サービス スケールアウトによってスケーラビ リティを確保できる。 サービス バックエンドのサービス群もメッセ メッセージ・キュー REST ージによって連携。 サービス メッセージ・キュー 同期通信 サービス メッセージ送信 メッセージ配信 データベース データベースをアクセスするスコ ープはサービスに閉じておくのが よい。
  • 32. クラウド・コンピューティングとScala テキスト指向、XML指向 Scalaの得意とするところ 生文字リテラル、正規表現、パターン・マッチング、 Extractor XMLリテラル、パス検索、パターン・マッチング 非同期・並列・分散 Javaの並列処理機能 スレッド、モニタ、並列ライブラリ 関数型言語 不変オブジェクト モナド アクター・ライブラリ
  • 33. DSL(Domain Specific Language) 応用分野、技術分野の領域(ドメイン)ごとに専用の言語を用意する 簡潔で過不足のない適切なモデルを記述できる テキストDSL UMLのようなグラフィカル言語は、モデルを記述する作業が煩雑 プログラミング言語のようにテキストでモデルを記述すると効率がよい 内部DSL ホスト言語となるプログラミング言語上にDSLを構築 Scalaはホスト言語に最適の文法を備えている スケーラブル 外部DSL parser combinator Scalaが提供するパーサー・ジェネレータ 専用DSLでBNF相当の文法を定義
  • 34. モデル駆動開発&コンポーネント 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
  • 35. DSL DSLの例 case class App20090505() extends 施設利用申請書 { 会員番号 = 123456 名前 = "Scala太郎" 理由(<div>Scalaの勉強会を行うため。</div>) 理由("Liftも少し取り上げるかもしれません。") 申請 { 施設(20090601, 1300, 1400, 講堂) 理由は <div>初日は講堂で講演したいか ら</div> 同時利用(20090602, 1000, 1200) { 施設(第1会議室) 施設(第2会議室) 理由は "第1会議室だけだと足りないから" 設備(ホワイトボード) 個数は 2 理由は "会議室ごとに利用" } 理由は """両方同時に利用希望します。 片方だけだと入りきらないので。""" } }
  • 37. DSL 変換処理 オブジェクト オブジェクト 変換処理 XML XML テキスト テキスト
  • 38. アプリケーション・フレームワーク APIからDSLへ 旧来のAPI:手続き呼び出し、抽象クラスの継承 DSLを用いることで、簡潔、適切にフレームワークの提供する 機能を利用することができる Springに対するGrails Groovyを用いたSpring DSLと考えることで、アーキテクチャ 上の位置付けが理解できる Apache Camel インテグレーションフレームワーク XML DSL、Java DSLに続いてScala DSLを開発中 ScalaとJavaの協業 アプリケーション・フレームワークはScala コンポーネントはScalaまたはJava アプリケーションはJavaまたはGroovy(JRuby, Jython)
  • 39. アプリケーション・フレームワーク Scalaの使いどころ アプリケーション Java API : Application Programming Interface Groovy DSL : Domain Specific Language SPI : Service Provider Interface API Java DSL Scala 構成管理 フレームワーク 定義 Scala Scala SPI Java コンポーネント Scala Java
  • 40. アプリケーション・フレームワーク 開発の流れ 設計 製造 組立て 運用管理 ビジネス・モデリング 分析 設計 実装 テスト 設計 実装 テスト 組立 テスト 配備 管理 分析 設計 実装 テスト 設計 実装 テスト 設計 実装 テスト 設計 実装 テスト フレームワーク フレームワーク コンポーネント コンポーネント
  • 41. まとめ JavaプログラマにとってのScala まず最初は便利なJavaとして使っても十分 に有益 浅海の体感では3倍の生産性 最初はScala特有の難しい(そして便利な)機能 は使わなくてもよい これから興隆する新しい技術はScalaで攻 めるのが得策 新技術分野のための機能が満載 マルチコア、クラウド・コンピューティング、DSL