今日は何の話をするのかLightweight Language Navigation ’06

法林 浩之
日本UNIXユーザ会
hourin@suplex.gr.jp

Lightweight Languageの起源

Lightweight Languageに関する話をいろいろと
前半: 一般的な話題
LLとは何か言語の紹介
LLの特徴(いろんな意味で)
後半: 私とLL
私的LL史
LLイベントについて
題名について意味的には「Lightweight Languageの世界にご案内」
なぜこういう題名になったかは…

Lightweight LanguageとはLightweight Language 1(LL1)
http://ll1.ai.mit.edu/
2001年に米国MITで開催
革新的なプログラミング言語について語り合うイベント
対象にしたい言語をなんとなく包含する概念として「Lightweight Language」という言葉が作られた「スクリプト言語」でも「動的型付け言語」でも外れてしまう言語があるから軽い頭脳労働で高い生産性を発揮できるプログラミングできる言語

Lightweight Language 2(LL2)
http://ll2.ai.mit.edu/
2002年に米国MITで開催
まつもとさん(Ruby作者)がLightweight Languageの定義を提案
まつもとさんの提案内容(概略)より少ない「脳力」の消費で開発が行えるプログラミング言語「脳力」＝「プログラミング活動中に消費される頭脳パワー」
消費脳力が少ない＝少ない労力でプログラミングできる

どういう言語がLLか
どういう言語が手軽かはその人によって異なるので、極論すると各自の主張に委ねられてしまうが…
言語仕様で見ると、以下の性質を持つ言語が多い
スクリプト言語
インタプリタによる実行ができる変数の型が動的に決まる(型宣言不要)

直訳すると「軽量言語」だが…
言語そのものの軽重を指しているわけではない
言語仕様、動作などプログラマへの負担の軽重を指していると考えた方がよい
手軽さ、短工期など

言語紹介

Perl

主にLLイベントに登場した言語を中心に紹介

作者: Larry Wallさん

数が非常に多いのでクラス分けして紹介
四大言語
Perl,Ruby,Python,PHP
個別に紹介
プログラム例付き
その他の言語独断で分類して手短に紹介

特徴
LLの中では歴史の長い言語
強力な正規表現、自由度の高い文法用途
本来の用途としては汎用
CGIなどWeb方面で有名になったユーザグループ
Perl Mongers(パール・モンガーズ)
国でなく地域ごとに作られる
日本ではShibuya.pmなど

Ruby

Python

作者: まつもとゆきひろさん

作者: Guido van Rossumさん

特徴
徹底したオブジェクト指向
シンプルな文法特徴
オブジェクト指向のスクリプト言語
豊富なライブラリ
ブロックを字下げの文字数で指定

用途
本来の用途としては汎用
Ruby on Rails, tDiaryなどWeb方面で有名になってきた
ユーザグループ
永らく組織的なユーザグループがなかった
2004年から「日本Rubyの会」が活動中

用途
本来の用途としては汎用ZopeやLinux系OSのインストーラなどで利用
ユーザグループ
日本Pythonユーザ会(PyJUG)

PHP

プログラム例

作者: 1人ではなくグループ/企業も参加しての開発同じアルゴリズムのプログラムを四大言語で実装してみた

特徴
動的Webページの生成を目的とする言語
それ向けの機能や関数が充実
LLの中では、特定用途向けに作られた言語の代表的存在

アルゴリズム
6つの言語からなるリストを用意
言語を1つ設定
その言語がリストにあるかどうか判定
ある → 「LLです」と出力ない → 「LLじゃないかも」と出力
上記の処理をサブルーチン化し、メインルーチンから呼び出す

用途
Webアプリケーション
ユーザグループ
日本PHPユーザ会

Perlのプログラム例

Rubyのプログラム例

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;}

def is_ll(lang)ll = [’Perl’,’Ruby’,’Python’,’PHP’,’Jython’,’Groovy’]if (ll.include?(lang))
ans = lang + "はLLです"else
ans = lang + "LLじゃないかも"
endendprint is_ll(’Perl’);print(is_ll(’Ruby’))Pythonのプログラム例

PHPのプログラム例

def is_ll(lang):ll = [’Perl’,’Ruby’,’Python’,’PHP’,’Jython’,’Groovy’]
if lang in ll:
ans = lang + "はLLです"else:
ans = lang + "はLLじゃないかも"
return ans<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;}

print is_ll(’Python’)echo is_ll(’PHP’);?></body></html>

その他のLLWeb用言語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)

