Defining DSL (Domain Specific Language) using Ruby
-
Upload
netguru -
Category
Technology
-
view
469 -
download
0
Transcript of Defining DSL (Domain Specific Language) using Ruby
![Page 1: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/1.jpg)
DSLdomain-specific language
@ SPARKcamp #5
(in Ruby)
![Page 2: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/2.jpg)
jakub naliwajek
![Page 4: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/4.jpg)
DSLdomain-specific language
![Page 5: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/5.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
![Page 6: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/6.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
![Page 7: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/7.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
![Page 8: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/8.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
![Page 9: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/9.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
![Page 10: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/10.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
![Page 11: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/11.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
Simpler DSLs, particularly ones used by a single application, are sometimes informally called mini-languages.
![Page 12: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/12.jpg)
DSLdomain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain.
•Perl •HTML •MATLAB •VHDL •SQL
Simpler DSLs, particularly ones used by a single application, are sometimes informally called mini-languages INTERNAL.
![Page 13: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/13.jpg)
LISP
![Page 14: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/14.jpg)
LISP1958
![Page 15: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/15.jpg)
LISP1958
![Page 16: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/16.jpg)
“On Lisp” – Paul Graham
Add “for” loop to LISP
![Page 17: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/17.jpg)
RUBY
![Page 18: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/18.jpg)
![Page 19: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/19.jpg)
![Page 20: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/20.jpg)
RUBYon rails
![Page 21: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/21.jpg)
Rails “Migrations” DSL
![Page 22: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/22.jpg)
RSpec DSL (testing framework)
![Page 23: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/23.jpg)
DSLis not for COMPUTERS
![Page 24: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/24.jpg)
describe == context == it(for computers)
![Page 25: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/25.jpg)
PROBLEM
![Page 26: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/26.jpg)
![Page 27: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/27.jpg)
![Page 28: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/28.jpg)
survey(name, &block)
![Page 29: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/29.jpg)
survey(name, &block)
![Page 30: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/30.jpg)
survey(name, &block)
![Page 31: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/31.jpg)
survey(name, &block)
![Page 32: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/32.jpg)
survey(name, &block)
question(content, **params, &block)
![Page 33: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/33.jpg)
survey(name, &block)
question(content, **params, &block)
![Page 34: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/34.jpg)
survey(name, &block)
question(content, **params, &block)
![Page 35: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/35.jpg)
survey(name, &block)
question(content, **params, &block)
![Page 36: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/36.jpg)
survey(name, &block)
question(content, **params, &block)
![Page 37: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/37.jpg)
survey(name, &block)
question(content, **params, &block)
answer(content)
![Page 38: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/38.jpg)
survey(name, &block)
question(content, **params, &block)
answer(content)
![Page 39: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/39.jpg)
WHAT HELPS?
![Page 40: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/40.jpg)
![Page 41: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/41.jpg)
META PROGRAMMING
![Page 42: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/42.jpg)
![Page 43: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/43.jpg)
BLOCKS
![Page 44: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/44.jpg)
![Page 45: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/45.jpg)
0
20
40
60
80
no DSL DSL
use
uselearn
learn
How DIFFICULT?
![Page 46: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/46.jpg)
![Page 47: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/47.jpg)
0
20
40
60
80
no DSL DSL
use
uselearn
learn
How DIFFICULT?
![Page 48: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/48.jpg)
Which one is more readable?
MiniTest RSpec
![Page 49: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/49.jpg)
NOT ALWAYS COOL
![Page 50: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/50.jpg)
![Page 51: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/51.jpg)
developers […] who cannot survive without frameworks. – Adam Hawkins
http://hawkins.io/2015/05/the-ruby-community-the-next-version/
![Page 52: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/52.jpg)
![Page 53: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/53.jpg)
simplicity over convenience
= good for long-term
![Page 54: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/54.jpg)
how many lines will that DSL save?
![Page 55: Defining DSL (Domain Specific Language) using Ruby](https://reader030.fdocuments.us/reader030/viewer/2022032504/55c35e2cbb61eb6e6f8b4724/html5/thumbnails/55.jpg)
thoughtbot/factory_girl(kinda nice example)