Slide 1

Slide 1 text

1SPNJTFͱ "TZOD"XBJU·ͱΊ !NBTVUBLB

Slide 2

Slide 2 text

w օ͞Μ͝ଘ஌ͷ௨Γɺ&NBDTͰඇಉظ ॲཧΛ࣮ݱ͢ΔͨΊʹ͸ɺ5$1ίωΫ γϣϯΛ։͔͘ɺ֎෦ίϚϯυΛىಈ ͢Δඞཁ͕͋Γ·͢

Slide 3

Slide 3 text

֎෦ίϚϯυΛىಈ͢Δ

Slide 4

Slide 4 text

w ΤσΟλͰԿ͔ॻ͍͍ͯΔ࣌ɺόοΫάϥ΢ϯ υͰԿ͔ͨ͘͠ͳΓ·͢ΑͶʁ w ྫ͑͹ɺ(JU)VCͰ4UBSͨ͠ϦϙδτϦ΍͸ͯϒ ͨ͠63-ΛΤσΟλ͔Β։ͨ͘ΊɺΩϟογϡ ϑΝΠϧΛDVSMͰఆظతʹ࡞Δͱ͔

Slide 5

Slide 5 text

ಉظॲཧͭΒ͍ (defun mstk-start-sync () (call-process "sh" nil nil nil "-c" "sleep 3; echo OK") (message-box "mstk-start-sync finished.")) (mstk-start-sync) 3ඵؒԿ΋ग़དྷͣʹɺ Emacs͕ݻ·Δɻ

Slide 6

Slide 6 text

ඇಉظॲཧ΋ͭΒ͍ (defun mstk-start-async-1a () (setq proc (start-process "mstk-start-async-1a" (generate-new-buffer " *sh*") "sh" "-c" "sleep 3; echo OK")) (set-process-sentinel proc 'mstk-async-sentinel-1a)) (defun mstk-async-sentinel-1a (_process _event) (message-box "mstk-start-async-1a finished.")) (mstk-start-async-1a) Emacs͸ݻ·Βͳ͘ͳΔ͕ɺ sentinelʢ൪ฌʣؔ਺͸ඞཁ

Slide 7

Slide 7 text

ඇಉظॲཧ΋ͭΒ͍ (defun mstk-start-async-1b () (setq proc (start-process "mstk-start-async-1b" (generate-new-buffer " *sh*") "sh" "-c" "sleep 3; echo OK")) (set-process-sentinel proc (lambda (_process _event) (message-box "mstk-start- async-1b finished.")))) (mstk-start-async-1b) lambdaͰؔ਺ఆٛ͸ লུͰ͖Δ

Slide 8

Slide 8 text

ඇಉظॲཧ΋ͭΒ͍ (defun mstk-start-async-2b () (make-process :name "mstk-start-async-2b" :buffer (generate-new-buffer " *sh*") :command '("sh" "-c" "sleep 3; echo OK") :sentinel (lambda (_process _event) (message-box "mstk-start- async-2b finished.")))) (mstk-start-async-2b) make-process࢖͏ͱ ͍ͣͿΜεοΩϦ͢Δɻ ͱ͜ΖͰԿ΍ͬͯͨΜ͚ͩͬʁ

Slide 9

Slide 9 text

֎෦ίϚϯυΛඇಉظͰ ࣮ߦ͍͚ͨͩ͠ͳͷʹʂ

Slide 10

Slide 10 text

FNBDTQSPNJTF https://github.com/chuntaro/emacs-promise

Slide 11

Slide 11 text

QSPNJTF (require 'promise) (defun mstk-start-promise-1a () (promise-chain (promise:make-process "sh" "-c" "sleep 3; echo OK") (then (lambda (reason) (message-box "then %s" reason))))) (mstk-start-promise-1a) ಡΈ΍͍͢ɾɾɾͷ͔ʁ

Slide 12

Slide 12 text

QSPNJTF Τϥʔॲཧ (require 'promise) (defun mstk-start-promise-2a () (promise-chain (promise:make-process "sh" "-c" "sleep 3; echo OK") (then (lambda (reason) (/ 1 0) ;; an error occurs!! (message-box "then %s" reason))) (promise-catch (lambda (reason) (message-box "catch error!! %s" reason))) (done (lambda (reason) (message-box "done. %s" reason))))) (mstk-start-promise-2a) ෼͔Γ΍͍͢ɾɾɾʁ

Slide 13

Slide 13 text

FNBDTBTZODBXBJU https://github.com/chuntaro/emacs-async-await

Slide 14

Slide 14 text

BTZODBXBJU (require 'async-await) (setq lexical-binding t) (async-defun mstk-start-async-await-1a () (await (promise:make-process "sh" "-c" "sleep 3; echo OK")) (message-box "finish")) (mstk-start-async-await-1a) ͖ͬ͢Γ͠ਿ಺

Slide 15

Slide 15 text

BTZODBXBJU Τϥʔॲཧ (require 'async-await) (setq lexical-binding t) (async-defun mstk-start-async-await-2a () (condition-case reason (progn (await (promise:make-process "sh" "-c" "sleep 3; echo OK")) (/ 1 0) ;; an error occurs!! (message-box "finish")) (error (message-box "catch error!! %s" reason)))) (mstk-start-async-await-2a) Τϥʔॲཧ͸͍ͭ΋Ͳ͓Γʂ

Slide 16

Slide 16 text

σϞ

Slide 17

Slide 17 text

ॴײ w ҎલΑΓ΋ඇಉظॲཧͷ໘౗ष͞͸গͳ͘ͳͬ ͨͱײͨ͡ w γϯλοΫεΛఆٛͰ͖Δݴޠ͸ɺදݱͷࣗ༝ ౓͕ߴ·Δ w -JTQ͸σʔλ΋ؔ਺΋શ෦4ࣜͰදݱͰ͖Δɻඒ ͍͠

Slide 18

Slide 18 text

એ఻ w IUUQTHJUIVCDPNNBTVUBLBFNBDTIFMN IBUFOBCPPLNBSL w IUUQTHJUIVCDPNNBTVUBLBFNBDTIFMNRJJUB w BTZODFM࢖ͬͨΒIFMNHJUIVCTUBSTFMΛมߋ ͤͣʹඇಉظԽͰ͖ͨIUUQTNBTVUBLBOFU DIBMPXIUNM

Slide 19

Slide 19 text

4QFDJBM5IBOLT w ஜࢵ"ؙΰγοΫʢຊจʣ w .FOMPʢίʔυʣ w IJHIMJHIUʢίʔυϋΠϥΠτʣ w IJHIMJHIU0SUGIPHFFMcQCDPQZ http://kakakakakku.hatenablog.com/entry/2017/05/30/092247