何が変わった? visualworks 8.0
TRANSCRIPT
第72回 Smalltalk勉強会
2015 Masashi Umezawa
はじめに
広く浅く話します
後半は皆でいろいろと試す時間にします
参考:
○第16回Smalltalk勉強会資料
「何が変わった? VisualWorks7.7」
VisualWorksとは
最大のシェアを持つ老舗のSmalltalk
安定
○ Smalltalk-80直系
速い
○ 最近はCogVMが肉薄
http://d.hatena.ne.jp/sumim/20140826/p1
でかい
○フルインストールで1GB程度消費
○必要なものは大抵そろう
VisualWorksの歴史
1992: ObjectWorks/Smalltalk
1993: VisualWorks 1.0
1994-1997: VisualWorks 2.0, 2.5
1998: VisualWorks 3
VisualWorks 4 (幻)
1999-2001: VisualWorks 5i - 5i.4
2002-2014: VisualWorks 7 - 7.10
2015: VisualWorks 8 <= イマココ
8.0の新機能
いろいろあるので詳細はリリースノート参照
開発者からみて面白そうな部分をピックアップ
クライアント系
Text2
UISkinning
サーバ系
SiouX
AppeX
Text2 とは従来のTextを置き換えるもの
よりリッチなテキスト表現が可能に
○ イメージ埋め込み、ワードラップ、アクション
○ 行頭文字、アラインメント、アノテーション
○ Unicodeを意識した検索、検索ダイアログ、diffなど
実例:
システムブラウザのコードペインもText2で実装
Text2によるコードペイン
Text2 の構成要素 (1)
Document
Text2の主要モデル
DocumentSegmentを集約
Zeroインデックス! (文字と文字の間を指すため)
DocumentSegment
テキストの特定部分(ボールド、イメージ埋め込みなど)
DocumentAction
Segmentの一種
○ リンクのクリックなど動作のある部分
Text2 の構成要素 (2)
Flow
2次元領域にテキストをレイアウトするためのモデル
FlowSegmentを集約
カーソル移動をサポート(何文字目、何行目)
FlowSegment
テキストの特定箇所をレンダリングするためのモデル
○ 改行部、行頭文字部、パスワード部など
Text2 の構成要素 (3) DocumentView
Documentのビュー
選択範囲、編集範囲、編集履歴などを管理
DocumentEditor
編集可能なDocumentのビュー
InputEditor
行が1行に限定されたDocumentEditor
UISkinning
よりネイティブらしいウィジェット表現
「カメレオンビュー」廃止
薄いラッパーでシンプルに○ 重厚なAbstract Factoryをやめ、シンプルなStrategyで実現
○ OSのAPIを割とすぐに呼び出す形
○ 幻となったWidgetryの考えを再利用
Default, Windows, Macのスキンがある
○ MotifやOS/2、Smalltalk-80のスキンは廃止
○縦のスライダーなどもなくなった
SiouX新たに実装されたWebサーバ
軽量
Xtreamsベース
○オンデマンドに必要部分のみをパースする
HTTPS, WebSocket, Servletもサポート
SeasideやAppeXのHTTPサーバとして動作
文字コードはデフォルトでUTF8
SiouXの主要クラス Responder
あるURLに対する処理を記述
Server Responderを集約
RequestContext 現在のリクエスト情報が入っている
RequestFilter 認証など、リクエストのフックを記述
Session
SessionCache
SiouXの例 (1)
SiouX.HttpResponderのサブクラスHelloResponderを定義
executeRequestFor:を実装
executeRequestFor: aRequestContext^aRequestContext response
contentType: 'text/html';contents:
'<html><body>Hello:', Time now printString, '</body></html>'
SiouXの例 (2)
サーバの起動
○ Responderにpathを指定して追加
server := Server id: 'HelloServer'.responder := HelloResponder new.responder path: '/hello'.server addResponder: responder.server listenOn: 8000 for: SiouX.HttpConnection.server start.
AppeX
Webアプリフレームワーク
HTTP5の機能を活用
○ Server side events (SSE)
○ Session Storage
アノテーション活用でコード量削減
クライアントをJSで記述可能
○ JSとSmalltalkがWebSocketで通信
○ JS部分の開発もSmalltalkのIDEで書く
○既存JSのライブラリ取り込みが自由にできる
AppeXのサンプル(1)
AppeX-Examplesを参照のこと
AppeX-Examples-Mobile
jQueryMobileを使う例
"Web Servers"のUIを開き
Running状態にした後、以下のURLでアクセスしてみる
http://localhost:8888/appex/simplest-app
http://localhost:8888/appex/chat-room-demo
AppeXのサンプル(2)サーバ側: Appex.Applicationを継承
Smalltalkで記述
applicationClientClassを実装し、Clientクラスと関連付け
クライアント側: Applec.ApplicationClientを継承
JSで記述
SimpleApp, SimpleAppClientはサーバ側のみの例
Chat, ChatClientの例が概観をつかむには良い
AppeXのサンプル(3) Chat
クラスメソッド側
○ 静的コンテンツ
○ 各セッションで共通のサービスの実装
インスタンスメソッド側
○ セッション固有の処理を実装
ChatClient
インスタンスメソッドを見ると、JSが書いてある!
this.asyncMessageToServer('メソッド名') で非同期通信
まとめ
VisualWorksは歴史ある商用Smalltalk
安定していて、速い
ビジネスで使うための部品が最初からそろっている
8.0となり、さらなる進化に期待したい