refactor concurrent loops
[lab.git] / Commentary / tsukuba.pm / 20120707#2.txt
1 @yoshimura_yuu
2
3 .pmにも関わらずTeXの話
4 スピリチュアルプログラマ
5
6 TeXとは example
7         \def\hoge#1
8         ちょっと複雑になるとわからない…
9                 急に出てくる「%」はその後ろの改行を無視させる
10                 答え: アンダーバー _ を引数個出力する
11                 そのためだけに「これだけ」書く必要がある
12         引数はすべて文字列として与えられる
13         TeXにはループ文がないので、再帰で表現する必要がある
14 どうしてこうなった
15         型が少ない
16                 文字列
17                 マクロ
18                 カウンタ
19         配列なんてなかった
20         ループもない
21                 悪魔ライブラリを使うか、再帰
22         関数は?
23                 ありません
24                 マクロの展開順序を考える必要がある
25                 スタックオーバーフローこわい
26 そこにPerlTeXがあるじゃろ
27         TeXのマクロをPerlで書ける
28         さっきのunderbarマクロが一行で書ける
29 使い方
30         TeX Liveで導入
31         \usepackage{perltex}
32         perltexコマンドでコンパイル
33 パスカルの三角形をTeXで書く
34         生のTeXで書くと長い…
35 しかし…
36         二桁が扱えない
37         数字としてではなく、文字列として格納する(配列が存在しない)ため、10の桁と1の桁を分離できkない
38 だれかTeXを吐く言語を書いてください
39         ltxみたいな名前で
40
41 白抜き文字のようなものはPerlTeXで出力することは出来ない
42         出来なくはないが、TeXを直接書くのと変わらない
43         複雑な図形を描いたりするのには向いている
44         綺麗にルビを振ったりしたい時などには向いていると思われる
45
46 TeXは地の文と、文の構造と、文字などのスタイルがすべて混在した書き方になっているため、
47 こんなことになってしまったのでは
48
49 カウンタを用いて演算を行っているようだが、どれくらいの演算が可能なのか
50         足し算とかけ算が出来る
51         \advance <- 足し算演算
52 演算子を自分で定義して、演算の種類を増やすのか
53         そう
54         \expandefterを使って展開順序を制御したりする
55                 関数ではなく、マクロであることが原因だと思われる
56                 再帰を行う際に、定義文の中でマクロ名が出てくることになるが、\expandafterがないと
57                 スタックオーバーフローしてしまう
58 標準出力はあるのか
59         一応、それっぽいのはある
60         LaTeXの警告文を使うという手
61                 それを使ってゲームを実装している頭のおかしい人もいるようだ
62 GoogleCodeJamでTeXで一問解いている人がいた
63
64 「マクロツイーター」でググるとよい
65         非常に参考になった
66         LaTeXでオブジェクト指向 <-- !?
67
68
69
70
71
72
73 Perl6で遊ぼう
74 @VienosNotes
75
76 Perl6とは?
77         Perl5との違い
78         Perl6のおもしろ機能
79
80 Perl5との後方互換性を切り捨てた新しい言語
81         5を置き換えるものではない
82
83 (当時)モダンなプログラミング技法を取り入れる
84         仕様ベースの開発
85                 はじめに仕様ありき
86                 仕様を元に実装を進める
87         ラリーウォールは現在は、少なくとも実装からは離れている
88
89 コンテキストはなくなり、シジルはわかりやすくなった
90         配列の要素にアクセスするときも@をつける
91 メソッド呼び出しは-> から . へ
92         「タイプ量50%ダウンやったー」
93 すべてがオブジェクト
94         特殊変数も再編された
95 標準ライブラリの拡充
96         自分でモジュールを入れなくてもある程度書ける
97
98 提唱されたのは2000
99         10年以上たったのに完成していない
100         オワコン扱い
101
102 おもしろ機能
103 型制約
104         変数や関数の引数に型制約を書くことが出来る
105         引数の型によってディスパッチ出来る
106         静的片付けではなく、実行時例外になる
107                 catchで拾うことも出来る
108         型チェックが入るので、動作としては遅くなる
109
110 multiによってメソッド定義をオーバーロードできる
111         多重定義
112
113 関数リテラル
114         今まではmapを多用していた
115 Pointy Block
116         ラムダ式のような見た目で書ける
117         (1..10).map: -> Int ……
118 Whatever Star
119         say (1..10).map: * ** 2;
120         Perl5でいうところの$_が*に暗黙的に代入される
121         記述量は少なくなるが、見た目が悪魔的で戸惑う
122 Placeholder Variables
123         say (1..10).map: { $^a ** 2};
124         $^で始まる変数に、引数が順に格納されていく
125 Junction
126         if ($i == 0 || $i == 1) { ... }
127         -> if ($i == 0 | 1 ) { ... } のような書ける
128         「0か1である」というオブジェクト
129         正規表現で「/pattern1/」か「/pattern2」にマッチする、というのがスマートに書ける
130         if ($s ~~ /pattern1/ | /pattern2/)
131         処理系が対応していれば並列処理される
132 Grammar
133         とても強い正規表現
134         パーサを簡単に書けるようになった
135         正規表現に名前をつける(token)ことが出来る
136         要するに構造を持った名前付き正規表現
137                 $1とかで悩む必要がなくなった
138         部分文字列を取り出すのが簡単に
139
140 なぜオワコンになってしまったのか
141         開発が遅い
142         動作が遅い
143                 以前はPerl6 -Vで4秒くらいかかっていた
144         仕様が固まっていない
145                 仕様書が毎日リポジトリにコミットされている
146         そもそも(日本には)コミュニティが「無い」
147
148 コミュニティ作りましょう
149         実はPerl6勉強会を去年やりました
150         今年もやりたい
151         二学期からは月1くらいでゆるゆるやりたい
152
153 Perl6のおもしろいところ
154         日に日に動作が速くなっていくところとか
155         まさに時代の最先端!
156
157
158
159
160 JSX language notes
161 @gfx
162
163 ソフトウェアの開発環境を良くすることに興味がある
164
165 JSXとは
166         JavaScriptの代替としてスタートした
167         JavaScriptにコンパイルして、動作させる
168                 JavaScriptが動く環境であれば動く
169         JavaScriptより速く、安全で生産性が高い
170
171 なぜ作ったのか
172         JavaScript自体は悪くない言語だが、開発規模が大きくなってくると、ちょっと非力
173         動的型付けの言語の宿命であるが、実行時にエラーとなる
174         バリディエータとして、パラメータを動的にチェックし続ける必要があったり……
175         prototypeベースは、単純なオブジェクト指向ともまた異なっている
176         
177 ECMA-262標準準拠
178 静的型付け
179 クラス方式
180
181 現状
182         2012/05/31に最初のリリース
183         基本的な文法は定まった
184         構文にはまだ少し改善の余地がありそう
185         jsdo.itがサポート
186                 JavaScriptアプリケーションを公開する場所
187         周辺ツールがまだ足りていない
188                 jsxdoc, コード補完
189         テンプレート周りが弱い
190         JavaScriptのモジュールをロードすることが出来ない
191
192 Demo
193         jsdo.it/tag/JSX
194
195 コード例
196         class定義が存在する
197         mainから実行される
198         構文自体はJavaScriptとほぼ同じ
199
200 デバッガ
201         JavaScriptにコンパイルされてしまうので、実行時エラーは、オリジナルのJSXのコードと無関係なエラーとして見えてしまう
202         source-map というツールで、コンパイルされたJavaScriptのコードとJSXのコードの対応付けをみることが出来る
203         JSXのコードにBreakPointをセットしたり、ステップ実行も可能
204         絶賛実装中
205
206 JSXのコンパイルはJavaScriptで書かれている
207
208 プロファイラ
209         プロファイラを有効にしてコンパイルすることで、実行時間を測定するコードが埋め込まれて、
210         メソッドごとにかかった時間や実行された回数などがみられる
211         スマートフォンでのプロファイラがまだあまり充実されていない
212
213
214 コード補完
215         vimとemacsでサポートしている
216         JavaScriptの場合は、実行してみないとどのオブジェクトなのか確定しないが、
217         JSXは静的型付けなので、プロパティなども補完できる
218
219 静的型付け言語の特徴として、周辺ツールの拡充がしやすいことがあるので、どんどん作っていきたい
220
221 型について
222         JavaScriptはある変数にどんな型でも入れられる
223         ある変数を定義したときに、Nullが入れられるかどうかというのは言語によって異なる
224         Primitive Nullは入らない、 Object Nullが入る
225         Variant Type
226                 JavaScriptの変数に直接マップされる
227                 静的型付けのルールを破ることが可能
228                 キャストが必要
229                 型安全を壊してしまうので、あまり使わない方が良い
230         Parameterized Type
231                 テンプレート
232                 generic programming
233                 今のところクラスのみ
234                 関数でも使えるようにしたい
235
236 Lambda
237         function (a : int) : int { return a + 1; }
238         (a : int) -> int { return a + 1; }
239         (a) -> a + 1
240         
241         型推論が可能なので出来る
242
243 JSXの導入
244         perl 5.10以降、nodeの出来るだけ最新
245         make setup
246         make test
247         
248 web.jsx
249         ブラウザの機能をJSXから呼ぶことが出来る
250         w3cの仕様書をパースして、宣言を作ることが出来る
251         Perl 5.10の正規表現のネームドキャプチャを用いてパースしている
252         正規表現のxオプションが便利
253                 JavaScriptでは出来ない
254
255 JSXを開発しているときに「これは詰んだ」というのはあったか
256         ウェブアプリショーンはイベントドリブンであることが多い
257         イベントドリブンのアプリケーションのデバッグやエラーハンドリングが大変なので、
258         JSXにそれらを扱える機能を追加したい
259         パフォーマンスを落とすことなく導入する方法について、結論が出ていない
260 パフォーマンスの維持にはどうしているか
261         JavaScriptの悪魔的手法も使ってはいる
262         JavaScriptのチューニングをするにしても、Optimizerが勝手にやるので、ユーザが意識する必要はない
263         静的型付けによって、Optimizerを強力にすることが出来る
264
265 Optimizerを最大にすると、手でチューニングされたJavaScriptよりも10%くらいは速くしたい
266
267 業務で使えるレベルにはまだ達していない
268         ライブラリが圧倒的に足りない
269
270 jQueryなどが無いとブラウザ互換が困るのではないか
271         そもそも、複雑なユーザインターフェースなどをjQueryなしに頑張るのは無謀
272         古いIEはサポートしないというのを維持すれば、ブラウザ互換はまだ楽かも
273         JSXのメインターゲットはスマートフォンなので……
274         UIを作るフレームワークを9月くらいまでには作りたい
275
276 JSXがDeNAのプロダクトで使われるようになるのはいつくらいか
277         早くても今年11月くらいでは
278         ライブラリが無いのはつらい
279
280
281
282
283
284
285 なぜ今Perl6を使うのか
286 @uasi
287
288
289 今からPerl6を布教します
290
291 使わなくてもやっていけるよ派
292         C++とかScalaとかあるよ
293         ブラウザ上で動かない言語に意味はないよ
294
295 Perl6の特徴
296         Perl5のしがらみからの脱却
297         複数の実装
298
299 動かない言語に意味はない!
300
301 「強力な正規表現」
302
303 そもそもPerlはテキスト処理のために生まれた
304 Perl6をテキスト処理に使ってあげよう
305
306 Perl6の正規表現
307         構造化したテキストを表現できる
308         リファクタリングに使えるのではないか
309
310 Objective-Cのインスタンス変数
311         ヘッダファイルから取り除く
312
313 正規表現のリファレンスは?
314         無い
315         気合いで頑張ろう!
316
317
318 Perl6のGrammarと正規表現の関係は?
319         たくさんの正規表現を束ねて一つのクラスのように使えるものがGrammar
320
321 Perl6では正規表現のバックトラックはどうなっているのか(Perl5では3万回くらいバックトラックすると死ぬ)
322         バックトラックを使う使わないを選択できる
323         どれくらいバックトラック出来るかは正規表現エンジンの実装によるのではないか
324