blog/content/post/2011-08-20-lightweight-lang...

252 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Lightweight Language Planet
author: kazu634
date: 2011-08-20
url: /2011/08/20/lightweight-language-planet/
wordtwit_post_info:
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5443;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
categories:
- つれづれ
---
<div class="section">
<p>
Lightweight Language Planetに参加してきました。メタプログラミングについてのセッション目当てで参加してきました。
</p>
<h4>
IPv6 Hackathon
</h4>
<p>
IPv6を使用している人が結構いることに驚きを感じる。
</p>
<p>
やっぱりこれからはIPv6でしょう。
</p>
<p>
IPv6対応のウェブサイトにつなぐと、色々と楽しいうごきをするサイトがある。
</p>
<h4>
メタプログラミングの光と闇
</h4>
<ul>
<li>
出演者 <ul>
<li>
Perl: @lestrrat
</li>
<li>
Python: @kdmsnr
</li>
<li>
Ruby: @moriyoshi
</li>
<li>
Haskell: @kazu_yamamoto
</li>
</ul>
</li>
</ul>
<h5>
メタプログラミングとは
</h5>
<blockquote>
<p>
プログラムを作るプログラム
</p>
</blockquote>
<p>
広義のメタプログラミング
</p>
<ul>
<li>
機械語の動的生成
</li>
<li>
魔法のマクロ
</li>
<li>
etc
</li>
</ul>
<p>
狭義のメタプログラミング
</p>
<ul>
<li>
開発効率を重視
</li>
<li>
DSL
</li>
<li>
DRY
</li>
<li>
Agile
</li>
<li>
テスト
</li>
</ul>
<p>
確立された開発手法、スタイル
</p>
<h5>
Perlのメタプログラミング
</h5>
<p>
evalが使えます
</p>
<p>
Perlでは名前空間に関数、変数をくっつけることは自由
</p>
<p>
Devel::Declareを使用すると、Perlのパーサにフックすることができる
</p>
<h5>
Rubyのメタプログラミング
</h5>
<p>
Rubyのメタプログラミング: 内部DSLを書くこと
</p>
<p>
新しい語彙の増加→新しい視点
</p>
<p>
「名前重要」文化
</p>
<h5>
Pythonのメタプログラミング
</h5>
<p>
メタプログラミングの定義は、みんなの心のなかにある!
</p>
<ul>
<li>
exec, eval
</li>
<li>
メタクラス (a type that generates a type)
</li>
<li>
デコレータ (関数を生成する関数を呼び出す)
</li>
<li>
各種メタ情報
</li>
<li>
compile() / astモジュール
</li>
</ul>
<p>
Pythonは言語内DSLが苦手
</p>
<p>
演算子オーバロードが可能
</p>
<p>
Pythonから別の言語を生成する
</p>
<h5>
Haskellのメタプログラミング
</h5>
<p>
なんかすごかった!
</p>
<h5>
ディスカッション
</h5>
<h4>
Javascriptプログラマのための全方位的完全武装ガイド (ma.la)
</h4>
<h5>
自己紹介
</h5>
<p>
ma.laさんは UI エンジニアという立ち位置のはずが、専門分野に特化しておらず何でも屋
</p>
<p>
何でも屋vs専門家: 異なるレイヤーの知識が活かせる・器用貧乏になりがち
</p>
<p>
良いUIは競争力になり、伝搬力がある
</p>
<p>
UIが競争力がなくなることが最終的な目標
</p>
<p>
フロントエンドエンジニア?良いデザインのためには複数言語の知識が必要
</p>
<p>
あらゆるレイヤにボトルネックの存在がある!
</p>
<h4>
Javascriptの進め
</h4>
<ul>
<li>
大抵の環境で最初から入っている
</li>
<li>
ネイティブアプリでもよく使われている
</li>
<li>
できることが増えている
</li>
<li>
必修言語としてのJavascript
</li>
</ul>
<p>
サーバが信頼できない前提でのAPI設計
</p>
<p>
&#8220;if we are evil&#8221; rather than &#8220;Don&#8217;t be evil&#8221;
</p>
<p>
驚き最小の原則に反する
</p>
</div>