Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CIDER Distilled: A Common Foundation for Clojure Tooling

CIDER Distilled: A Common Foundation for Clojure Tooling

Slide deck from my Clojure/south 2019 presentation.

Bozhidar Batsov

September 01, 2019
Tweet

More Decks by Bozhidar Batsov

Other Decks in Programming

Transcript

  1. View Slide

  2. M-x

    View Slide

  3. Bom dia!

    View Slide

  4. Божидар

    View Slide

  5. Bozhidar

    View Slide

  6. Bozhidar

    View Slide

  7. Bojidar

    View Slide

  8. View Slide

  9. Bug
    cool

    View Slide

  10. Sofia, Bulgaria
    Sofia, Bulgaria

    View Slide

  11. View Slide

  12. Top 10 Bulgarian
    “White” Hackers

    View Slide

  13. #NRALeaks

    View Slide

  14. View Slide

  15. Expert in cyber security

    View Slide

  16. Expert in the following
    programming languages:
    Unix, Emacs, Perl and Ruby

    View Slide

  17. The Don Juan of IT in
    Bulgaria

    View Slide

  18. View Slide

  19. View Slide

  20. First time in Brazil!

    View Slide

  21. Second time in Brazil!

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. First time in São Paulo!

    View Slide

  26. First time at a conference in
    Brazil!

    View Slide

  27. Cultural Exchange

    View Slide

  28. View Slide

  29. View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  33. View Slide

  34. View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. Population of São Paulo:
    12 (22) million

    View Slide

  39. Population of Bulgaria:
    7 million

    View Slide

  40. Artur Malabarba

    View Slide

  41. View Slide

  42. View Slide

  43. @bbatsov

    View Slide

  44. metaredux.com

    View Slide

  45. emacsredux.com

    View Slide

  46. slide intentionally
    left blank

    View Slide

  47. Cider?

    View Slide

  48. View Slide

  49. View Slide

  50. Clojure
    Interactive
    Development
    Environment that
    Rocks

    View Slide

  51. … for Emacs

    View Slide

  52. CIDER Distilled:
    Beyond emacs

    View Slide

  53. CIDER’s Architecture

    View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. View Slide

  58. CIDER’s Orchard

    View Slide

  59. Orchard?

    View Slide

  60. View Slide

  61. noun
    1. a piece of enclosed land planted with fruit
    trees.
    an apple orchard
    2. (in the context of Clojure) a fertile ground for
    Clojure tooling.
    CIDER’s Orchard

    View Slide

  62. View Slide

  63. Created especially for REPL-
    powered tooling

    View Slide

  64. Extremely flexible

    View Slide

  65. Transports
    •bencode (default)
    •tty (built-in)
    •http(s) (via Drawbridge)
    •transit (via Fastlane)
    •EDN (coming in nREPL 0.7)

    View Slide

  66. Extendable

    View Slide

  67. Piggieback
    (ClojureScript Support)

    View Slide

  68. shadow-cljs
    (ClojureScript Support)

    View Slide

  69. cider-nrepl

    View Slide

  70. View Slide

  71. Common functionality for
    interactive programming
    environments

    View Slide

  72. Thin wrapper around (many)
    nREPL-agnostic libraries

    View Slide

  73. Fundamental Tooling Approaches
    •REPL-driven (runtime state inspection)
    •Static analysis based (parses and analyses the code)

    View Slide

  74. unrepl
    prepl
    nREPL

    View Slide

  75. orchard
    (swiss army knife)

    View Slide

  76. compliment
    (code completion)

    View Slide

  77. cljs-tooling
    (too hard to explain)

    View Slide

  78. thunknyc/profile
    (self-explanatory)

    View Slide

  79. fipp & puget
    (pretty printing)

    View Slide

  80. •cljfmt
    •tools.namespace
    •tools.trace
    •tools.reader

    View Slide

  81. REPL-powered tooling runs
    alongside your application code

    View Slide

  82. Mr. Anderson
    (dependency inlining)

    View Slide

  83. There’s a lot going on here!

    View Slide

  84. And we haven’t mentioned a
    single Emacs library…

    View Slide

  85. But wait, there’s more!

    View Slide

  86. sayid
    (debugging tool)

    View Slide

  87. weasel
    (ClojureScript REPL)

    View Slide

  88. refactor-nrepl

    View Slide

  89. View Slide

  90. View Slide

  91. View Slide

  92. The Lay of the Land

    View Slide

  93. Calva
    (VS Code)

    View Slide

  94. Calva -> Calvados

    View Slide

  95. View Slide

  96. Calvados is distilled from
    cider.

    View Slide

  97. Calva is distilled from CIDER.

    View Slide

  98. vim-fireplace

    View Slide

  99. vim-iced

    View Slide

  100. acid.vim

    View Slide

  101. CCW
    (Eclipse)

    View Slide

  102. Proto REPL
    (Atom)

    View Slide

  103. Non-nREPL tools

    View Slide

  104. Chlorine
    (Atom, prepl)

    View Slide

  105. Conjure
    (vim, prepl)

    View Slide

  106. vimpire
    (vim, unrepl)

    View Slide

  107. Cursive
    (IntelliJ, static analysis)

    View Slide

  108. clojure-lsp
    (cross-editor, static analysis)

    View Slide

  109. •cider-nrepl -> orchard-nrepl
    •cljs-tooling -> orchard-cljs

    View Slide

  110. Naming is hard!

    View Slide

  111. cljs-tooling
    compliment
    orchard

    View Slide

  112. Clojure’s Orchard

    View Slide

  113. Case Study:
    Improving ClojureScript code
    completion for everyone

    View Slide

  114. cljs-tooling => compliment

    View Slide

  115. clj-suitable

    View Slide

  116. View Slide

  117. slide intentionally
    left blank

    View Slide

  118. Language Server Protocol

    View Slide

  119. View Slide

  120. LSP or nREPL?

    View Slide

  121. •You can run them side by side
    •You can implement LSP in terms of nREPL
    •You can proxy nREPL requests to an LSP server
    •You can implement LSP in terms of the same
    underlying libraries*

    View Slide

  122. View Slide

  123. The State of Affairs

    View Slide

  124. The Challenges

    View Slide

  125. 25%
    5%
    70%
    Yes Maybe
    I already have Notepad No
    Do you want great Clojure development tools?

    View Slide

  126. 69%
    25%
    5%
    1%
    Yes Maybe
    I already have Notepad No
    Are you willing to work on Clojure development tools?

    View Slide

  127. Few maintainers,
    many libraries

    View Slide

  128. Areas of Interest
    •sayid
    •refactor-nrepl

    View Slide

  129. ClojureScript

    View Slide

  130. Areas of Interest
    •Piggieback
    •cider-nrepl
    •orchard
    •compliment
    •weasel

    View Slide

  131. Where’s my hammock time?

    View Slide

  132. Inconsistent APIs

    View Slide

  133. Documentation

    View Slide

  134. cljdoc

    View Slide

  135. https://docs.cider.mx

    View Slide

  136. https://nrepl.org

    View Slide

  137. AsciiDoc + Antora

    View Slide

  138. Funding

    View Slide

  139. View Slide

  140. 2013-2017 (estimated)
    •$5000 in donations
    •~3000 hours of work on the projects

    View Slide

  141. Definition of Work
    •Writing code
    •Reviewing code
    •Discussing ideas
    •Educating myself so I can write/review code and discuss
    ideas
    •Supporting end users via Slack, email, etc
    •Collaborating with other tool authors

    View Slide

  142. 2018
    •$4000 (OpenCollective)
    •$5400 (Clojurists Together)

    View Slide

  143. 2019 (projected)
    •$18,000 (OpenCollective)
    •$9,000 (Clojurists Together)

    View Slide

  144. 2,250/month

    View Slide

  145. Little support from Clojure
    companies

    View Slide

  146. Development tools are a
    high leverage investment

    View Slide

  147. Clojurists Together

    View Slide

  148. opencollective.com/cider

    View Slide

  149. opencollective.com/nrepl

    View Slide

  150. GitHub Sponsors

    View Slide

  151. Future of the Orchard

    View Slide

  152. Sustainable

    View Slide

  153. Stable

    View Slide

  154. Community Driven

    View Slide

  155. Community Supported

    View Slide

  156. Open Source is not about You

    View Slide

  157. CIDER’s Orchard is
    all about YOU!!!

    View Slide

  158. Help Clojure’s Orchard…

    View Slide

  159. …to help yourselves

    View Slide

  160. Felina

    View Slide

  161. Resources
    • https://metaredux.com/posts/2018/10/29/nrepl-redux.html
    • https://metaredux.com/posts/2018/11/09/ciders-orchard-
    the-heart.html
    • https://metaredux.com/posts/2018/11/11/ciders-orchard-
    the-periphery.html
    • https://www.youtube.com/watch?v=4X-1fJm25Ww

    View Slide

  162. One more thing…

    View Slide

  163. CIDER 0.22 (Lima) is out!

    View Slide

  164. CIDER 0.22 (São Paulo)

    View Slide

  165. View Slide

  166. View Slide

  167. Credits
    twitter: @bbatsov
    github: @bbatsov
    https://metaredux.com
    https://emacsredux.com
    Clojure/south
    São Paulo,
    Brazil
    01.09.2019

    View Slide