LL future メモ

朝から晩まで11時間くらいやってた。皆さんお疲れ様でした。
きいたことを即時忘れるタイプなのでメモとっといてよかった。しかし整形する気力がない。
はてな記法を把握してないためところどころおかしいと思う、察してください。あと発表者が言ってないことを書いてあったりする。

ラリー先生基調講演

ききのがしたやんけ

LLで未来を発明する

100年後の言語とは
まつもと:

sumii:

  • MiniCaml作った/わかりません/チャーチのλ計算が100年前/電子計算機でなくてもプログラミングは可能かつ必要
  • 数百年前:関数(ライプニッツオイラー)、変数(古代ギリシャ、16世紀(ヴィエタ)、ユークリッドの互除法(AC300)
  • GC50年代、ジェネリクス70年代……
  • 予想することも意図して発明することもできない
  • でも予想してみると、自然言語+αでPGできるように?全自動証明器つき言語/大量のDSL/普通の人が使える非技術者向けグラフィカル言語/量子言語

ふじた(little wing):言語がなくなるとか困る/言語は人間の労力を減らすため/面倒なことをよりしなくてもいい方向に/メモリの確保と開放/並列処理/

  • GC、並列処理、動的言語のサポートがCPUでサポートされるのではないか/そうなるとCとか絶滅しそう/抽象度の低いことは書かなくてよくなる

higepon:

  • 2078年くらいに言語の大統一理論が発見される→みんなLispだったんじゃないか!!!
  • 100年前を振り返る→歯車で動くような計算機が小型化されて実用化されたくらい
  • 現在→便利だねーくらいの存在感
  • 100年後→便利を通り越して空気のような存在
  • 自然言語には限界があるのでそうはならない→習えば誰でも使えて、でも練習が必要(自動車自転車みたいな)

ラリー:

  • VIMでプレゼン
    • 英語聞き取れない
    • impossible to predict
    • extensible but expressive
    • self-defined
    • precisely scoped
    • paradigm neutral
    • scalable
    • optimizable
    • parallelizable
    • accessible
    • teachable
    • transparent
    • community-based
      • O楽

いいものは残るというがいいものって何>sumii

  • paradigm neutral、いろんな言語のいいところをつかえるかんじ
  • 結局どの言語も同じようになるんじゃないか

これまでに何をしてきたか

  • ラリー「perl
  • まつもと「ruby
    • 100年後を考えるとおかしな言語も必要、多様性
    • 言語に関心を持つ人が増えるといい
    • こういうイベントに1000人集まるとか未来は明るい
  • sumii
  • ふじた
    • DSLをつくるツールとしてのScheme処理系実装、R6RS準拠→仕様を考えるのが面倒だったので
    • 多様な言語を作るのにとても適した言語
  • higepon
    • mosh
    • SICPに感銘を受けた
      • 後半、言語の実装→やってみたら動いたのがきっかけ
    • OSがデフォで提供してる機能がいいものだったら便利

これから何をするのか?

  • higepon
    • OSを世界の人に使ってもらうことが最終目標
      • フルスタック、思想が統一されてる素晴らしいOSを作る
  • ふじた
    • ききのがした
  • sumii
    • 基礎研究
    • 100年後、1000年後の人がおもしろいと思えるアイデアをきっちり記録に残す
    • まあ基礎研究は知的好奇心でやってる
      • 自分の好き勝手な好奇心を満たすことで世間の役に立つ
  • まつもと
    • 言語好きを増やす
    • 言語をデザインする人はExtensive(マクロとか)に走りやすい
      • →ユーザにはよくない
      • それぞれがDSLを持つとかバベルの塔の再来
      • 10年20年経てばどっちが正しいかわかるだろう
  • ラリー
    • ききとれない><

「関数型ってどこがいいんでしょう」

  • イデアを盗んでくるのに非常にいい場所だ(ラリー)
  • みんな同じようになるんじゃね(sumii)
    • 盗んで欲しいものはたくさんある、状態がないとか
    • 頭のいい人が多いのでそういう人と親しくなれる
    • Lisp/Schemeのいいところはちゃらんぽらんなところ
      • set!
    • higepon
      • なかなか出会えないような概念
      • 学びの場

100年後、コンピュータというものが今とは違うだろう

  • 自動車、メンテナンスフリー化
  • 計算機の世界でも同じようなことが
  • 「自分でプログラムしたいからx86アーキテクチャのマシンまだ持ってるんだぜ」みたいな
    • →どっかでプログラミングする人は残る、私は死ぬまでやるだろうし(まつもと)
  • プログラミング言語は誰のほうを向いてるか
    • 現在:計算機上で何か動かしたい人
    • 将来:非常に限られた人
    • そうなったとき、どういう言語が必要になってくるのか?
      • sumii:
        • 自動車は仕事でやってるけど計算機の人は趣味でやってる人が多い
        • これだけ実用化してるもので、かつ趣味で中をいじれるのがすばらしい
        • 今の自動車のようなクローズドなシステムになるのは悲しい
        • ハッカー文化が残って欲しい
    • perl6はどのように使って欲しい?>ラリー
      • →widthとdepthどっちも目指す的なこと
      • ききとれない
    • マクロとかどうなのよ>ラリー
      • →ききとれない
    • エラーメッセージをどうにかしてほしい(ふじた)
      • 言語のデザインとしてエラーメッセージは規格に入ってない
      • ルビーではどうよ>まつもと
        • 「あんまり考えてないっすね」
        • プロファイラ/デバッガとかのインタフェースまで標準化するかどうかはともかく考えたい
      • 今ここでサボると何千人のユーザの時間を無駄にするんじゃないかとよくおもう(higeponn)
      • 基礎研究ではわかりやすくしましたみたいな論文は書けない、評価が難しい(sumii)
        • 設計者は何か秘訣があるのか?
          • 言語のデザイナとユーザではデザイナのほうが圧倒的に少ない、デザイナが時間を使うべき(まつもと)
            • 私はlazyなので「奪われた!!!」という声をよく聞く
          • 言語デザイナは大統領のように振舞わねばならない(ラリー)
          • 言語デザイナに多くを担わせすぎるのはよくないのでは(ふじた)
            • 実装のほうに問題があるケースが多い
          • 最近はまつもと/ささだで役割がきれいに分かれてるかんじですね(sumii)
          • 仕様と実装を分けると仕様をきっちり作る必要があるのでは?

質疑応答

  • ヌルいよね(吉岡)
    • 100年後の話してないやないけ
    • ノイマン型を前提とする限りGCCは必要だし100年後も変わらないんでは
    • 800人中野に集まるというのは10年前とぜんぜん違う
    • コミュニティベースの言語開発
      • 昔は会議室で仕様決めてた
    • 100年後もコミュニティベースでやってそう
    • 100年後もかわんねーよ
      • まつもと:
        • プログラムの構成要素がフラクタルな状態になるんではないか
  • セキュリティという単語が一言も出てきてないことに危機感を覚える
    • セキュリティは言語デザインに大きく影響される
    • どう思ってんだおまえら
      • 今以上のアイデアがない(まつもと)
        • taintモデル
        • 言語設計者とセキュリティの人の特質は違うかんじ、アイデア募集

サイコー?! フレームワーク

フレームワーク」が何をさしてるのか謎、webフレームワークの意で使ってるのか?
wikipediawikiというタイプ……
ひがやすを(seaser)

瀧内(rorユーザ)

  • プレゼンがAA、コンソールのプレゼンソフト
  • railsはCoC、DRY、RESTful、フルスタック、進化が早い
  • railsruby!
  • Rubyをキメると気持ちよくなる

能登(DeNA,MobaSiFエヴァンジェリスト)

  • MobaSiF:Mobile Simple Flamework
    • 大規模高トラフィックサイトで使用されてきた実績
    • シンプル、構造が薄い、読みやすい
      • ドキュメントほとんどなかった、中身読んで把握する
    • 軽快、OR mapperなし
    • 携帯向けモジュール
    • 未来像特になし、勝手に機能追加しろや

吉田(EY-office,gauche on rails)

やすを

  • 機能が進化している→機能を覚えなきゃいけない
  • RoRの暗黒面
    • 機能追加しすぎ
    • 互換性
  • 会場に質問:安定してるのと進化してるのとどっちがいいか?→7:3

fwの未来

  • railsにはまった人はSchemeまであと一歩
  • 会場に質問:Schemeで食べてる人→ほとんどいない
  • 能登:
    • 自由度重要、減らさないでサービスとして安定するようにしたい
  • 会場に質問:MobaSiF使ってる人→いない
  • 瀧内:
  • やすを:
    • 安定性重要視、進化はさせない、サポート体制は維持
    • 今はrailsの影響がでかい、CoC
      • →いきすぎでは
      • あとから知らない人が見ると何が起こってるかわからない、ブラックボックス
      • 追いかけやすくしつつ設定ファイルを書かない方向にしていきたい
      • 次のフレームワークはそうしていきたい
  • 会場から:Schemeの仕事は国内ではない、カナダ行くとある
  • 会場から:フレームワークの設定をInspectする機能充実させれば?
    • →それSeasarで(ひが)
    • Railsはどうなのか→微妙
      • はまったりしないの→暗黒面に落ちてるからあんまりはまらない(瀧内)
      • Railsはエラーメッセージがいい(吉田)
    • MobaSiFはシンプルなので大丈夫

java上でRails等のフレームワークを使うのがはやってるがどう思う?

  • やすを:
    • まだ流行ってない
    • LLの人はjavaが嫌い
  • 瀧内:
    • 使ってみたいですね
      • javaのほうが基盤が安定してるから?(やすを)
        • →新しい物好きなので

会場から質問:

  • debianのパッケージ作ってメンテしてる者だが、railsだとgemsなる忌まわしいものが大量に入ってきてどうすんだこれ
    • 瀧内:rubyのライブラリはgemsで統一してる、大量のサーバは管理してないので
    • デビアンパッケージだと最新より古くなるので困る
    • →パッケージ管理者にフィードバックしてくれれば協力してくれますよ
  • railsは進化が早すぎて情報がすぐ古くなる
    • 勉強会とかで情報収集、本だとフォローできない
      • →勉強会に来る人だけが暗黒パワーで世界を支配するのではないか
  • MobaSiFを広めるためにパッケージ化するとかどうよ
    • 目鱗(能登)
    • 前向きに検討
  • フレームワークフルスタックがいいか、それともコンポーネントを選択できるほうがいいか?
    • フルスタックで提供してるけど分離交換可能なのが理想的(やすを)
  • フレームワークフルスタックがいいか、それともコンポーネント
    • フルスタックのほうがいい(瀧内)
    • 選べるほうがいい(能登)
    • ひがに同じ(吉田)
    • 選択肢が多すぎると迷うのでは?

まとめ:

LLでアート

LLってなに

  • 海外ではDynamic Languageのほうがメジャー

MAXってのがあるらしい、Prosessingの仲間
LLでスケッチ(増田一太郎)

  • Processing+ruby
  • IAMASネトゲ廃人
  • その後processing
  • ハオハオ? 群体による描画ツール
  • 化粧品のCM、エフェクトはProcessing
  • DIESELインタラクティブミラー。イメージを蓄積できる鏡
  • Processingはちょっと硬い
    • ruby-processing
    • SketchBook(koyachi)
    • NodeBox
    • fluxus
    • 作ってみた→action-coding
    • Funnel
      • フィジカルコンピューティング、新たな物理的インタフェース
      • I/Oをスクリプト言語から手軽に
      • デモ。Gainer+加速度センサ→USB経由でPCへ。
        • action-codingのデモに結合、ソース書きかえてパラメータをgainerから受けるように→即時反映
        • 入力に信号処理フィルタをくっつけられる。Scaler、Convolution
  • まとめ:プログラミングを駆使した表現活動は楽しいし敷居は下がりつつある

Maxを使ったアート(デザイン)、真鍋大登

  • デザイナー/アーティスト、インタラクティブ、実世界指向
  • MaxMSP: 音響・映像表現のためのヴィジュアルプログラミング環境
    • 商用
    • 箱を線でつなぐ式
    • 複雑なものは苦手
    • 80年代、MIDI制御のためのツール
    • 97年DSP機能、03年ビデオ/OpenGL制御機能追加
    • 2004年javaと繋げるように、js使えるように
    • 08年ようやくutf-8サポート、まだ発展途上っぽい
    • lua/pythonバインディングとか
    • デモ→jsとくみあわせてライブコーディング
      • なんかにょろにょろしてる、カメラの画像をテクスチャに、音と動きをsync→どんどんキモく
      • コーディング環境でそのままデータの流れを確認できる、コードとデータの流れがシームレス
    • DSPicでモノ作る前にMaxでプロトタイピングとか
    • 部品の配置=UI=コード、ただし汚い
    • 筋電センサによるUIとか
    • まとめ
      • pros
        • ヴィジュアルプログラミング環境→敷居が低い
        • js使える
        • リアルタイム性高い、実行中に修正可能
          • トライ&エラーのサイクルが高速
        • UI楽
        • コミュニティ活発、拡張容易
      • cons
        • 自由度高すぎ、デバッグ困難
        • 遅い
        • フリーじゃない
  • メディア系はヴィジュアルなプログラミング環境多い

質問等:

LL golf

キミならどう書く?
今回はU-30、コードゴルフ
ゴルフのコツ

ゴルフ→異なる言語で互いの価値を認め合う場
day*wday==65 //13日の金曜日判定
(m+1)==-~m
(a==b)&&c==(a-b)||c
pythonはリスト関係がすごい
111...11**2==1234...4321,ただしオーバーフロー
shinh先生の最適化が炸裂
a*(b+c) -> a.*b+c
「副作用があるのが悪いんじゃないですか」
「すごくださいですね」
istitle()という大変便利な関数が
みんなに愛されてるPHP
「関数のつけ方が朝思いついたとおりにつけました的な」
名前重要
「将来プロゴルファーになるにはどうすればいいですか」「ずっとゴルフしてればいいんじゃないですか」
groovyのit的なものが欲しい、forのループカウンタ的な。

パネルディスカッション「古い言語、新しい言語」

takesako/alohakun/omo/yukoba/yossy
Lispの話はしません
新しい言語:ecmascriptLLVMについて
参加者紹介

  • alohakun(ホワット・ア・ワンダフル・ワールド)
    • アロハを着ている
  • omo(steps to phantasien)
    • 本業:C++プログラマ
    • Tamarin(ASのVM)、C++
    • Adobeの素晴らしいC++コードがみられる
      • →あまりすばらしくなかった
      • でも読んだら情がわいた
    • ASに興味(複雑な言語仕様+強力なプラットホーム)
      • Yet another BK Language
    • Tamarinみどころ
      • Open(Mozilla) vs. Closed(Adobe)
      • Standard(HTML+JS) vs. Original(Flash)
      • JIT
      • VMのパフォーマンス
      • 超巨大レガシー(Gecko)との統合は可能なのか
  • 小林悠
  • yossy(beinteractive)
  • TAKESAKO先生
    • ppencodeでおなじみの

古い言語

  • 構文の制約
    • 解析技術
    • 計算機の性能
    • 例:
      • BASICはなぜLETがあったのか→構文解析がハイコストだったときの名残
      • PASCALはラベル名数字のみ→これも解析が楽になるから
  • 古い言語はコンピュータに優しい
    • 人件費+管理台帳<<<計算機資源
  • いまは逆転してきた

設定ファイルと言語パーサー

  • 言語 as 設定ファイル

バグ

  • Firebugのアイコン→実はホタル
  • Lisp=ゴキブリ(via natsutan)

Low Level Future
ターミネーター、6502で動いてる

エミュレーター、寿命を伸ばす技術

  • jsMSX

Orto

  • setTimeoutでスレッドも実装してる。
  • これ6年前ですぜ
  • 最初はFlash動かしたかった
  • JVM bytecode on js
  • java→bytecode→jsに変換して実行
  • java appletはクラスをロードするとこが遅い
  • 処理系の基本:巨大switch文
    • 言語間でスコープ解決やなんかが違うのでそのへんを整合さすのが大変
    • javaの場合Invokeが4つある
    • 実行状態7個
      • 通常
      • スレッド切り替えのチェック
      • スタティックコンストラクタの呼び出し関係
      • 例外チェック
      • など
    • ブロック単位でスレッド切り替えのチェック
  • 質問:GWTとはどう違うのか
  • iphoneでも動くよ

どこでも動くjs処理系

  • ブラウザがあればどこでも動く

logo on js
jsRuby
オレスクリプト、script type="text/oreore"
HotRuby

  • YARVの処理系をjsで
  • YARVは命令列を取り出す機能がある→jsonに変換、jsで書いたVMで動かす
  • jsだけでなくFlash版も
  • rubyとASを自由に行き来
  • Box2D(AS)をrubyコードから使う

ECMAScript

AIRFlash Player(yossy)

  • すうふ
  • SWFの仕様公開(プレイヤー作成、解析も解禁)
    • →じゃあプレイヤー作らなきゃね
    • AS3でFlash player実装
  • AS2にはevalがない→AS1の処理系をASで作る
    • パーサとかから自前
    • 高二くらいのとき書いた

ECMAScript4→3.1になった、という話は時間がないので割愛

  • web3.14

LLVM

  • Low Level Virtual Machine
  • RISC like instruction set
  • register machine
  • ライフサイクル全体にわたる変換と最適化
  • 使いどころ
    • 設定ファイルやオプションが多い環境→オプションにあわせてバイナリを最適化する
    • OS XOpenGLスタック→移植性、効率性
    • 移植性と効率性のトレードオフを解決できるならブラウザへの応用が当然考えられる
  • ブラウザ上でCコードを動かす
    • C->LLVM bytecode->AVM2命令→Native(Tamarin)
    • 過去のC資産が活用できる?
      • ゲーム→Quakeデモ
      • 言語処理系
    • なぜLLVMコードを使う?
  • 関連:
  • そもそも疑問:
    • ブラウザの上で既存資産を動かすと未来が開けるのか?
    • →ブラウザ上でjs以外の言語が動いたほうがいいという意見が出た
    • そもそもLLにfutureはあるのか?
  • GCCフロントエンドの重要性が増す?
  • フロントエンド→LLVM bytecode→最適化→バックエンド→ターゲット向けコード
  • DOOMの例(Adobeの中の人、LLVM to AS bytecode)
    • MT、メモリ確保とか色々問題があるけど解決、けっこう速く動く
    • ASで書くよりCで書いてASにしたほうが速かったりする→最適化、JIT

Tamarin as js vm

まとめ

  • 自由な開発環境
  • VM技術がデバイスの制約を開放する
  • JITで高速化
  • 君も新しい言語処理系を作ろう!!!

LT

Twitter人工無能を作ろう!(showyou)

twitterチューリングテストに通りやすい

  • 人間になるチャンス!

入力→推論→発言
鸚鵡返し、単語ルール、過去発言から生成
基礎技術:twitter API(IO)、形態素解析とか
python+Mecab
最初作ったけど人気なしなのでキャラ付け

  • アイコン、語尾
  • ランダムに規定発言

最近出た単語に対してマルコフ連鎖

Client side db storage(HTML5)

HTMLで永続的にデータを保存するしくみ
SQLでデータを扱う
作ってみた

  • dashmark
  • @サファリ
  • ブクマシステム作った
  • 検索できる
  • HTML+JSだけで完結してる
  • インクリメンタルサーチ可能
  • SQLで検索
  • クエリの結果は非同期
  • 検索範囲絞込みのためにviewを使い捨ててる(一人で使えるのでやりたい放題)
  • スキーマのバージョニング機能
  • domainが異なるとアクセスできない(Cookieと同じくらい)

私は如何にしてNarioをつくり、1面をクリアしたか

  • I am cruby@hatena
  • Crubyこみった
  • rubyで書いた横スクロールアクション
  • Ruby GCによってGUIがグッと固まるさまがみたかった」
  • どう見てもブラックです
  • →大幅にグラフィックを修正、クリーン!!!!
  • インタラクティブなのは受けるなー
  • 最後にGC countが出る

Pitで救う世界(yoshiori)

  • Pit使えやという話
  • 第一言語:java
  • プレゼンがかっこいい
  • 「ユーザ名とパスワードは書き換えてください」
    • そういったことは面倒なので書きたくないです
    • 利用者側としても面倒
    • 無駄な作業でGDPが大幅に下がっている
  • dankogai kogaidan
  • Pit:あかうんとまねじめんとつーる
  • いろんな言語から使える
  • yamlでアカウント情報保存

Unbabel - LLにLLを埋め込んでみた(yhara)

  • 島根は鳥取の左
  • 言語の未来→いろんな言語を使い分ける時代?
  • インラインアセンブラPerlにCとか
  • 次はLLにLLを埋め込む時代
  • Rubyskell
  • Unbabel: LLにLLを埋め込む
    • Rubyに埋め込まれたSchemeのコードにRubyを埋め込む
    • Ruby1.8にRuby1.9を埋め込むとか
    • 今後の展望:BFを埋め込む
      • ロジック部分だけbfで組むことができる
      • →業務アプリがbfで書ける
    • Unbabelプロトコルを実装すれば使える

RoRで実現する自走式webサーバー

  • Hacker's Cafe
  • Rails+AjaxチョロQを走らすとか
  • 自走式webサーバー
  • iPhoneRoRDelphi→ラジコン、webサーバが自走する
  • 「リンクをクリックするとwebサーバが走行します」
  • 未来を模索するためのプロトタイピングツールとしてのLL
  • ゆいせき

ちょっと草植えときますね型言語Grass(うえのかつひろ)

  • wWvの三文字、ラムダ計算ベース、形式的定義
  • formalism(説明割愛)重要
  • 関数型言語
  • ニワン語による実装もある
  • moshに標準添付らしい

Scilab数値計算(Y.Sawa)

  • Matlabっぽい言語、フリー
  • INRIAで開発(Ocaml,Coq)
  • 微分方程式の数値解とかビジュアル言語で可視化できるとかなんとか
  • Scilab Toolbox Contestに参加してください

yet another prototype oriented NewtonScriptによるもうひとつのプロトタイプ指向

超未来言語GALLINA

  • INRIAで開発
  • OcamlHaskellに似てる
  • 対話環境、パターンマッチ、高階関数、静的検証、λ式による抽象化
  • 1stclass function
  • 1stclass type
    • template的なことを関数で
    • 数値から型を生成する
  • 静的検証ができる
    • Definition文で定義
    • Theorem文で性質を保障することができる
    • Definition cookie_of(u:User) ...
    • Theorem T:forall(u:User) size(cookie_of u)<4000 (このあとに「証明」なるものを記述)
  • このイベントで安全性とかについての言及が全然ないのは問題

未来の並列プログラミング言語としてのHaskell

  • Haskellの並列化機能が強化されつつある
  • Data Parallel Haskell
    • 並列配列
    • 自動ベクトル化してくれるらしい