SlideShare a Scribd company logo
Copyright © 2013 Russel Winder 1
Is Groovy Static or
Dynamic?
Russel Winder
email: russel@winder.org.uk
xmpp: russel@winder.org.uk
twitter: @russel_winder
web: http://www.russel.org.uk
Copyright © 2013 Russel Winder 2
?
Copyright © 2013 Russel Winder 3
Prelude
Copyright © 2013 Russel Winder 4
Debate [d be t]ɪˈ ɪ
n
1. (Government, Politics & Diplomacy) a formal discussion, as in a legislative
body, in which opposing arguments are put forward
2. discussion or dispute
3. (Philosophy) the formal presentation and opposition of a specific motion,
followed by a vote
vb
1. to discuss (a motion), esp in a formal assembly
2. to deliberate upon (something) he debated with himself whether to go
[from Old French debatre to discuss, argue, from Latin battuere]
debater n
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003.
Copyright © 2013 Russel Winder 5
foment [f m nt]əˈ ɛ
vb (tr)
1. to encourage or instigate (trouble, discord, etc.); stir up
2. (Medicine) Med to apply heat and moisture to (a part of the body) to relieve
pain and inflammation
[from Late Latin f ment re, from Latin f mentum a poultice, ultimately fromō ā ō
fov re to foster]ē
fomentation [ f m n te n]ˌ əʊ ɛ ˈ ɪʃə n
fomenter n
Usage: Both foment and ferment can be used to talk about stirring up trouble:
he was accused of fomenting/fermenting unrest. Only ferment can be used
intransitively or as a noun: his anger continued to ferment (not foment); rural
areas were unaffected by the ferment in the cities
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
Copyright © 2013 Russel Winder 6
ferment
n [ f m nt]ˈ ɜː ɛ
1. (Life Sciences & Allied Applications / Biochemistry) any agent or substance,
such as a bacterium, mould, yeast, or enzyme, that causes fermentation
2. (Life Sciences & Allied Applications / Biochemistry) another word for
fermentation
3. commotion; unrest
vb [f m nt]əˈ ɛ
1. (Life Sciences & Allied Applications / Biochemistry) to undergo or cause to
undergo fermentation
2. to stir up or seethe with excitement
[from Latin fermentum yeast, from ferv re to seethe]ē
fermentable adj
fermentability n
fermenter n
Usage: See at foment
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
Copyright © 2013 Russel Winder 7
The intention of this session is to
foment debate.
Copyright © 2013 Russel Winder 8
Let the fomentation begin.
Copyright © 2013 Russel Winder 9
No not the fermentation.
Copyright © 2013 Russel Winder 10
Starting Point
Copyright © 2013 Russel Winder 11
2003
Groovy is created as the
dynamic symbiote to Java.
Copyright © 2013 Russel Winder 12
Dynamic languages have no typed variables.
Copyright © 2013 Russel Winder 13
static totallyDynamic(x, y) {
x * y
}
Copyright © 2013 Russel Winder 14
Copyright © 2013 Russel Winder 15
Duck typing:
The receiver of the message decides the
meaning of the message.
Copyright © 2013 Russel Winder 16
Operators are not messages to a
receiving object in Java…
Copyright © 2013 Russel Winder 17
…Java isn't really an object-oriented language.
Copyright © 2013 Russel Winder 18
Fortunately, Groovy decided to follow Smalltalk,
and have a meta-object protocol.
Copyright © 2013 Russel Winder 19
Groovy is truly object-oriented,
message passing is the operational semantic,
and all variables are references to objects.
Copyright © 2013 Russel Winder 20
x * y
transforms to
x.plus(y)
to realize message passing with method call.
Copyright © 2013 Russel Winder 21
Interesting Issue
Copyright © 2013 Russel Winder 22
Copyright © 2013 Russel Winder 23
Objects clearly have static types.
Copyright © 2013 Russel Winder 24
Java allows for despatch by signature,
i.e. methods can be overloaded.
Copyright © 2013 Russel Winder 25
Copyright © 2013 Russel Winder 26
Adding types to parameters is required
for despatch by signature.
Copyright © 2013 Russel Winder 27
static runtimeTyping(Number x, Number y) {
x * y
}
Copyright © 2013 Russel Winder 28
Groovy is an optionally typed language:
variables, not just function and method
parameters, may or may not be given a type.
Copyright © 2013 Russel Winder 29
Adding types works in harmony with
method overloading.
Copyright © 2013 Russel Winder 30
All type checking is at run time.
This is harmonious with duck typing.
Copyright © 2013 Russel Winder 31
Being up to date
Copyright © 2013 Russel Winder 32
2013
Groovy is the dynamic symbiote to Java,
and
Groovy can now be the static language
replacement for Java.
Copyright © 2013 Russel Winder 33
@TypeChecked
@CompileStatic
Copyright © 2013 Russel Winder 34
@TypeChecked
static staticTyping(x, y) {
x * y
}
Copyright © 2013 Russel Winder 35
Compile time interface conformance,
no duck typing.
Copyright © 2013 Russel Winder 36
✘✘
Copyright © 2013 Russel Winder 37
Groovy now has C++-style message passing.
Copyright © 2013 Russel Winder 38
@TypeChecked
static staticTyping(Number x, Number y) {
x * y
}
Copyright © 2013 Russel Winder 39
Enforce don't ask.
Copyright © 2013 Russel Winder 40
A totally different view of how computation
proceeds: a different computational model.
Copyright © 2013 Russel Winder 41
class ExpandoDynamic {
static void main(args) {
def x = new Expando()
x.multiply = { y -> x.data * y }
x.data = 'XX'
def y = 2
assert x * 2 == 'XXXX'
}
}
Copyright © 2013 Russel Winder 42
@TypeChecked
class ExpandoStatic {
static void main(args) {
def x = new Expando()
x.multiply = { y -> x.data * y }
x.data = 'XX'
def y = 2
assert x * 2 == 'XXXX'
}
}
Copyright © 2013 Russel Winder 43
Should a language support two disparate
computational models?
Copyright © 2013 Russel Winder 44
final class Thing {
final x
Thing(x) { this.x = x }
Thing multiply(Thing y) { new Thing(x * y.x) }
boolean equals(Thing y) { x == y.x }
boolean equals (Object y) { x == y }
String toString() { x.toString() }
}
x = new Thing('XX')
y = new Thing(2)
z = new Thing(2.0)
assert x * y == 'XXXX'
assert x * y == new Thing('XXXX')
assert x * z == 'XXXX'
assert x * z == new Thing('XXXX')
assert y * z == 4.0
assert y * z == new Thing(4.0)
assert z * y == 4.0
assert z * y == new Thing(4.0)
Copyright © 2013 Russel Winder 45
@TypeChecked
final class Thing {
final Integer x_i
final String x_s
Thing(Integer x) { this.x_i = x ; assert this.x_s == null }
Thing(String x) { this.x_s = x ; assert this.x_i == null }
Thing multiply(Thing y) {
if (x_i == null) { new Thing(StringGroovyMethods.multiply(x_s, (Number)y.x)) }
else { new Thing(x_i * y.x_i) }
}
Object getX() { x_i == null ? x_s : x_i }
boolean equals(Thing y) { x_i == null ? x_s == y.x_s : x_i == y.x_i }
boolean equals (Object y) { x == y }
String toString() { x.toString() }
}
x = new Thing('XX')
y = new Thing(2)
assert x * y == 'XXXX'
assert x * y == new Thing('XXXX')
Copyright © 2013 Russel Winder 46
Should a language do one thing well?
Copyright © 2013 Russel Winder 47
class Duck {
static main(args) {
def total = 1
def data = [2, 3]
try {
total += data.sum()
}
catch (MissingMethodException mme) {
total = 0
}
assert total == 6
}
}
Copyright © 2013 Russel Winder 48
@TypeChecked
class NotDuck {
static void main(String[] args) {
Integer total = 1
List data = [2, 3]
total += (Integer)data.sum()
assert total == 6
}
}
Copyright © 2013 Russel Winder 49
Should a language be all things…
Copyright © 2013 Russel Winder 50
Copyright © 2013 Russel Winder 51
…or should we embrace polyglot programming?
Copyright © 2013 Russel Winder 52
Groovy +
{
Java
Scala
Ceylon
Kotlin
Copyright © 2013 Russel Winder 53
Tooling and IDE support is a big issue.
Copyright © 2013 Russel Winder 54
Endnote
Copyright © 2013 Russel Winder 55
This is philosophizing.
Copyright © 2013 Russel Winder 56
Personal experience useful.
We are allowed to debate and (dis)agree.
Create a personal view.
Copyright © 2013 Russel Winder 57
What is really needed is some objective research.
Copyright © 2013 Russel Winder 58
Copyright © 2013 Russel Winder 59
Psychology of programming.
PPIG.
Copyright © 2013 Russel Winder 60
foment [f m nt]əˈ ɛ
vb (tr)
1. to encourage or instigate (trouble, discord, etc.); stir up
2. (Medicine) Med to apply heat and moisture to (a part of the body) to relieve
pain and inflammation
[from Late Latin f ment re, from Latin f mentum a poultice, ultimately fromō ā ō
fov re to foster]ē
fomentation [ f m n te n] nˌ əʊ ɛ ˈ ɪʃə
fomenter n
Usage: Both foment and ferment can be used to talk about stirring up trouble:
he was accused of fomenting/fermenting unrest. Only ferment can be used
intransitively or as a noun: his anger continued to ferment (not foment); rural
areas were unaffected by the ferment in the cities
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
Copyright © 2013 Russel Winder 61
ferment
n [ f m nt]ˈ ɜː ɛ
1. (Life Sciences & Allied Applications / Biochemistry) any agent or substance,
such as a bacterium, mould, yeast, or enzyme, that causes fermentation
2. (Life Sciences & Allied Applications / Biochemistry) another word for
fermentation
3. commotion; unrest
vb [f m nt]əˈ ɛ
1. (Life Sciences & Allied Applications / Biochemistry) to undergo or cause to
undergo fermentation
2. to stir up or seethe with excitement
[from Latin fermentum yeast, from ferv re to seethe]ē
fermentable adj
fermentability n
fermenter n
Usage: See at foment
Collins English Dictionary – Complete and Unabridged © HarperCollins
Publishers 1991, 1994, 1998, 2000, 2003
Copyright © 2013 Russel Winder 62
?
Copyright © 2013 Russel Winder 63
Is Groovy Static or
Dynamic?
Russel Winder
email: russel@winder.org.uk
xmpp: russel@winder.org.uk
twitter: @russel_winder
web: http://www.russel.org.uk
Copyright © 2013 Russel Winder 64
Groovy is Static or Dynamic
Russel Winder
email: russel@winder.org.uk
xmpp: russel@winder.org.uk
twitter: @russel_winder
web: http://www.russel.org.uk

More Related Content

PDF
Gj3611551159
PDF
WASJ JOURNAL
PDF
GPars Remoting
PDF
Are Go and D threats to Python
PDF
Spocktacular Testing
PDF
Spocktacular testing
PDF
Tales from the Workshops
PDF
Dance4Life - The Heroes Universe
Gj3611551159
WASJ JOURNAL
GPars Remoting
Are Go and D threats to Python
Spocktacular Testing
Spocktacular testing
Tales from the Workshops
Dance4Life - The Heroes Universe

Similar to Is Groovy static or dynamic (20)

PDF
Java is dead, long live Scala, Kotlin, Ceylon, etc.
PDF
Polyglot JVM
PDF
Introduction to Groovy (Serbian Developer Conference 2013)
PDF
Java is dead, long live Scala Kotlin Ceylon etc.
PPTX
Groovy And Grails Introduction
PDF
Java is Dead, Long Live Ceylon, Kotlin, etc
PDF
Why Groovy When Java 8 or Scala, or…
PDF
Grooming with Groovy
PPTX
PDF
A Tour Through the Groovy Ecosystem
PDF
OpenLogic
PDF
Groovy On Trading Desk (2010)
PDF
Testing: Python, Java, Groovy, etc.
PDF
Download full ebook of Java Cookbook Ian F Darwin Darwin Ian F instant downlo...
PPT
Groovy unleashed
PDF
Testing outside of the Ruby World
KEY
groovy & grails - lecture 2
PDF
Антон Кириллов, ZeptoLab
PPT
Evolving as a professional software developer
PDF
On being a professional software developer
Java is dead, long live Scala, Kotlin, Ceylon, etc.
Polyglot JVM
Introduction to Groovy (Serbian Developer Conference 2013)
Java is dead, long live Scala Kotlin Ceylon etc.
Groovy And Grails Introduction
Java is Dead, Long Live Ceylon, Kotlin, etc
Why Groovy When Java 8 or Scala, or…
Grooming with Groovy
A Tour Through the Groovy Ecosystem
OpenLogic
Groovy On Trading Desk (2010)
Testing: Python, Java, Groovy, etc.
Download full ebook of Java Cookbook Ian F Darwin Darwin Ian F instant downlo...
Groovy unleashed
Testing outside of the Ruby World
groovy & grails - lecture 2
Антон Кириллов, ZeptoLab
Evolving as a professional software developer
On being a professional software developer
Ad

More from Russel Winder (20)

PDF
On Concurrency and Parallelism in the JVMverse
PDF
The Case for Kotlin and Ceylon
PDF
On the Architectures of Microservices: the next layer
PDF
Fast Python? Don't Bother
PDF
Making Python computations fast
PDF
Making Computations Execute Very Quickly
PDF
GPars 2014
PDF
Dataflow: the concurrency/parallelism architecture you need
PDF
Is Groovy as fast as Java
PDF
Who needs C++ when you have D and Go
PDF
Java 8: a New Beginning
PDF
Why Go is an important programming language
ODP
GPars: Groovy Parallelism for Java
PDF
GroovyFX: or how to program JavaFX easily
PDF
Switch to Python 3…now…immediately
PDF
GPars Workshop
PDF
Given Groovy Who Needs Java
PDF
Closures: The Next "Big Thing" In Java
PDF
It's All About Processes Communicating
PDF
On Concurrency and Parallelism in the JVMverse
The Case for Kotlin and Ceylon
On the Architectures of Microservices: the next layer
Fast Python? Don't Bother
Making Python computations fast
Making Computations Execute Very Quickly
GPars 2014
Dataflow: the concurrency/parallelism architecture you need
Is Groovy as fast as Java
Who needs C++ when you have D and Go
Java 8: a New Beginning
Why Go is an important programming language
GPars: Groovy Parallelism for Java
GroovyFX: or how to program JavaFX easily
Switch to Python 3…now…immediately
GPars Workshop
Given Groovy Who Needs Java
Closures: The Next "Big Thing" In Java
It's All About Processes Communicating
Ad

Recently uploaded (20)

PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Machine Learning_overview_presentation.pptx
PDF
Empathic Computing: Creating Shared Understanding
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Approach and Philosophy of On baking technology
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
sap open course for s4hana steps from ECC to s4
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
cuic standard and advanced reporting.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Machine Learning_overview_presentation.pptx
Empathic Computing: Creating Shared Understanding
Diabetes mellitus diagnosis method based random forest with bat algorithm
Approach and Philosophy of On baking technology
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Encapsulation_ Review paper, used for researhc scholars
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Advanced methodologies resolving dimensionality complications for autism neur...
sap open course for s4hana steps from ECC to s4
gpt5_lecture_notes_comprehensive_20250812015547.pdf
cuic standard and advanced reporting.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
“AI and Expert System Decision Support & Business Intelligence Systems”
Mobile App Security Testing_ A Comprehensive Guide.pdf
NewMind AI Weekly Chronicles - August'25-Week II
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Review of recent advances in non-invasive hemoglobin estimation

Is Groovy static or dynamic

  • 1. Copyright © 2013 Russel Winder 1 Is Groovy Static or Dynamic? Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder web: http://www.russel.org.uk
  • 2. Copyright © 2013 Russel Winder 2 ?
  • 3. Copyright © 2013 Russel Winder 3 Prelude
  • 4. Copyright © 2013 Russel Winder 4 Debate [d be t]ɪˈ ɪ n 1. (Government, Politics & Diplomacy) a formal discussion, as in a legislative body, in which opposing arguments are put forward 2. discussion or dispute 3. (Philosophy) the formal presentation and opposition of a specific motion, followed by a vote vb 1. to discuss (a motion), esp in a formal assembly 2. to deliberate upon (something) he debated with himself whether to go [from Old French debatre to discuss, argue, from Latin battuere] debater n Collins English Dictionary – Complete and Unabridged © HarperCollins Publishers 1991, 1994, 1998, 2000, 2003.
  • 5. Copyright © 2013 Russel Winder 5 foment [f m nt]əˈ ɛ vb (tr) 1. to encourage or instigate (trouble, discord, etc.); stir up 2. (Medicine) Med to apply heat and moisture to (a part of the body) to relieve pain and inflammation [from Late Latin f ment re, from Latin f mentum a poultice, ultimately fromō ā ō fov re to foster]ē fomentation [ f m n te n]ˌ əʊ ɛ ˈ ɪʃə n fomenter n Usage: Both foment and ferment can be used to talk about stirring up trouble: he was accused of fomenting/fermenting unrest. Only ferment can be used intransitively or as a noun: his anger continued to ferment (not foment); rural areas were unaffected by the ferment in the cities Collins English Dictionary – Complete and Unabridged © HarperCollins Publishers 1991, 1994, 1998, 2000, 2003
  • 6. Copyright © 2013 Russel Winder 6 ferment n [ f m nt]ˈ ɜː ɛ 1. (Life Sciences & Allied Applications / Biochemistry) any agent or substance, such as a bacterium, mould, yeast, or enzyme, that causes fermentation 2. (Life Sciences & Allied Applications / Biochemistry) another word for fermentation 3. commotion; unrest vb [f m nt]əˈ ɛ 1. (Life Sciences & Allied Applications / Biochemistry) to undergo or cause to undergo fermentation 2. to stir up or seethe with excitement [from Latin fermentum yeast, from ferv re to seethe]ē fermentable adj fermentability n fermenter n Usage: See at foment Collins English Dictionary – Complete and Unabridged © HarperCollins Publishers 1991, 1994, 1998, 2000, 2003
  • 7. Copyright © 2013 Russel Winder 7 The intention of this session is to foment debate.
  • 8. Copyright © 2013 Russel Winder 8 Let the fomentation begin.
  • 9. Copyright © 2013 Russel Winder 9 No not the fermentation.
  • 10. Copyright © 2013 Russel Winder 10 Starting Point
  • 11. Copyright © 2013 Russel Winder 11 2003 Groovy is created as the dynamic symbiote to Java.
  • 12. Copyright © 2013 Russel Winder 12 Dynamic languages have no typed variables.
  • 13. Copyright © 2013 Russel Winder 13 static totallyDynamic(x, y) { x * y }
  • 14. Copyright © 2013 Russel Winder 14
  • 15. Copyright © 2013 Russel Winder 15 Duck typing: The receiver of the message decides the meaning of the message.
  • 16. Copyright © 2013 Russel Winder 16 Operators are not messages to a receiving object in Java…
  • 17. Copyright © 2013 Russel Winder 17 …Java isn't really an object-oriented language.
  • 18. Copyright © 2013 Russel Winder 18 Fortunately, Groovy decided to follow Smalltalk, and have a meta-object protocol.
  • 19. Copyright © 2013 Russel Winder 19 Groovy is truly object-oriented, message passing is the operational semantic, and all variables are references to objects.
  • 20. Copyright © 2013 Russel Winder 20 x * y transforms to x.plus(y) to realize message passing with method call.
  • 21. Copyright © 2013 Russel Winder 21 Interesting Issue
  • 22. Copyright © 2013 Russel Winder 22
  • 23. Copyright © 2013 Russel Winder 23 Objects clearly have static types.
  • 24. Copyright © 2013 Russel Winder 24 Java allows for despatch by signature, i.e. methods can be overloaded.
  • 25. Copyright © 2013 Russel Winder 25
  • 26. Copyright © 2013 Russel Winder 26 Adding types to parameters is required for despatch by signature.
  • 27. Copyright © 2013 Russel Winder 27 static runtimeTyping(Number x, Number y) { x * y }
  • 28. Copyright © 2013 Russel Winder 28 Groovy is an optionally typed language: variables, not just function and method parameters, may or may not be given a type.
  • 29. Copyright © 2013 Russel Winder 29 Adding types works in harmony with method overloading.
  • 30. Copyright © 2013 Russel Winder 30 All type checking is at run time. This is harmonious with duck typing.
  • 31. Copyright © 2013 Russel Winder 31 Being up to date
  • 32. Copyright © 2013 Russel Winder 32 2013 Groovy is the dynamic symbiote to Java, and Groovy can now be the static language replacement for Java.
  • 33. Copyright © 2013 Russel Winder 33 @TypeChecked @CompileStatic
  • 34. Copyright © 2013 Russel Winder 34 @TypeChecked static staticTyping(x, y) { x * y }
  • 35. Copyright © 2013 Russel Winder 35 Compile time interface conformance, no duck typing.
  • 36. Copyright © 2013 Russel Winder 36 ✘✘
  • 37. Copyright © 2013 Russel Winder 37 Groovy now has C++-style message passing.
  • 38. Copyright © 2013 Russel Winder 38 @TypeChecked static staticTyping(Number x, Number y) { x * y }
  • 39. Copyright © 2013 Russel Winder 39 Enforce don't ask.
  • 40. Copyright © 2013 Russel Winder 40 A totally different view of how computation proceeds: a different computational model.
  • 41. Copyright © 2013 Russel Winder 41 class ExpandoDynamic { static void main(args) { def x = new Expando() x.multiply = { y -> x.data * y } x.data = 'XX' def y = 2 assert x * 2 == 'XXXX' } }
  • 42. Copyright © 2013 Russel Winder 42 @TypeChecked class ExpandoStatic { static void main(args) { def x = new Expando() x.multiply = { y -> x.data * y } x.data = 'XX' def y = 2 assert x * 2 == 'XXXX' } }
  • 43. Copyright © 2013 Russel Winder 43 Should a language support two disparate computational models?
  • 44. Copyright © 2013 Russel Winder 44 final class Thing { final x Thing(x) { this.x = x } Thing multiply(Thing y) { new Thing(x * y.x) } boolean equals(Thing y) { x == y.x } boolean equals (Object y) { x == y } String toString() { x.toString() } } x = new Thing('XX') y = new Thing(2) z = new Thing(2.0) assert x * y == 'XXXX' assert x * y == new Thing('XXXX') assert x * z == 'XXXX' assert x * z == new Thing('XXXX') assert y * z == 4.0 assert y * z == new Thing(4.0) assert z * y == 4.0 assert z * y == new Thing(4.0)
  • 45. Copyright © 2013 Russel Winder 45 @TypeChecked final class Thing { final Integer x_i final String x_s Thing(Integer x) { this.x_i = x ; assert this.x_s == null } Thing(String x) { this.x_s = x ; assert this.x_i == null } Thing multiply(Thing y) { if (x_i == null) { new Thing(StringGroovyMethods.multiply(x_s, (Number)y.x)) } else { new Thing(x_i * y.x_i) } } Object getX() { x_i == null ? x_s : x_i } boolean equals(Thing y) { x_i == null ? x_s == y.x_s : x_i == y.x_i } boolean equals (Object y) { x == y } String toString() { x.toString() } } x = new Thing('XX') y = new Thing(2) assert x * y == 'XXXX' assert x * y == new Thing('XXXX')
  • 46. Copyright © 2013 Russel Winder 46 Should a language do one thing well?
  • 47. Copyright © 2013 Russel Winder 47 class Duck { static main(args) { def total = 1 def data = [2, 3] try { total += data.sum() } catch (MissingMethodException mme) { total = 0 } assert total == 6 } }
  • 48. Copyright © 2013 Russel Winder 48 @TypeChecked class NotDuck { static void main(String[] args) { Integer total = 1 List data = [2, 3] total += (Integer)data.sum() assert total == 6 } }
  • 49. Copyright © 2013 Russel Winder 49 Should a language be all things…
  • 50. Copyright © 2013 Russel Winder 50
  • 51. Copyright © 2013 Russel Winder 51 …or should we embrace polyglot programming?
  • 52. Copyright © 2013 Russel Winder 52 Groovy + { Java Scala Ceylon Kotlin
  • 53. Copyright © 2013 Russel Winder 53 Tooling and IDE support is a big issue.
  • 54. Copyright © 2013 Russel Winder 54 Endnote
  • 55. Copyright © 2013 Russel Winder 55 This is philosophizing.
  • 56. Copyright © 2013 Russel Winder 56 Personal experience useful. We are allowed to debate and (dis)agree. Create a personal view.
  • 57. Copyright © 2013 Russel Winder 57 What is really needed is some objective research.
  • 58. Copyright © 2013 Russel Winder 58
  • 59. Copyright © 2013 Russel Winder 59 Psychology of programming. PPIG.
  • 60. Copyright © 2013 Russel Winder 60 foment [f m nt]əˈ ɛ vb (tr) 1. to encourage or instigate (trouble, discord, etc.); stir up 2. (Medicine) Med to apply heat and moisture to (a part of the body) to relieve pain and inflammation [from Late Latin f ment re, from Latin f mentum a poultice, ultimately fromō ā ō fov re to foster]ē fomentation [ f m n te n] nˌ əʊ ɛ ˈ ɪʃə fomenter n Usage: Both foment and ferment can be used to talk about stirring up trouble: he was accused of fomenting/fermenting unrest. Only ferment can be used intransitively or as a noun: his anger continued to ferment (not foment); rural areas were unaffected by the ferment in the cities Collins English Dictionary – Complete and Unabridged © HarperCollins Publishers 1991, 1994, 1998, 2000, 2003
  • 61. Copyright © 2013 Russel Winder 61 ferment n [ f m nt]ˈ ɜː ɛ 1. (Life Sciences & Allied Applications / Biochemistry) any agent or substance, such as a bacterium, mould, yeast, or enzyme, that causes fermentation 2. (Life Sciences & Allied Applications / Biochemistry) another word for fermentation 3. commotion; unrest vb [f m nt]əˈ ɛ 1. (Life Sciences & Allied Applications / Biochemistry) to undergo or cause to undergo fermentation 2. to stir up or seethe with excitement [from Latin fermentum yeast, from ferv re to seethe]ē fermentable adj fermentability n fermenter n Usage: See at foment Collins English Dictionary – Complete and Unabridged © HarperCollins Publishers 1991, 1994, 1998, 2000, 2003
  • 62. Copyright © 2013 Russel Winder 62 ?
  • 63. Copyright © 2013 Russel Winder 63 Is Groovy Static or Dynamic? Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder web: http://www.russel.org.uk
  • 64. Copyright © 2013 Russel Winder 64 Groovy is Static or Dynamic Russel Winder email: russel@winder.org.uk xmpp: russel@winder.org.uk twitter: @russel_winder web: http://www.russel.org.uk