@yoshimura_yuu

.pmにも関わらずTeXの話
スピリチュアルプログラマ

TeXとは example
	\def\hoge#1
	ちょっと複雑になるとわからない…
		急に出てくる「%」はその後ろの改行を無視させる
		答え: アンダーバー _ を引数個出力する
		そのためだけに「これだけ」書く必要がある
	引数はすべて文字列として与えられる
	TeXにはループ文がないので、再帰で表現する必要がある
どうしてこうなった
	型が少ない
		文字列
		マクロ
		カウンタ
	配列なんてなかった
	ループもない
		悪魔ライブラリを使うか、再帰
	関数は？
		ありません
		マクロの展開順序を考える必要がある
		スタックオーバーフローこわい
そこにPerlTeXがあるじゃろ
	TeXのマクロをPerlで書ける
	さっきのunderbarマクロが一行で書ける
使い方
	TeX Liveで導入
	\usepackage{perltex}
	perltexコマンドでコンパイル
パスカルの三角形をTeXで書く
	生のTeXで書くと長い…
しかし…
	二桁が扱えない
	数字としてではなく、文字列として格納する(配列が存在しない)ため、10の桁と1の桁を分離できkない
だれかTeXを吐く言語を書いてください
	ltxみたいな名前で

白抜き文字のようなものはPerlTeXで出力することは出来ない
	出来なくはないが、TeXを直接書くのと変わらない
	複雑な図形を描いたりするのには向いている
	綺麗にルビを振ったりしたい時などには向いていると思われる

TeXは地の文と、文の構造と、文字などのスタイルがすべて混在した書き方になっているため、
こんなことになってしまったのでは

カウンタを用いて演算を行っているようだが、どれくらいの演算が可能なのか
	足し算とかけ算が出来る
	\advance <- 足し算演算
演算子を自分で定義して、演算の種類を増やすのか
	そう
	\expandefterを使って展開順序を制御したりする
		関数ではなく、マクロであることが原因だと思われる
		再帰を行う際に、定義文の中でマクロ名が出てくることになるが、\expandafterがないと
		スタックオーバーフローしてしまう
標準出力はあるのか
	一応、それっぽいのはある
	LaTeXの警告文を使うという手
		それを使ってゲームを実装している頭のおかしい人もいるようだ
GoogleCodeJamでTeXで一問解いている人がいた

「マクロツイーター」でググるとよい
	非常に参考になった
	LaTeXでオブジェクト指向 <-- ！？






Perl6で遊ぼう
@VienosNotes

Perl6とは？
	Perl5との違い
	Perl6のおもしろ機能

Perl5との後方互換性を切り捨てた新しい言語
	5を置き換えるものではない

(当時)モダンなプログラミング技法を取り入れる
	仕様ベースの開発
		はじめに仕様ありき
		仕様を元に実装を進める
	ラリーウォールは現在は、少なくとも実装からは離れている

コンテキストはなくなり、シジルはわかりやすくなった
	配列の要素にアクセスするときも@をつける
メソッド呼び出しは-> から . へ
	「タイプ量50%ダウンやったー」
すべてがオブジェクト
	特殊変数も再編された
標準ライブラリの拡充
	自分でモジュールを入れなくてもある程度書ける

提唱されたのは2000
	10年以上たったのに完成していない
	オワコン扱い

おもしろ機能
型制約
	変数や関数の引数に型制約を書くことが出来る
	引数の型によってディスパッチ出来る
	静的片付けではなく、実行時例外になる
		catchで拾うことも出来る
	型チェックが入るので、動作としては遅くなる

multiによってメソッド定義をオーバーロードできる
	多重定義

関数リテラル
	今まではmapを多用していた
Pointy Block
	ラムダ式のような見た目で書ける
	(1..10).map: -> Int ……
Whatever Star
	say (1..10).map: * ** 2;
	Perl5でいうところの$_が*に暗黙的に代入される
	記述量は少なくなるが、見た目が悪魔的で戸惑う
Placeholder Variables
	say (1..10).map: { $^a ** 2};
	$^で始まる変数に、引数が順に格納されていく
Junction
	if ($i == 0 || $i == 1) { ... }
	-> if ($i == 0 | 1 ) { ... } のような書ける
	「0か1である」というオブジェクト
	正規表現で「/pattern1/」か「/pattern2」にマッチする、というのがスマートに書ける
	if ($s ~~ /pattern1/ | /pattern2/)
	処理系が対応していれば並列処理される
Grammar
	とても強い正規表現
	パーサを簡単に書けるようになった
	正規表現に名前をつける(token)ことが出来る
	要するに構造を持った名前付き正規表現
		$1とかで悩む必要がなくなった
	部分文字列を取り出すのが簡単に

なぜオワコンになってしまったのか
	開発が遅い
	動作が遅い
		以前はPerl6 -Vで4秒くらいかかっていた
	仕様が固まっていない
		仕様書が毎日リポジトリにコミットされている
	そもそも(日本には)コミュニティが「無い」

コミュニティ作りましょう
	実はPerl6勉強会を去年やりました
	今年もやりたい
	二学期からは月1くらいでゆるゆるやりたい

Perl6のおもしろいところ
	日に日に動作が速くなっていくところとか
	まさに時代の最先端！




JSX language notes
@gfx

ソフトウェアの開発環境を良くすることに興味がある

JSXとは
	JavaScriptの代替としてスタートした
	JavaScriptにコンパイルして、動作させる
		JavaScriptが動く環境であれば動く
	JavaScriptより速く、安全で生産性が高い

