O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Julia is your friend (Japanese)

668 visualizações

Publicada em

Julia は Lisperの友達です。
このスライドは関西 Lisp ユーザー会で発表したジョークスライドです。

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Julia is your friend (Japanese)

  1. 1. Julia is your friend fu7mu4@関西Lispユーザー会
  2. 2. fu7mu4 • 主に関西Lispユーザー会と姫路IT系勉強会に参加 • 「Eclipseはじめました」ネタでEclipse Lisp※を紹介し た。ごめんなさい • ※IDEとは関係ない
  3. 3. 1.0.1 is released !
  4. 4. Julia • https://julialang.org/ • https://github.com/JuliaLang/julia • MIT License
  5. 5. “Why we created Julia ?” says • まず、ゆるいライセンスのオープンソースで、Cの速度と Rubyの動的さが欲しい。Lispのような真のマクロが使え る同図象性のある言語で、Matlabのように分かりやすい 数学の記述をしたい。Pythonのように汎用的に使いたい し、Rの統計処理、Perlの文字列処理、Matlabの線形代 数計算も要る。シェルのように簡単にいくつかのパーツを つなぎ合わせたい。チョー簡単に習えて、超上級ハッカー も満足する言語。インタラクティブに使えて、かつコンパ イルできる言語が欲しい。
  6. 6. “Why we created Julia ?” says • まず、ゆるいライセンスのオープンソースで、Cの速度と Rubyの動的さが欲しい。Lispのような真のマクロが使え る同図象性のある言語で、Matlabのように分かりやすい 数学の記述をしたい。Pythonのように汎用的に使いたい し、Rの統計処理、Perlの文字列処理、Matlabの線形代 数計算も要る。シェルのように簡単にいくつかのパーツを つなぎ合わせたい。チョー簡単に習えて、超上級ハッカー も満足する言語。インタラクティブに使えて、かつコンパ イルできる言語が欲しい。
  7. 7. “Why we created Julia ?” says • まず、ゆるいライセンスのオープンソースで、Cの速度と Rubyの動的さが欲しい。Lispのような真のマクロが使え る同図象性のある言語で、Matlabのように分かりやすい 数学の記述をしたい。Pythonのように汎用的に使いたい し、Rの統計処理、Perlの文字列処理、Matlabの線形代 数計算も要る。シェルのように簡単にいくつかのパーツを つなぎ合わせたい。チョー簡単に習えて、超上級ハッカー も満足する言語。インタラクティブに使えて、かつコンパ イルできる言語が欲しい。 Common Lisp使ったら?
  8. 8. Julia is popular by google trends
  9. 9. Julia is popular
  10. 10. fibo in julia & C function fibo(n) if n < 2 return n else return fibo(n - 1) + fibo(n - 2) end end long long fibo(long long n){ if (n < 2) { return n; } else { return fibo(n - 1) + fibo(n - 2); } } 型推論+LLVM JITコンパイラ スクリプト 静的に型を宣言+GCC コンパイル
  11. 11. fibo in cl/scheme (defun fibo(n) (if (< 2 n) n (+ (fibo (- n 1) (fibo (- n 2)))) (define (fibo n) (if (< 2 n) n (+ (fibo (- n 1)) (fibo (- n 2))))) sbcl (common lisp) コンパイル chez scheme (scheme) + JIT コンパイラ
  12. 12. speed of fibo(50) compiler/interpreter seconds gcc with -O3 [v6.3] 39.317 gcc with -O2 [v6.3] 46.095 julia [v1.0.1] 60.066 gcc with -O0 [v6.3] 77.021 chez scheme [v9.5] 111.660 sbcl [v1.3.14] 252.521
  13. 13. Julia is your friends
  14. 14. Julia is your friend(Demo) • Just run on Julia with special option
  15. 15. Julia julia interactive mode
  16. 16. Femtolisp julia with ̶lisp option
  17. 17. Femtolisp • https://github.com/JeffBezanson/femtolisp • Lisp-1 (Scheme ?) • 小さくて、単純で、埋め込みしやすい • Julia の内部で パーサーとして使用 • 作者がJuliaの原作者の一人 • 問題があればすぐに修正される
  18. 18. の話でしたね
  19. 19. Julia is your friend • インタプリタ、コンパイルあり • レキシカルスコープ • 型宣言はなくてもよいが、型宣言もできる • 値に型がある、変数にはない • 関数は First Classオブジェクト • CLOSライクなメソッド(generic function)
  20. 20. シンボル julia> :foo :foo julia> typeof(ans) Symbol julia> :foo == Symbol(“foo”) true
  21. 21. 文字列とパース julia> prog = "1 + 1" "1 + 1" julia> ex1 = Meta.parse(prog) :(1 + 1) julia> ex2 = Expr(:call, :+, 1, 1) :(1 + 1)
  22. 22. パースとS式 julia> ex3 = Meta.parse("(4 + 4) / 2") :((4 + 4) / 2) julia> Meta.show_sexpr(ex3) (:call, :/, (:call, :+, 4, 4), 2)
  23. 23. `(,a b) julia> a = 1; julia> ex = :($a + b) :(1 + b) julia> ex = :(a in $:((1,2,3)) ) :(a in (1, 2, 3))
  24. 24. (eval ``(,x)) julia> x = :(1 + 2); julia> e = quote quote $x end end quote #= none:1 =# $(Expr(:quote, quote #= none:1 =# $(Expr(:$, :x)) end)) end julia> eval(e) quote #= none:1 =# 1 + 2 end
  25. 25. Exprを返す関数 julia> function math_expr(op, op1, op2) expr = Expr(:call, op, op1, op2) return expr end math_expr (generic function with 1method) julia> ex = math_expr(:+, 1, Expr(:call, :*, 4, 5)) :( 1 + 4 * 5) julia> eval(ex) 21
  26. 26. マクロ julia> macro sayhello (name) return :( println(“Hello ”, $name)) end @sayhello (macro with 1 method) julia> @sayhello(“関西Lispユーザー会”) “Hello 関西Lispユーザー会”
  27. 27. マクロディスパッチ julia> macro sayhello () return :( println(“Hello , Everyone”)) end @sayhello (macro with 1 method) JuliaではCLOSのメソッドと同じで 同名で引数が異なるマクロを定義できる
  28. 28. macroexpandマクロ julia> @macroexpand @sayhello “name” :((println)(“Hello “, “name”)
  29. 29. 名前衝突もある • Common Lispのマクロ • Schemeでいう伝統的マクロ • 名前の衝突を回避する必要がある • 新しいシンボルをローカルにする • 新しいグローバルシンボルはgensym関数で生成
  30. 30. まとめ • Julia ユーザーは Lispユーザー(Femtolisp使ってる) • Julia は J式 • Julia is your friend (=LisperはJuliaをすぐ使える)

×