@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万回くらいバックトラックすると死ぬ) バックトラックを使う使わないを選択できる どれくらいバックトラック出来るかは正規表現エンジンの実装によるのではないか