SlideShare a Scribd company logo
Real World Common Lisp
Lispを書け
Speaker: Hidetoshi ITO
@cddadr
Lispって何だ
Common Lispは史上初の
実用的なオブジェクト指向
プログラミング言語
※諸説あり
Googleが中心に開発している
Go言語はCommon Lispのオブ
ジェクト指向モデルと似ている
※データとメソッドを分離するスタイル
最適化すればC言語よりも速く
動くプログラムを書ける
※Node.jsで使われてるhttp-parserの6.4倍速いHTTPパーサー
http://blog.8arrow.org/entry/2014/10/23/063044
マクロによるゼロオーバーヘッド
抽象化・メタプログラミング
※構文抽象化を繰り返すことで速度を保ちつつ可読性を向上させる
マクロによる抽象化の例
(dotimes (idx 5)
(format t “~A回目~%” idx))
macroexpand ->
(let ((idx 0))
(tagbody loop-tag
(if (>= idx 5)
nil
(progn
(declare (type unsigned-byte idx))
(format t “~A回目~%” idx)
(1+ idx)
(go loop-tag)))))
macroexpand-1 ->
(do ((idx 0 (1+ idx)))
((>= idx 5) nil)
(declare (type unsigned-byte idx))
(format t “~A回目~%” idx))
実行結果
1
2
3
4
5
REPLで超高速プロトタイピング
※エディタと協調して働くREPLでリアルタイムプログラミング
ベンチマーク・プロファイリング・
最適化の黄金サイクル
※ベンチマークマクロと処理系のプロファイリングツールを活用
強力で扱いやすいデバッガ
※スタックトレースも落ちたその場で見れる
Web開発用途での不便は無い
むしろ速いし書きやすい
※今年、朝日新聞傘下となったサムライト株式会社はCLでWeb開発
機械学習向けのライブラリ
CL-CUDAでGPGPUも出来る
※MNISTのベンチではChainerとTensorflow以上の速度
http://d.hatena.ne.jp/masatoi/20160523/1463993398
Time
Lisp唯一の欠点
スマホ対応がいまいち
※moclというスマホアプリ開発環境が提供されているが有料
まとめ
Common Lispは現代の
開発水準にも劣らない
ライブラリ数はやや少ないが
特に不便は感じない
※Common Lispライブラリのドキュメント集約サイト
http://quickdocs.org/
Lispで開発されている主なもの
• Emacs
• 某ソフトウェア情報学部で使われてる
• Mezzano
• 100%Common Lispで書かれたOS
• Yahoo! ストア
• 現行のものはC++とPerlで書き直されている
• Maxima
• 代数的数式処理エキスパートシステム
• Grammarly
• 高精度英文校正サービス(スタートアップ)
• Karen
• Webブラウザエンジン(開発中)
Realize your idea with Lisp!
Start here
http://lisp-lang.org/
My blog
http://progn.hateblo.jp/

More Related Content

What's hot

2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
Tom Hayakawa
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
t-sin
 
Common Lispっぽいものをつくっています
Common LispっぽいものをつくっていますCommon Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
t-sin
 
Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)
Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)
Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)
Shunsuke Kanda
 
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろう
blackenedgold
 
