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
54
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
23
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
180
The Groundhog Day Development Method (HackConf 2019)
bbatsov
0
280
Other Decks in Programming
See All in Programming
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
230
複雑なドメインに挑む.pdf
yukisakai1225
5
1.1k
Putting The Genie in the Bottle - A Crash Course on running LLMs on Android
iurysza
0
140
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
310
Updates on MLS on Ruby (and maybe more)
sylph01
1
180
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
250
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
100
print("Hello, World")
eddie
2
530
OSS開発者という働き方
andpad
5
1.7k
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.4k
ProxyによるWindow間RPC機構の構築
syumai
3
1.2k
Featured
See All Featured
Being A Developer After 40
akosma
90
590k
A Tale of Four Properties
chriscoyier
160
23k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
GitHub's CSS Performance
jonrohan
1032
460k
Building Adaptive Systems
keathley
43
2.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
A better future with KSS
kneath
239
17k
Faster Mobile Websites
deanohume
309
31k
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