Soumettre la recherche
Mettre en ligne
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
•
10 j'aime
•
10,060 vues
S
sohta
Suivre
Lisp Meetup #30の発表資料です。
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 21
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
Imagerをつかってみた
Imagerをつかってみた
Tohru Shinohara
Lispのべんきょう
Lispのべんきょう
Hatori Kouiti
俺とGitHubとcodeシリーズ
俺とGitHubとcodeシリーズ
Masayuki KaToH
REPLライフをもっと快適に
REPLライフをもっと快適に
sohta
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
Kazuki Tsutsumi
とにかく始めるClojure
とにかく始めるClojure
Masayuki Muto
Light TableでClojure入門
Light TableでClojure入門
Tokusei Noborio
Recommandé
Imagerをつかってみた
Imagerをつかってみた
Tohru Shinohara
Lispのべんきょう
Lispのべんきょう
Hatori Kouiti
俺とGitHubとcodeシリーズ
俺とGitHubとcodeシリーズ
Masayuki KaToH
REPLライフをもっと快適に
REPLライフをもっと快適に
sohta
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
Recruit Technologies
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
Kazuki Tsutsumi
とにかく始めるClojure
とにかく始めるClojure
Masayuki Muto
Light TableでClojure入門
Light TableでClojure入門
Tokusei Noborio
Patterns
Patterns
David Nolen
A little exercise with clojure macro
A little exercise with clojure macro
Zehua Liu
Writing Macros
Writing Macros
RueiCi Wang
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Leonardo Borges
不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして
mitsutaka mimura
A Dive Into Clojure
A Dive Into Clojure
Carlo Sciolla
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVM
sunng87
入門ClojureScript
入門ClojureScript
sohta
Macros in Clojure
Macros in Clojure
sohta
Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012
Leonardo Borges
Clojure的魅力
Clojure的魅力
dennis zhuang
Clojure概览
Clojure概览
dennis zhuang
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
AboutYouGmbH
AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策
Mogi Isamu
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
Mogi Isamu
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
Jacek Laskowski
Clojure: a LISP for the JVM
Clojure: a LISP for the JVM
Knowledge Engineering and Machine Learning Group
Introduction to clojure
Introduction to clojure
Abbas Raza
DSL in Clojure
DSL in Clojure
Misha Kozik
Reactive Extensionの紹介
Reactive Extensionの紹介
Dev Ogiwara
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
Contenu connexe
En vedette
Patterns
Patterns
David Nolen
A little exercise with clojure macro
A little exercise with clojure macro
Zehua Liu
Writing Macros
Writing Macros
RueiCi Wang
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Leonardo Borges
不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして
mitsutaka mimura
A Dive Into Clojure
A Dive Into Clojure
Carlo Sciolla
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVM
sunng87
入門ClojureScript
入門ClojureScript
sohta
Macros in Clojure
Macros in Clojure
sohta
Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012
Leonardo Borges
Clojure的魅力
Clojure的魅力
dennis zhuang
Clojure概览
Clojure概览
dennis zhuang
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
AboutYouGmbH
AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策
Mogi Isamu
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
Mogi Isamu
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
Kazuhiro Hara
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
Jacek Laskowski
Clojure: a LISP for the JVM
Clojure: a LISP for the JVM
Knowledge Engineering and Machine Learning Group
Introduction to clojure
Introduction to clojure
Abbas Raza
DSL in Clojure
DSL in Clojure
Misha Kozik
En vedette
(20)
Patterns
Patterns
A little exercise with clojure macro
A little exercise with clojure macro
Writing Macros
Writing Macros
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
Clojure Macros Workshop: LambdaJam 2013 / CUFP 2013
不自然なcar/ナチュラルにconsして
不自然なcar/ナチュラルにconsして
A Dive Into Clojure
A Dive Into Clojure
Clojure: Practical functional approach on JVM
Clojure: Practical functional approach on JVM
入門ClojureScript
入門ClojureScript
Macros in Clojure
Macros in Clojure
Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012
Clojure的魅力
Clojure的魅力
Clojure概览
Clojure概览
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
Stefan Richter - Writing simple, readable and robust code: Examples in Java, ...
AndroidでScalaを使う際の問題点と対策
AndroidでScalaを使う際の問題点と対策
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
AndroidStudioとGradleを利用したScala言語によるAndroidアプリの開発
React系(別言語含む)の サーバーサイドレンダリング について考えよう
React系(別言語含む)の サーバーサイドレンダリング について考えよう
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
Clojure: a LISP for the JVM
Clojure: a LISP for the JVM
Introduction to clojure
Introduction to clojure
DSL in Clojure
DSL in Clojure
Similaire à Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
Reactive Extensionの紹介
Reactive Extensionの紹介
Dev Ogiwara
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Yahoo!デベロッパーネットワーク
C# 3.0 以降
C# 3.0 以降
Fujio Kojima
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
Preferred Networks
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
kmiyako
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
Yoshitaka Seo
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
翔新 史
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
Tomoki Ando
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
Deep Learning JP
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
terurou
進化するArt
進化するArt
Takuya Matsunaga
HoloLens参考書読書会 vol9
HoloLens参考書読書会 vol9
Shoji Oshima
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
kei takakuda
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
Tomoaki Imai
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
Yasunori Kihara
最新ゲームを支える文言
最新ゲームを支える文言
miki koganei
アイコンで組み立てる Spark MLlib + ETLプログラム
アイコンで組み立てる Spark MLlib + ETLプログラム
tatsumi_air
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Yuta Okamoto
Similaire à Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
(20)
Reactive Extensionの紹介
Reactive Extensionの紹介
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
C# 3.0 以降
C# 3.0 以降
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
初心者からプロフェッショナルまで~データベース開発ソフト4Dの魅力を徹底紹介~
LightSwitch 結局何ができるの
LightSwitch 結局何ができるの
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
もしSIerのエンジニアがSRE本を読んだら
もしSIerのエンジニアがSRE本を読んだら
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
[DL輪読会]StyleNet: Generating Attractive Visual Captions with Styles
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
進化するArt
進化するArt
HoloLens参考書読書会 vol9
HoloLens参考書読書会 vol9
デザインパターンを用いたリファクタリング
デザインパターンを用いたリファクタリング
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
印刷APIのサポート事情 - DevRel Meetup in Tokyo #17
最新ゲームを支える文言
最新ゲームを支える文言
アイコンで組み立てる Spark MLlib + ETLプログラム
アイコンで組み立てる Spark MLlib + ETLプログラム
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
リアクティブ・アーキテクチャ ~大規模サービスにおける必要性と課題〜 #devsumi
Plus de sohta
入門Transducers
入門Transducers
sohta
Clojure Language Update (2015)
Clojure Language Update (2015)
sohta
入門core.async
入門core.async
sohta
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
sohta
ClojureではじめるSTM入門
ClojureではじめるSTM入門
sohta
Clojureによるバイトコードプログラミング
Clojureによるバイトコードプログラミング
sohta
Plus de sohta
(7)
入門Transducers
入門Transducers
Clojure Language Update (2015)
Clojure Language Update (2015)
入門core.async
入門core.async
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
ClojureではじめるSTM入門
ClojureではじめるSTM入門
Clojureによるバイトコードプログラミング
Clojureによるバイトコードプログラミング
Clojureシンタックスハイライター開発から考えるこれからのlispに必要なもの
1.
Clojureシンタックスハイライター 開発から考える これからのLispに必要なもの Lisp meet up
#30 @athos0220
2.
genuine-highlighter ‣ マクロを認識するシンタックス ハイライター ‣ Clojureの細粒度解析器 symbol-analyzer上に実現 ‣
技術的な詳細はShibuya.lisp TT #8を参照 lein-highlight genuine-highlighter symbol-analyzer
3.
シンタックスハイライターから感じたこと ‣ 解析の精度を上げようとすればするほど、リーダやコン パイラがやっていることの再実装をするハメに ‣ リーダやコンパイラ等、標準機能は再利用できなかった ‣
Lispはメタプログラミングに強い言語だったのでは…?
4.
LispはLispコードを扱うのが得意
5.
LispはLispコードを扱うのが得意
6.
LispはLispコードを扱うのが得意 LispはS式を扱うのが得意
7.
Lispの強力さの秘訣 ソースコード マクロ 展開済みS式 S式 read macro expand compile
8.
Lispの強力さの秘訣 ソースコード マクロ 展開済みS式 S式 read macro expand compile コンパイラが感知するのは これ以降 最終的にコンパイラの知るフォームに落ちれば マクロやリーダマクロで自由に拡張可能
9.
Lispの強力さの秘訣 ‣ Lispは「プログラマが実際にどういうコードを書いているのか」に 無頓着になることで強力な拡張性を得てきた ‣ そのことがコードの静的解析を難しくしている ソースコード マクロ 展開済みS式 S式 read macro expand
compile コンパイラが感知するのは これ以降 最終的にコンパイラの知るフォームに落ちれば マクロやリーダマクロで自由に拡張可能
10.
Clojure界隈での事情 ‣ コード解析が不完全なツールたち • Kibit:
コーディングチェッカ • bikeshed: コーディングチェッカ • Yagni: コールグラフ解析ツール • cloverage: カバレッジツール • clojail: サンドボックスツール • etc. etc. ‣ tools.analyzerの登場により、状況はある程度改善したが tools.analyzerを使っても不十分なケースも少なくない
11.
コードの“読み手” プログラマ 処理系コード
12.
コードの“読み手” カバレッジツールコードフォーマッタ IDE・エディタ メトリクス計測ツール プログラマ 処理系 コーディングチェッカ コード
13.
コードの“読み手” ‣ プログラマと処理系だけがコードを読む牧歌的な時代は終わり、 今や多くのCASE ツールがコードを読む時代 ‣
これらのツールの多くが知りたいのは「プログラマがどういう コードを書いたか」≠ コンパイラにどんなコードが渡るか *1 カバレッジツールコードフォーマッタ IDE・エディタ メトリクス計測ツール プログラマ 処理系 コーディングチェッカ *1 CASE: Computer-Aided Software Engineering, 一般にはもっと高機能なものを指すが、ここでは「コードを解析するツール」程度の意味。 コード
14.
グリーンスパンの第10法則
15.
グリーンスパンの第10法則 十分に複雑なCまたはFortranのプログラムは全て、後付けで 正式な仕様がなく、バグがてんこもりの遅いCommon Lisp の半分の実装を含んでいる “
16.
グリーンスパンの第10法則 十分に複雑なCまたはFortranのプログラムは全て、後付けで 正式な仕様がなく、バグがてんこもりの遅いCommon Lisp の半分の実装を含んでいる “ 十分に複雑なLispのコード解析器は全て、後付けで正式な仕 様がなく、バグがてんこもりの遅いLispの半分の実装を含ん でいる…?
17.
グリーンスパンの第10法則 ‣ LisperもまたLispを(ムダに)再実装している ‣ 共通で使える汎用的なしくみは用意できないのか? 十分に複雑なCまたはFortranのプログラムは全て、後付けで 正式な仕様がなく、バグがてんこもりの遅いCommon
Lisp の半分の実装を含んでいる “ 十分に複雑なLispのコード解析器は全て、後付けで正式な仕 様がなく、バグがてんこもりの遅いLispの半分の実装を含ん でいる…?
18.
JavaScriptの場合… ‣ Esprima:汎用的なJSコード解析器 ‣ 多くのJS
CASEツールがEsprima上に実装されている ‣ Lispの場合はマクロがあるので、問題はこんなに簡単で はない(が目指す状況はこんな感じ)
19.
処理系ごとの対応 ‣ コード解析は処理系におまかせ、という手もある? • (例)いくつかのCL処理系は独自にテストカバレッジ機能を提供 •
他の機能についても処理系の対応を待つ…? ‣ 言語機能自体はマクロで拡張できるのに、コード解析に ついては処理系の対応待ちが必要というのは歯がゆい
20.
では、どうするか? ‣ 標準化 • Schemeのシンタックスオブジェクト的な方向性はよさそう •
Common Clojure Source Metadata Model ‣ 汎用的なコード解析器 ‣ 解析器が解析しやすいコードをプログラマが書く • スタイルだけで解決できる問題か? • 解析しやすいようにアノテーションをつける? ‣ etc.
21.
まとめ ‣ コードをプログラマと処理系だけが読めればいい時代は すでに終わり ‣ CASEツールの解析で必要なのは「プログラマがどうい うコードを書いたか」 ‣
マクロがあることを口実にまともにコード解析できない 現状から逃げ続けていいのか?
Télécharger maintenant