From 7c991ad82ab6d4c256e2a891e4f33508c60076a9 Mon Sep 17 00:00:00 2001 From: mitty Date: Sat, 7 Jul 2012 06:30:56 +0000 Subject: [PATCH] * memo for tsukuba.pm #2 * http://atnd.org/events/29822 git-svn-id: https://lab.mitty.jp/svn/lab/trunk@155 7d2118f6-f56c-43e7-95a2-4bb3031d96e7 --- Commentary/tsukuba.pm/20120707#2.txt | 324 ++++++++++++++++++++++++++++++++++ 1 file changed, 324 insertions(+) create mode 100644 Commentary/tsukuba.pm/20120707#2.txt diff --git a/Commentary/tsukuba.pm/20120707#2.txt b/Commentary/tsukuba.pm/20120707#2.txt new file mode 100644 index 0000000..b6cc1da --- /dev/null +++ b/Commentary/tsukuba.pm/20120707#2.txt @@ -0,0 +1,324 @@ +@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万回くらいバックトラックすると死ぬ) + バックトラックを使う使わないを選択できる + どれくらいバックトラック出来るかは正規表現エンジンの実装によるのではないか + -- 1.7.9.5