Lightweight Language Navigation '06
法林 浩之
日本UNIXユーザ会
hourin@suplex.gr.jp
(page 1)
今日は何の話をするのか
- Lightweight Languageに関する話をいろいろと
- 前半: 一般的な話題
- LLとは何か
- 言語の紹介
- LLの特徴(いろんな意味で)
- 後半: 私とLL
- 題名について
- 意味的には「Lightweight Languageの世界にご案内」
- なぜこういう題名になったかは…
(page 2)
Lightweight Languageの起源
- Lightweight Language 1(LL1)
- 対象にしたい言語をなんとなく包含する概念として
「Lightweight Language」という言葉が作られた
- 「スクリプト言語」でも「動的型付け言語」でも
外れてしまう言語があるから
- Lightweight Language 2(LL2)
- まつもとさんの提案内容(概略)
- より少ない「脳力」の消費で開発が行えるプログラミング言語
- 「脳力」=「プログラミング活動中に消費される頭脳パワー」
- 消費脳力が少ない=少ない労力でプログラミングできる
(page 3)
Lightweight Languageとは
- 軽い頭脳労働で高い生産性を発揮できるプログラミングできる言語
- 直訳すると「軽量言語」だが…
- 言語そのものの軽重を指しているわけではない
- プログラマへの負担の軽重を指していると考えた方がよい
- どういう言語がLLか
- どういう言語が手軽かはその人によって異なるので、
極論すると各自の主張に委ねられてしまうが…
- 言語仕様で見ると、以下の性質を持つ言語が多い
- スクリプト言語
- インタプリタによる実行ができる
- 変数の型が動的に決まる(型宣言不要)
(page 4)
言語紹介
- 主にLLイベントに登場した言語を中心に紹介
- 数が非常に多いのでクラス分けして紹介
- 四大言語
- Perl,Ruby,Python,PHP
- 個別に紹介
- プログラム例付き
- その他の言語
(page 5)
Perl
- 作者: Larry Wallさん
- 特徴
- LLの中では歴史の長い言語
- 強力な正規表現、自由度の高い文法
- 用途
- 本来の用途としては汎用
- CGIなどWeb方面で有名になった
- ユーザグループ
- Perl Mongers(パール・モンガーズ)
- 国でなく地域ごとに作られる
- 日本ではShibuya.pmなど
(page 6)
Ruby
- 作者: まつもとゆきひろさん
- 特徴
- 用途
- 本来の用途としては汎用
- Ruby on Rails, tDiaryなどWeb方面で有名になってきた
- ユーザグループ
- 永らく組織的なユーザグループがなかった
- 2004年から「日本Rubyの会」が活動中
(page 7)
Python
- 作者: Guido van Rossumさん
- 特徴
- オブジェクト指向のスクリプト言語
- 豊富なライブラリ
- ブロックを字下げの文字数で指定
- 用途
- 本来の用途としては汎用
- ZopeやLinux系OSのインストーラなどで利用
- ユーザグループ
(page 8)
PHP
- 作者: 1人ではなくグループ/企業も参加しての開発
- 特徴
- 動的Webページの生成を目的とする言語
- それ向けの機能や関数が充実
- LLの中では、特定用途向けに作られた言語の代表的存在
- 用途
- ユーザグループ
(page 9)
プログラム例
- 同じアルゴリズムのプログラムを四大言語で実装してみた
- アルゴリズム
- 6つの言語からなるリストを用意
- 言語を1つ設定
- その言語がリストにあるかどうか判定
- ある → 「LLです」と出力
- ない → 「LLじゃないかも」と出力
- 上記の処理をサブルーチン化し、メインルーチンから呼び出す
(page 10)
Perlのプログラム例
sub is_ll {
my ($lang) = @_;
my @ll = ('Perl','Ruby','Python','PHP','Jython','Groovy');
if (grep(/$lang/,@ll) >= 1) {
$ans = $lang . "はLLです";
} else {
$ans = $lang . "はLLじゃないかも";
}
return $ans;
}
print is_ll('Perl');
(page 11)
Rubyのプログラム例
def is_ll(lang)
ll = ['Perl','Ruby','Python','PHP','Jython','Groovy']
if (ll.include?(lang))
ans = lang + "はLLです"
else
ans = lang + "LLじゃないかも"
end
end
print(is_ll('Ruby'))
(page 12)
Pythonのプログラム例
def is_ll(lang):
ll = ['Perl','Ruby','Python','PHP','Jython','Groovy']
if lang in ll:
ans = lang + "はLLです"
else:
ans = lang + "はLLじゃないかも"
return ans
print is_ll('Python')
(page 13)
PHPのプログラム例
<html>
<head>
<TITLE> Lightweight Language </TITLE>
<meta http-equiv="content-type" content="text/html; charset=euc-jp">
</head>
<body>
<?php
function is_ll($lang) {
$ll = array('Perl','Ruby','Python','PHP','Jython','Groovy');
if (in_array($lang,$ll)) {
$ans = $lang . "はLLです";
} else {
$ans = $lang . "はLLじゃないかも";
}
return $ans;
}
echo is_ll('PHP');
?>
</body>
</html>
(page 14)
その他のLL
- Web用言語
- JavaScript: ajaxで再びスポットが当たる
- Curl: 音声や3Dグラフィック再生可
- Java連携用言語
- Jython: Python言語をJavaで実装したもの
- Groovy: Java上で動作する新規設計の言語
- Pnuts: 同じくJava上で動作するスクリプト言語
- Rhino: JavaScript言語をJavaで実装したもの
- ビジュアル系言語
- Squeak: Smalltalk系列、高機能なマルチメディア処理
- 関数型言語
- LISP: S式で記述、Common LISPやschemeなど系列言語多数
- Haskell: Perl6の処理系がこれで試作された
- 古典言語
- shell: UNIXには標準搭載
- sed: 定型的テキスト処理ツール
- awk: 最近は国際化やXML対応が進行中(Xgawk)
(page 15)
LLの魅力
- 敷居が低い
- 最初に覚える約束事が少ない
- とりあえず見よう見まねで短いプログラムを書いても動く
- この点を活かして、教育にも利用されている(Python,Squaekなど)
- 生産性が高い
- JavaやCで書くのに比べてプログラムが短い
- プログラミング工数の短縮につながる
- 豊富なライブラリが手助けになる(CPAN,PEARなど)
- 自由で楽しい
- LLプログラマ達は楽しそうにプログラミングしている
- オープンソースの言語/ライブラリも多いので、拡張しやすい
(page 16)
LLの暗黒面
- 「いいかげんな」プログラムでも動いてしまう
- 文法的にいいかげん/設計がいいかげん
- きちんとしたプログラムを書くには、それなりの教育や工数が必要
- 大人数での開発実績がまだ足りないと思う
- 例えば、Javaで100人必要なプログラムを
Rubyで書こうと思っても、すぐに100人用意できない
- 単なるプログラマ不足なのか、向き不向きの問題なのかは、不明
(page 17)
私的LL史
- 1987年、学生実験で使ったUNIXのシェルが(今にして思えば)最初のLL
- もちろん当時LLという言葉はない
- ちょっとしたコマンドの羅列(シェルスクリプト)で
まとまった処理ができることに衝撃を受けた
- 1996年、jus勉強会でPerlを勉強
- 謎の正規表現を書くといろんな処理ができて便利と思った
- 以後、短いCGIなどを書くようになる
- 2000年、Internet WeekのチュートリアルでPHPを勉強
- HTMLの中にプログラムを埋め込んで出力できるなんて!と感動
- 以後、くだらないWebアプリケーションを作るようになる
(page 18)
そしてLLイベントへ
- 単独/少数言語でのイベントは昔からやっていた
- Perl Conference Japan(1998年、オライリー・ジャパン主催、
jus運営)
- Rubyワークショップ(1999年、jus主催)
- Perl/Ruby Conference(2000年、オライリー・ジャパン主催、
jus後援)
- PHPワークショップ(2000年、jus主催)
- YARPC 19101(2001年、Tokyo.pm&jus主催)
- LLイベント発祥の経緯
- 2002年末頃にアスキーでRubyのイベントを企画していたが、
途中で対象をスクリプト言語一般に変更
- jusでも同様のイベントを考えていたので一緒に企画することに
- Rubyに加えてPerlとPHPとPythonを呼んだ
- イベント名称
- 当初jusで考えていた名前は「YA.C」
- 企画段階でLightweight Languageという言葉が輸入されたので採用
- 最初は日曜開催予定で「LL Sunday」のはずだったが、
会場が土曜しか取れず「LL Saturday」に
(page 19)
Lightweight Language Saturday (LL Saturday)
- 日程: 2003年8月9日(土)
- 場所: 渋谷・法学館
- 参加費: 2000円(Tシャツ付き)
- 参加者: 150人+スタッフ・発表者50人
- セッション
- Language Update、LLとオブジェクト指向について、キミならどう書く
- 主な出来事
- 定員200人が4日間で申込締切
- 当日、台風襲来で参加者減
(page 20)
Lightweight Language Weekend (LL Weekend)
- 日程: 2004年8月7日(土)〜8日(日)
- 場所: 新宿・日本電子専門学校
- 参加費: 一般3000円、学生1500円(2日間通し、Tシャツ付き)
- 参加者: 250人+スタッフ・発表者50人
- セッション
- 初日: Language Update、LLを仕事に、キミならどう書く
- 2日目: LLとblog、Lightening Talk、その場でどう書く
- 主な出来事
- 主要blogサービス/ツール関係者集結
- 参加申込にチケットぴあを導入
(page 21)
Lightweight Language Day and Night (LLDN)
- 日程: 2005年8月27日(土)
- 昼の部
- 場所: 新宿・四谷区民ホール
- 参加費: 1500円
- 参加者: 300人+スタッフ・発表者50人
- セッション: Language Update、フレームワーク対決、キミならどう書く
- 夜の部
- 場所: 新宿・ロフトプラスワン
- 参加費: 1500円(Tシャツ付き、飲食代別)
- 参加者: 90人+スタッフ・発表者10人
- セッション: だめ自慢、デモ自慢
- 主な出来事
- プログラムを全く発表してないのに夜の部売り切れ(定員120人)
- チケットはローソンチケットで販売
(page 22)
LLイベント名物セッション
- Language Update
- 各言語の紹介および近況報告
- 出場言語
- 2003年: Perl, PHP, Python, Ruby (4言語)
- 2004年: Perl, PHP, Python, Ruby,
Curl, Gauche, Haskell, Squeak,
Groovy, Pnuts, Common Lisp(11言語)
- 2005年: Perl, PHP, Python, Ruby,
Curl, Gauche, Haskell, Squeak, awk, ML (10言語)
- キミならどう書く
- 「お題」に対して各言語でプログラムを実装し比較検討
- お題
- 2003年: RSSビューア、Apacheのログ解析、
じゃんけん(対戦あり)
- 2004年: ls -lRの出力を操作するシェル、
n-Queensゲーム(対戦あり)、
Webスケジューラ(その場でどう書く)
- 2005年: 電卓(規定演技(漢数字電卓)および自由演技)
(page 23)
LLイベントに見るLLユーザの実態
- 若い人が多い!
- 参加者の最大勢力は20代
- ブログなどWebサービスのユーザ/開発者世代に重なる
- Rubyの好きな人が非常に多い
- 参加者アンケートでも常に支持率1位(しかも2位に大差)
- Javaの嫌いな人が多い
- 本当はLLで書きたいけど何らかの制約で
仕方なくJavaで書いている人々が多いと思われる
- LLの中ではPHPとPerlが不人気
- 言語の好き嫌いはどうやって決まる?
- 自発的に使うか/外的要因で使わされるかで決まるのでは?
という意見あり
- Perl,PHP,Javaは業務での利用率が(他言語に比べて)高いので、
使わされる率が高いかも
(page 24)
LLイベントの成果
- 最大の成果は「Lightweight Language」という言葉を日本に定着させたこと
- 知名度の低い言語がアピールする機会を作った
- 参加者にとっては逆に知る機会になる
- 例としては、初年度のPython、2年目以降の関数型言語など
- 言語をまたぐ形でプログラマー達の交流の機会を作った
- 言語コミュニティにとってLLイベントは「アウェーの試合」
- 言語コミュニティ間の関係は比較的穏やか
- 運営面ではチケット制の導入が大きい
- 当日の現金取り扱いが大幅に減る
- 当日欠席が多くても収入が減らない(笑)
- 他団体のイベントでも採用例が増えつつある
- 2006年のLLイベントも準備中
(page 25)
まとめ
- Lightweight Languageの世界にご案内してみました
- これからLLはもっと大きな流れになると予想している
- プログラミングの主流になるかもしれない
- これからもLLの発展を脇で支えたい
- 今日の資料の所在
- 参考文献
- Software Design 2006年3月号
「Lightweight Language最新動向2006」
(page 26)