LLの魅力
敷居が低い
最初に覚える約束事が少ない
コンパイルとか型宣言とかとりあえず見よう見まねで短いプログラムを書いても動く
この点を活かして、教育にも利用されている(Python,Squaekなど)
生産性が高いJavaやCで書くのに比べてプログラムが短い
プログラミング工数の短縮につながる豊富なライブラリが手助けになる(CPAN,PEARなど)
自由で楽しいLLプログラマ達は楽しそうにプログラミングしている
オープンソースの言語/ライブラリも多いので、拡張しやすい

LLの暗黒面「いいかげんな」プログラムでも動いてしまう
文法的にいいかげん/設計がいいかげん
きちんとしたプログラムを書くには、それなりの教育や工数が必要
大人数での開発実績がまだ足りないと思う
例えば、Javaで100人必要なプログラムをRubyで書こうと思っても、すぐに100人用意できない
単なるプログラマ不足なのか、向き不向きの問題なのかは、不明

私的LL史
1987年、学生実験で使ったUNIXのシェルが(今にして思えば)最初のLL
もちろん当時LLという言葉はない
ちょっとしたコマンドの羅列(シェルスクリプト)でまとまった処理ができることに衝撃を受けた
1996年、jus勉強会でPerlを勉強
謎の正規表現を書くといろんな処理ができて便利と思った
以後、短いCGIなどを書くようになる
2000年、Internet WeekのチュートリアルでPHPを勉強
HTMLの中にプログラムを埋め込んで出力できるなんて！と感動
以後、くだらないWebアプリケーションを作るようになる

そして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」にLightweight Language Saturday (LL Saturday)
日程: 2003年8月9日(土)場所: 渋谷・法学館
参加費: 2000円(Tシャツ付き)
参加者: 150人＋スタッフ・発表者50人
セッション
Language Update、LLとオブジェクト指向について、キミならどう書く
主な出来事
定員200人が4日間で申込締切
当日、台風襲来で参加者減Lightweight Language Weekend (LL Weekend)
日程: 2004年8月7日(土)〜8日(日)場所: 新宿・日本電子専門学校
参加費: 一般3000円、学生1500円(2日間通し、Tシャツ付き)
参加者: 250人＋スタッフ・発表者50人
セッション
初日: Language Update、LLを仕事に、キミならどう書く
2日目: LLとblog、Lightening Talk、その場でどう書く
主な出来事
主要blogサービス/ツール関係者集結
参加申込にチケットぴあを導入

Lightweight Language Day and Night (LLDN)
日程: 2005年8月27日(土)昼の部
場所: 新宿・四谷区民ホール
参加費: 1500円
参加者: 300人＋スタッフ・発表者50人
セッション: Language Update、フレームワーク対決、キミならどう書く
夜の部
場所: 新宿・ロフトプラスワン
参加費: 1500円(Tシャツ付き、飲食代別)
参加者: 90人＋スタッフ・発表者10人
セッション: だめ自慢、デモ自慢
主な出来事
プログラムを全く発表してないのに夜の部売り切れ(定員120人)
チケットはローソンチケットで販売

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年: 電卓(規定演技(漢数字電卓)および自由演技)

LLイベントに見るLLユーザの実態
若い人が多い！
参加者の最大勢力は20代
スタッフの最大勢力は30代…
ブログなどWebサービスのユーザ/開発者世代に重なる
Rubyの好きな人が非常に多い
参加者アンケートでも常に支持率1位(しかも2位に大差)Javaの嫌いな人が多い
本当はLLで書きたいけど何らかの制約で仕方なくJavaで書いている人々が多いと思われる
たぶんその多くはRubyユーザ
LLの中ではPHPとPerlが不人気
Perlは支持/不支持とも多い
言語の好き嫌いはどうやって決まる？
自発的に使うか/外的要因で使わされるかで決まるのでは？という意見あり
Perl,PHP,Javaは業務での利用率が(他言語に比べて)高いので、使わされる率が高いかもLLイベントの成果
最大の成果は「Lightweight Language」という言葉を日本に定着させたこと
マスメディアで目にする機会も増えた
知名度の低い言語がアピールする機会を作った
参加者にとっては逆に知る機会になる
例としては、初年度のPython、2年目以降の関数型言語など言語をまたぐ形でプログラマー達の交流の機会を作った
言語コミュニティにとってLLイベントは「アウェーの試合」
言語コミュニティ間の関係は比較的穏やか
運営面ではチケット制の導入が大きい
当日の現金取り扱いが大幅に減る
当日欠席が多くても収入が減らない(笑)
他団体のイベントでも採用例が増えつつある
2006年のLLイベントも準備中

まとめLightweight Languageの世界にご案内してみました
これからLLはもっと大きな流れになると予想している
プログラミングの主流になるかもしれない
これからもLLの発展を脇で支えたい
今日の資料の所在
http://www.suplex.gr.jp/~hourin/juskansai200602/
参考文献
Software Design 2006年3月号「Lightweight Language最新動向2006」