[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...
[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...
[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...
Deep Learning JP
 
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
blackenedgold
 
[ML論文読み会資料] Teaching Machines to Read and Comprehend
[ML論文読み会資料] Teaching Machines to Read and Comprehend[ML論文読み会資料] Teaching Machines to Read and Comprehend
[ML論文読み会資料] Teaching Machines to Read and Comprehend
Hayahide Yamagishi
 
ChEMBLを使おう
ChEMBLを使おうChEMBLを使おう
ChEMBLを使おう
Kazufumi Ohkawa
 
Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
Kazufumi Ohkawa
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
Shintaro Takemura
 

What's hot (11)

2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a2012 12 08_ngk_osm_a
2012 12 08_ngk_osm_a
 
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくったCommon Lisp製のテキストエディタLemにフレーム多重化機能をつくった
Common Lisp製のテキストエディタLemにフレーム多重化機能をつくった
 
Common Lispっぽいものをつくっています
Common LispっぽいものをつくっていますCommon Lispっぽいものをつくっています
Common Lispっぽいものをつくっています
 
Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)
Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)
Path Decompositionを用いたメモリ効率の良い動的キーワード辞書の実装法(ポスター)
 
Common Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろうCommon Lisp でビッグデータを作ろう
Common Lisp でビッグデータを作ろう
 
[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...
[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...
[DL輪読会]Deep Recurrent Generative Decoder For Abstractive Text Summarization(E...
 
CL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとしたCL21で色々なデータ構造を実装してみようとした
CL21で色々なデータ構造を実装してみようとした
 
[ML論文読み会資料] Teaching Machines to Read and Comprehend
[ML論文読み会資料] Teaching Machines to Read and Comprehend[ML論文読み会資料] Teaching Machines to Read and Comprehend
[ML論文読み会資料] Teaching Machines to Read and Comprehend
 
ChEMBLを使おう
ChEMBLを使おうChEMBLを使おう
ChEMBLを使おう
 
Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
 
NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化NetworkXによる語彙ネットワークの可視化
NetworkXによる語彙ネットワークの可視化
 

Viewers also liked

Boose,Kayleigh_FinalPaper
Boose,Kayleigh_FinalPaperBoose,Kayleigh_FinalPaper
Boose,Kayleigh_FinalPaperKayleigh Boose
 
Life maximazition (1)
Life maximazition (1)Life maximazition (1)
Life maximazition (1)
Sandip Mavchi
 
2 fi 01(ap-imports)
2 fi 01(ap-imports)2 fi 01(ap-imports)
2 fi 01(ap-imports)AMIT SHINDE
 
Project6(1)
Project6(1)Project6(1)
Project6(1)
David Lee
 
WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15
WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15
WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15
Digiday
 
TDC2016POA | Trilha Analise de Negocios - Business Coach, o Analista de Negó...
TDC2016POA | Trilha Analise de Negocios -  Business Coach, o Analista de Negó...TDC2016POA | Trilha Analise de Negocios -  Business Coach, o Analista de Negó...
TDC2016POA | Trilha Analise de Negocios - Business Coach, o Analista de Negó...
tdc-globalcode
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたblackenedgold
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったかm2ym
 
Marco legal bolivia
Marco legal boliviaMarco legal bolivia
Marco legal bolivia
ProColombia
 

Viewers also liked (10)

Boose,Kayleigh_FinalPaper
Boose,Kayleigh_FinalPaperBoose,Kayleigh_FinalPaper
Boose,Kayleigh_FinalPaper
 
Presentation1 (1)
Presentation1 (1)Presentation1 (1)
Presentation1 (1)
 
Life maximazition (1)
Life maximazition (1)Life maximazition (1)
Life maximazition (1)
 
2 fi 01(ap-imports)
2 fi 01(ap-imports)2 fi 01(ap-imports)
2 fi 01(ap-imports)
 
Project6(1)
Project6(1)Project6(1)
Project6(1)
 
WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15
WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15
WTF is the Cost of Native? - WTF Native Advertising UK, 10/8/15
 
TDC2016POA | Trilha Analise de Negocios - Business Coach, o Analista de Negó...
TDC2016POA | Trilha Analise de Negocios -  Business Coach, o Analista de Negó...TDC2016POA | Trilha Analise de Negocios -  Business Coach, o Analista de Negó...
TDC2016POA | Trilha Analise de Negocios - Business Coach, o Analista de Negó...
 
Real World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみたReal World OCamlを読んでLispと協調してみた
Real World OCamlを読んでLispと協調してみた
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
 
Marco legal bolivia
Marco legal boliviaMarco legal bolivia
Marco legal bolivia
 

Similar to Real world lisp

DSLの過去と未来
DSLの過去と未来DSLの過去と未来
DSLの過去と未来
Akio Tajima
 
データ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみたデータ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみた
YASUKAZU NAGATOMI
 
CVチーム勉強会 Halide編
CVチーム勉強会 Halide編CVチーム勉強会 Halide編
CVチーム勉強会 Halide編Tetsuro Kato
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
Munenori Sugimura
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
Masahiko Sawada
 
つながるデータShare
つながるデータShareつながるデータShare
つながるデータShare
Seiji Koide
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013Esehara Shigeo
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
Yoshifumi Yamaguchi
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
Hiro Yoshioka
 
Mishimasyk6 iwatobipen
Mishimasyk6 iwatobipenMishimasyk6 iwatobipen
Mishimasyk6 iwatobipen
Takayuki Serizawa
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
Ryo Higashigawa
 
論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus
論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus
論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus
広樹 本間
 
Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門
Keisuke Takahashi
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
Fujio Kojima
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
Yuji Otani
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
Jun-ichi Sakamoto
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
Shingo Inoue
 
OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化
Nobuyori Takahashi
 

Similar to Real world lisp (20)

DSLの過去と未来
DSLの過去と未来DSLの過去と未来
DSLの過去と未来
 
データ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみたデータ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみた
 
CVチーム勉強会 Halide編
CVチーム勉強会 Halide編CVチーム勉強会 Halide編
CVチーム勉強会 Halide編
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
OSS 開発ってどうやっているの? ~ PostgreSQL の現場から~
 
つながるデータShare
つながるデータShareつながるデータShare
つながるデータShare
 
関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013関数型志向Python - LLまつり2013
関数型志向Python - LLまつり2013
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Mishimasyk6 iwatobipen
Mishimasyk6 iwatobipenMishimasyk6 iwatobipen
Mishimasyk6 iwatobipen
 
TypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdfTypeScript で型を上手く使う試み.pdf
TypeScript で型を上手く使う試み.pdf
 
論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus
論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus
論文紹介 JParaCrawl: A Large Scale Web-Based English-Japanese Parallel Corpus
 
Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門Big Data入門に見せかけたFluentd入門
Big Data入門に見せかけたFluentd入門
 
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
最新C#動向と関数型言語haskell ~命令型静的プログラミングから関数型動的プログラミングへのシフト~
 
PHP基礎勉強会
PHP基礎勉強会PHP基礎勉強会
PHP基礎勉強会
 
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
はじめよう TypeScript - 入門から実践まで - 素の JavaScript とはさようなら!
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
 
OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化OSSとクラウドによるコンピューティングモデルの変化
OSSとクラウドによるコンピューティングモデルの変化
 
Java script1
Java script1Java script1
Java script1
 

Real world lisp

Editor's Notes

  1. ここではCommon LispのことをLispと呼ぶので誤解無きよう
  2. 登場時期はC++の方が早いが、標準規格が策定されるのはCLOSの後
  3. 構造体の埋め込み 最先端の言語によって裏付けされるCommon Lispの優位性
  4. 若干間違ってるかもしれないけどこんな感じ
  5. 任意タイミングで関数コンパイルを行い、実行中のプログラムに反映させることが可能 リアルタイムなプログラミングが出来る
  6. 全てREPL上で行えるので、気合を入れて取り組まなくても普段コードを書く感覚で自然と行える
  7. REPLと協調して働くため、明示的にデバッガを立ち上げなくてもよい
  8. 広告配信サーバーや広告のレコメンドエンジンをCommon Lispで開発している 日本一のCommon Lisperとも言われる深町氏がWebサーバーやフレームワーク、メッセージキューを積極的に開発している
  9. Google傘下であるDeepMindの人が作ったMGLという深層学習ライブラリが公開されている
  10. ARM対応の処理系はある Embeddable Common-Lispから、Android向けにパッケージングを行うスクリプトが公開されている とにかく有益な情報が少ない
  11. Githubなどにホストされているライブラリで動作確認がされているものが集められている 毎月更新されているためここに掲載されているものは安心して使うことが出来る
  12. Lispを書きましょう