Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CIDER: Inside the Brewery (f(by) 2016)
Search
Bozhidar Batsov
December 14, 2016
Programming
1
230
CIDER: Inside the Brewery (f(by) 2016)
Slide-deck from talk at the f(by) conference in Minsk.
Bozhidar Batsov
December 14, 2016
Tweet
Share
More Decks by Bozhidar Batsov
See All by Bozhidar Batsov
Clojure: The Bad Parts
bbatsov
0
56
Weird Ruby (RubyDay 2024, Verona)
bbatsov
0
150
Sustainable OSS (Balkan Ruby 2024, Sofia)
bbatsov
0
150
Ruby's Creed (RubyDay 2023, Verona)
bbatsov
0
25
Victims of Complexity
bbatsov
0
310
Ruby 3.0 Redux (Spark Academy, Jan 2021)
bbatsov
1
260
Ruby 3.0 Redux (Pivorak 4.0)
bbatsov
0
460
The Elements of Programming Style (HackConf 2019)
bbatsov
0
190
The Groundhog Day Development Method (HackConf 2019)
bbatsov
0
280
Other Decks in Programming
See All in Programming
明日から始めるリファクタリング
ryounasso
0
130
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
710
Writing Better Go: Lessons from 10 Code Reviews
konradreiche
0
530
『毎日の移動』を支えるGoバックエンド内製開発
yutautsugi
2
230
CSC305 Lecture 03
javiergs
PRO
0
240
CSC305 Lecture 04
javiergs
PRO
0
260
Domain-centric? Why Hexagonal, Onion, and Clean Architecture Are Answers to the Wrong Question
olivergierke
2
810
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
300
CSC509 Lecture 04
javiergs
PRO
0
300
「ちょっと古いから」って避けてた技術書、今だからこそ読もう
mottyzzz
10
6.6k
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
overlayPreferenceValue で実現する ピュア SwiftUI な AdMob ネイティブ広告
uhucream
0
180
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
RailsConf 2023
tenderlove
30
1.2k
A designer walks into a library…
pauljervisheath
209
24k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
Facilitating Awesome Meetings
lara
56
6.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
860
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Statistics for Hackers
jakevdp
799
220k
Transcript
M-x
None
slide intentionally left blank
Вітаю!
Bozhidar
Божидар
Божо cool
Bug cool
Sofia, Bulgaria
None
None
None
None
None
None
None
None
None
None
A (Dark) Knight of the Order of Emacs
@bbatsov
None
None
None
None
None
None
None
Why I am here?
I am a storyteller!
CIDER: Inside The Brewery
None
A story about a different kind of cider…
Clojure Interactive Development Environment that Rocks
… for Emacs
Is Emacs the One True Editor that will bring balance
to the Source?
Absolutely!
Primary Clojure dev environment (2015) Other 10% LT 5% fireplace
12% Cursive 27% CIDER 46%
–Nancy Pearcey “Competition is always a good thing. It forces
us to do our best. A monopoly renders people complacent and satisfied with mediocrity.”
Near future (optimistic) Other 10% CIDER 90%
Near future (worst case) Cursive 34% Other 15% CIDER 51%
Customer Testimonials
“Using CIDER is exciting. You never know if cider-jack-in will
work or not!” — Mich Hickey
I used to wonder a lot how to get an
adrenaline rush - now I simply upgrade CIDER! — Alex Killer
CIDER’s learning curve is amazing! I’m still amazed it never
ends! — Zach Hellman
Half the things in Emacs and CIDER seem magic to
me. Every time I use them I feel like a wizard! — Anna Parenlicka
A not so long time ago in a galaxy not
far away…
Java, C# and PHP ruled the dev world
The Lisp Masters from the Republic of Great Programmers were
on the run
Lisps were out of fashion
None
2007
A gentleman & a scholar
Clojure
Biggest Clojure problem at launch?
((((((((((()))))))))))
0 Clojure development environments
Emacs was the last Lisp stronghold
Emacs is the greatest Emacs Lisp dev environment
SLIME
Superior Lisp Interaction Mode for Emacs
SLIME Features • REPL • Interactive evaluation • Compilation notes
• Code completion • Definition lookup • Documentation lookup • Apropos
SLIME Features • Debugger • Value inspector • Tracing •
Find usages • Macroexpansion • Scratchpad • Minibuffer code evaluation
SLIME is an IDE
Interactive Development Environment
Programs are built in a very incremental manner
SLIME (Emacs Lisp) SWANK (Common Lisp) Clozure RPC LispWorks CMUCL
ABCL SBCL Client Server Backends
2008
clojure-mode & swank-clojure
SLIME (Emacs Lisp) SWANK (Common Lisp) swank-clojure
A star was born
In 2010 around 70% of the Clojurians were developing in
Emacs!!!
swank-clojure • Requires knowledge of swank (Common Lisp) • Bundles
a frozen SLIME version • Subpar features (e.g. debugger, inspector, find usages) • Monolithic (no swank plugins)
SLIME is a Common Lisp tool
2010
Another esteemed gentleman & scholar
nREPL
A common foundation for Clojure development tools
•Load (compile) a Clojure source file •Evaluate a Clojure form
•Interrupt evaluation •Read from the standard input
Extensible via middleware
2012
nrepl.el
nrepl.el (Emacs Lisp) nREPL (Clojure)
A workhorse is retired
nrepl.el • lacked many SLIME features • relied heavily on
evaluation of inlined code • made assumptions about the environment • flawed bencode parser
2013
Don’t settle for good. Demand great!
–Phil Karlton “There are only two hard things in Computer
Science: cache invalidation and naming things.”
None
Clojure Integrated Development Environment & REPL
Clojure Interactive Development Environment Reimagined
Clojure Interactive Development Environment that Rocks
None
CIDER Features • Interactive evaluation • Compilation notes • Code
completion • Definition lookup • Documentation lookup • Apropos
CIDER Features • Value inspector • Command selector • Tracing
• Macroexpansion • Debugger • Scratchpad • Minibuffer code evalution
CIDER Features • Javadoc support • Jump to Java definition
• Jump to resource • Sanity-preserving stacktraces • clojure.test integration • namespace browser
CIDER Features • classpath browser • grimoire integration • dynamic
indentation • dynamic font-locking • nREPL session manager • Smart namespace reloading • ClojureScript support
Extensions (are easy)
Refactoring support (clj-refactor + refactor-nrepl)
Demo Time
CIDER tastes better than SLIME
CIDER tastes better than some IDES
None
Bulgarian Liberation Day 2016
CIDER 0.11 (Bulgaria)
Require Clojure 1.7+
Require Java 7+
Run all loaded/project tests
Enlighten
None
None
Auto-injection of CIDER’s dependencies
None
Clojure/west 2016
CIDER 0.12 (Seattle)
Conditional breakpoints
Step-in while debugging
Test result improvements
Zenburn & Solarized support
cider-auto-test-mode
Eldoc improvements
Display docstring on mouse hover
None
Totally reorganized menus
None
None
None
One more thing…
A Real Manual
A Real Manual
None
http://cider.readthedocs.org/
CIDER 0.13 (California)
Eldoc improvements
None
None
Unified evaluation commands keymap
C-c C-v something
cider-eval-sexp-at-point
C-c C-v (C-)v
Tracking of evaluated expressions
None
None
“See also” section in doc buffers
None
A cornucopia of small additions and improvements
CIDER 0.14 (Berlin)
Display spec in doc buffers
None
Re-run last test
C-c C-t (C-)g
The usual mix of bug fixes, small additions and improvements
What’s still missing?
•Find usages •Built-in refactoring tooling •Better ClojureScript support •Support for
the new Clojure socket REPL CIDER 1.0
Why CIDER?
Integrated Development Environment (a.k.a. IDE)
None
Emacs
None
None
None
None
None
Spacemacs
Emacs users know how to build productive Lisp workflows
•Emacs (ultimate Elisp dev env) •SLIME (and SLY) •Geiser •racket-mode
•CIDER (obviously)
• paredit • smartparens • rainbow-delimiters • rainbow-identifiers • sexp-fu
• paxedit • lispy
Community impact
cider-nrepl https://github.com/clojure-emacs/cider-nrepl
refactor-nrepl https://github.com/clojure-emacs/refactor-nrepl
compliment https://github.com/alexander-yakushev/compliment
cljs-tooling https://github.com/gtrak/cljs-tooling
nREPL improvements
Open development
None
None
158 contributors!
Please, send more help!
Дзякуй!
Felina