なぜ作ったのか
	JavaScript自体は悪くない言語だが、開発規模が大きくなってくると、ちょっと非力
	動的型付けの言語の宿命であるが、実行時にエラーとなる
	バリディエータとして、パラメータを動的にチェックし続ける必要があったり……
	prototypeベースは、単純なオブジェクト指向ともまた異なっている
	
ECMA-262標準準拠
静的型付け
クラス方式

現状
	2012/05/31に最初のリリース
	基本的な文法は定まった
	構文にはまだ少し改善の余地がありそう
	jsdo.itがサポート
		JavaScriptアプリケーションを公開する場所
	周辺ツールがまだ足りていない
		jsxdoc, コード補完
	テンプレート周りが弱い
	JavaScriptのモジュールをロードすることが出来ない

Demo
	jsdo.it/tag/JSX

コード例
	class定義が存在する
	mainから実行される
	構文自体はJavaScriptとほぼ同じ

デバッガ
	JavaScriptにコンパイルされてしまうので、実行時エラーは、オリジナルのJSXのコードと無関係なエラーとして見えてしまう
	source-map というツールで、コンパイルされたJavaScriptのコードとJSXのコードの対応付けをみることが出来る
	JSXのコードにBreakPointをセットしたり、ステップ実行も可能
	絶賛実装中

JSXのコンパイルはJavaScriptで書かれている

プロファイラ
	プロファイラを有効にしてコンパイルすることで、実行時間を測定するコードが埋め込まれて、
	メソッドごとにかかった時間や実行された回数などがみられる
	スマートフォンでのプロファイラがまだあまり充実されていない


コード補完
	vimとemacsでサポートしている
	JavaScriptの場合は、実行してみないとどのオブジェクトなのか確定しないが、
	JSXは静的型付けなので、プロパティなども補完できる

静的型付け言語の特徴として、周辺ツールの拡充がしやすいことがあるので、どんどん作っていきたい

型について
	JavaScriptはある変数にどんな型でも入れられる
	ある変数を定義したときに、Nullが入れられるかどうかというのは言語によって異なる
	Primitive Nullは入らない、 Object Nullが入る
	Variant Type
		JavaScriptの変数に直接マップされる
		静的型付けのルールを破ることが可能
		キャストが必要
		型安全を壊してしまうので、あまり使わない方が良い
	Parameterized Type
		テンプレート
		generic programming
		今のところクラスのみ
		関数でも使えるようにしたい

Lambda
	function (a : int) : int { return a + 1; }
	(a : int) -> int { return a + 1; }
	(a) -> a + 1
	
	型推論が可能なので出来る

JSXの導入
	perl 5.10以降、nodeの出来るだけ最新
	make setup
	make test
	
web.jsx
	ブラウザの機能をJSXから呼ぶことが出来る
	w3cの仕様書をパースして、宣言を作ることが出来る
	Perl 5.10の正規表現のネームドキャプチャを用いてパースしている
	正規表現のxオプションが便利
		JavaScriptでは出来ない

JSXを開発しているときに「これは詰んだ」というのはあったか
	ウェブアプリショーンはイベントドリブンであることが多い
	イベントドリブンのアプリケーションのデバッグやエラーハンドリングが大変なので、
	JSXにそれらを扱える機能を追加したい
	パフォーマンスを落とすことなく導入する方法について、結論が出ていない
パフォーマンスの維持にはどうしているか
	JavaScriptの悪魔的手法も使ってはいる
	JavaScriptのチューニングをするにしても、Optimizerが勝手にやるので、ユーザが意識する必要はない
	静的型付けによって、Optimizerを強力にすることが出来る

Optimizerを最大にすると、手でチューニングされたJavaScriptよりも10%くらいは速くしたい

業務で使えるレベルにはまだ達していない
	ライブラリが圧倒的に足りない

jQueryなどが無いとブラウザ互換が困るのではないか
	そもそも、複雑なユーザインターフェースなどをjQueryなしに頑張るのは無謀
	古いIEはサポートしないというのを維持すれば、ブラウザ互換はまだ楽かも
	JSXのメインターゲットはスマートフォンなので……
	UIを作るフレームワークを9月くらいまでには作りたい

JSXがDeNAのプロダクトで使われるようになるのはいつくらいか
	早くても今年11月くらいでは
	ライブラリが無いのはつらい






なぜ今Perl6を使うのか
@uasi


今からPerl6を布教します

使わなくてもやっていけるよ派
	C++とかScalaとかあるよ
	ブラウザ上で動かない言語に意味はないよ

Perl6の特徴
	Perl5のしがらみからの脱却
	複数の実装

動かない言語に意味はない！

「強力な正規表現」

そもそもPerlはテキスト処理のために生まれた
Perl6をテキスト処理に使ってあげよう

Perl6の正規表現
	構造化したテキストを表現できる
	リファクタリングに使えるのではないか

Objective-Cのインスタンス変数
	ヘッダファイルから取り除く

正規表現のリファレンスは？
	無い
	気合いで頑張ろう！


Perl6のGrammarと正規表現の関係は？
	たくさんの正規表現を束ねて一つのクラスのように使えるものがGrammar

Perl6では正規表現のバックトラックはどうなっているのか(Perl5では3万回くらいバックトラックすると死ぬ)
	バックトラックを使う使わないを選択できる
	どれくらいバックトラック出来るかは正規表現エンジンの実装によるのではないか

