Lightweight Language Planet

Aug 20, 2011   #つれづれ  :

Lightweight Language Planetに参加してきました。メタプログラミングについてのセッション目当てで参加してきました。

IPv6 Hackathon

IPv6を使用している人が結構いることに驚きを感じる。

やっぱりこれからはIPv6でしょう。

IPv6対応のウェブサイトにつなぐと、色々と楽しいうごきをするサイトがある。

メタプログラミングの光と闇

  • 出演者
    • Perl: @lestrrat
    • Python: @kdmsnr
    • Ruby: @moriyoshi
    • Haskell: @kazu_yamamoto
メタプログラミングとは

プログラムを作るプログラム

広義のメタプログラミング

  • 機械語の動的生成
  • 魔法のマクロ
  • etc

狭義のメタプログラミング

  • 開発効率を重視
  • DSL
  • DRY
  • Agile
  • テスト

確立された開発手法、スタイル

Perlのメタプログラミング

evalが使えます!

Perlでは名前空間に関数、変数をくっつけることは自由

Devel::Declareを使用すると、Perlのパーサにフックすることができる!

Rubyのメタプログラミング

Rubyのメタプログラミング: 内部DSLを書くこと

新しい語彙の増加→新しい視点

「名前重要」文化

Pythonのメタプログラミング

メタプログラミングの定義は、みんなの心のなかにある!

  • exec, eval
  • メタクラス (a type that generates a type)
  • デコレータ (関数を生成する関数を呼び出す)
  • 各種メタ情報
  • compile() / astモジュール

Pythonは言語内DSLが苦手

演算子オーバロードが可能

Pythonから別の言語を生成する

Haskellのメタプログラミング

なんかすごかった!

ディスカッション

Javascriptプログラマのための全方位的完全武装ガイド (ma.la)

自己紹介

ma.laさんは UI エンジニアという立ち位置のはずが、専門分野に特化しておらず何でも屋

何でも屋vs専門家: 異なるレイヤーの知識が活かせる・器用貧乏になりがち

良いUIは競争力になり、伝搬力がある

UIが競争力がなくなることが最終的な目標

フロントエンドエンジニア?良いデザインのためには複数言語の知識が必要

あらゆるレイヤにボトルネックの存在がある!

Javascriptの進め

  • 大抵の環境で最初から入っている
  • ネイティブアプリでもよく使われている
  • できることが増えている
  • 必修言語としてのJavascript

サーバが信頼できない前提でのAPI設計

“if we are evil” rather than “Don’t be evil”

驚き最小の原則に反する