The document discusses features and changes in different versions of Groovy, a Java-based scripting language. It summarizes highlights from Groovy 1.6 including improved performance, multiple assignments, optional returns, annotations, AST transformations, the Grape module system, and more. It then discusses new features in Groovy 1.7 such as anonymous inner classes, nested classes, annotations anywhere, Grape improvements, power asserts, an AST viewer, and an AST builder.
Azul Virtual Machine Engineer Douglas Hawkins describes how decisions made by the JVM affect how your code is compiled and run. Learn how this affects application performance and what steps you can take to optimize how the JVM acts on your code.
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
Presentation for the 1st InterSystems Meetup in the Minsk:
- New and better InterSystems changes their practice.
- open-source repositories, meetups, and hackathon;
- CPM (package manager) as a good example of open-source project
Azul Virtual Machine Engineer Douglas Hawkins describes how decisions made by the JVM affect how your code is compiled and run. Learn how this affects application performance and what steps you can take to optimize how the JVM acts on your code.
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
Presentation for the 1st InterSystems Meetup in the Minsk:
- New and better InterSystems changes their practice.
- open-source repositories, meetups, and hackathon;
- CPM (package manager) as a good example of open-source project
The latest slide deck about Java NIO.2 from *instinctools Java developer Alexandr Brui. You can find here Java NIO.2 design, work with data, selector & channels, reading & writing and many more.
Supercharging reflective libraries with InvokeDynamicIan Robertson
Reflection is a powerful tool but has traditionally carried with it a performance penalty. This session shows how a combination of InvokeDynamic and bytecode generation can be used to transform a traditional reflection-based library into one in which there is almost no performance penalty. To do so, the presentation starts with a brief need-to-know overview of JVM bytecode and the InvokeDynamic protocol. It then walks through creating a simple JSON marshaling library by using ASM bytecode generation and InvokeDynamic and shows how hand-rolled marshaling code can be rivaled in performance. Techniques for testing this code, including security policies, are also covered.
During our most recent workshops, we presented the most popular libraries of Node.js, and their installation on Docker. Thanks to our presentation, you’ll be able to program applications which use Node.js and ES6.
Grooscript is an open source project, a little framework that convert groovy code to javascript, more info in grooscript.org.
Javascript is cool now, a vibrant community with many new developments. Web development is moving to client size and you must be start to worry about javascript and all the new awesome tools for it. With grooscript, you can join this new wave with our lovely groovy. You can code all the logic of your application in groovy, test with spock, use gradle or any other java or groovy framework. Grooscript will convert your application code to javascript and then you can use it in the browser or Node.js.
In this talk I will introduce about grooscript, how started, how can be used, explore its limitations,… Also I will show grooscript grails plugin, and what do you can do with it. We will take a look at Node.js plugin and gradle plugin, and how to use this tools. I will show some demos of different ways to use grooscript.
Everything you wanted to know about Stack Traces and Heap DumpsAndrei Pangin
Stack traces and heap dumps are not just debugging tools; they open a doorway to the very heart of the Java Virtual Machine. This session is focused on peculiarities of JDK somehow related to heap walking and thread stacks.
• How to create dump in production without side effects?
• What is the performance impact of stack traces?
• How do jmap and jstack work under the hood, and what is special about 'forced' mode?
• Why do all profilers lie, and how to deal with it?
• How to scan heap using JVMTI?
The presentation supported by the live demos will address all these questions. It will also introduce new Java 9 Stack-Walking API (JEP 259) and reveal some useful but little known features of HotSpot JVM.
There is hardly a Senior Java developer who has never heard of sun.misc.Unsafe. Though it has always been a private API intended for JDK internal use only, the popularity of Unsafe has grown too fast, and now it is used in many open-source projects. OK.RU is not an exception: its software also heavily relies on Unsafe APIs.
During this session we'll try to understand what is so attractive about Unsafe. Why do people keep using it regardless the warnings of removal from future JDK releases? Are there any safe alternatives to private API or is it absolutely vital? We will review the typical cases when Java developers prefer to go unsafe and discuss major benefits and the drawbacks of it. The report will be supported by the real examples from OK.RU experience.
The latest slide deck about Java NIO.2 from *instinctools Java developer Alexandr Brui. You can find here Java NIO.2 design, work with data, selector & channels, reading & writing and many more.
Supercharging reflective libraries with InvokeDynamicIan Robertson
Reflection is a powerful tool but has traditionally carried with it a performance penalty. This session shows how a combination of InvokeDynamic and bytecode generation can be used to transform a traditional reflection-based library into one in which there is almost no performance penalty. To do so, the presentation starts with a brief need-to-know overview of JVM bytecode and the InvokeDynamic protocol. It then walks through creating a simple JSON marshaling library by using ASM bytecode generation and InvokeDynamic and shows how hand-rolled marshaling code can be rivaled in performance. Techniques for testing this code, including security policies, are also covered.
During our most recent workshops, we presented the most popular libraries of Node.js, and their installation on Docker. Thanks to our presentation, you’ll be able to program applications which use Node.js and ES6.
Grooscript is an open source project, a little framework that convert groovy code to javascript, more info in grooscript.org.
Javascript is cool now, a vibrant community with many new developments. Web development is moving to client size and you must be start to worry about javascript and all the new awesome tools for it. With grooscript, you can join this new wave with our lovely groovy. You can code all the logic of your application in groovy, test with spock, use gradle or any other java or groovy framework. Grooscript will convert your application code to javascript and then you can use it in the browser or Node.js.
In this talk I will introduce about grooscript, how started, how can be used, explore its limitations,… Also I will show grooscript grails plugin, and what do you can do with it. We will take a look at Node.js plugin and gradle plugin, and how to use this tools. I will show some demos of different ways to use grooscript.
Everything you wanted to know about Stack Traces and Heap DumpsAndrei Pangin
Stack traces and heap dumps are not just debugging tools; they open a doorway to the very heart of the Java Virtual Machine. This session is focused on peculiarities of JDK somehow related to heap walking and thread stacks.
• How to create dump in production without side effects?
• What is the performance impact of stack traces?
• How do jmap and jstack work under the hood, and what is special about 'forced' mode?
• Why do all profilers lie, and how to deal with it?
• How to scan heap using JVMTI?
The presentation supported by the live demos will address all these questions. It will also introduce new Java 9 Stack-Walking API (JEP 259) and reveal some useful but little known features of HotSpot JVM.
There is hardly a Senior Java developer who has never heard of sun.misc.Unsafe. Though it has always been a private API intended for JDK internal use only, the popularity of Unsafe has grown too fast, and now it is used in many open-source projects. OK.RU is not an exception: its software also heavily relies on Unsafe APIs.
During this session we'll try to understand what is so attractive about Unsafe. Why do people keep using it regardless the warnings of removal from future JDK releases? Are there any safe alternatives to private API or is it absolutely vital? We will review the typical cases when Java developers prefer to go unsafe and discuss major benefits and the drawbacks of it. The report will be supported by the real examples from OK.RU experience.
Clojure is a new dialect of LISP that runs on the Java Virtual Machine (JVM). As a functional language, it offers great benefits in terms of programmer productivity; as a language that runs on the JVM, it also offers the opportunity to reuse existing Java libraries. Simon’s interest is in using Clojure to build desktop applications with the Java Swing GUI library. In this presentation Simon discusses how the power of Clojure can be applied to Swing, and whether it hits the sweet spot.
From Java to Parellel Clojure - Clojure South 2019Leonardo Borges
Java still ranks at the top of the TIOBE index. The JVM is a trusted platform which has stood the test of time and is used widely to develop complex, reliable and high performing systems. By choosing to target the JVM, Clojure can leverage all of its power while bringing new ways of writing reliable software into the mix. But why should a Java developer care?
In this talk we will examine the main differences between Java and Clojure, pointing out new patterns and tools and finally ending with a discussion of the concurrency and parallelism abstractions provided by Clojure.
By the end of this talk you will have developed an understanding of Clojure’s fundamental building blocks for writing concurrent applications.
Part presentation, part debate about the future of the language while touching base on the current state of the industry with respect to ES6/ES2015, and the possibilities of using it today in web applications and frameworks, the different options, and the things to keep in mind. Additionally, we will do a walk-through on the new features included in ES7/ES2016 draft, and those that are being discussed for ES8/ES2017.
Fort de ses 1.7 millions de téléchargements l'an passé, Groovy continue son bonhomme de chemin en tête parmi les langages de programmation alternatifs pour la JVM.
Groovy 2.0, sorti l'an passé, introduisait dans son offre de la modularité, le support de JDK 7 au niveau syntaxique avec "Project Coin" autant qu'au niveau JVM avec l'utilisation d'"invoke dynamic", et proposait des fonctionnalités de typage et de compilation statique.
Groovy 2.1, quant à lui, s'appuie sur ces bases pour compléter le support d'"invoke dynamic" pour plus de performances. Il propose des améliorations permettant de documenter, d'aider les IDEs, et de vérifier statiquement les Domain-Specific Languages construits avec Groovy. Vous pourrez créer des méta-annotations regroupant d'autres annotations, pour éviter l'annotation "hell". Et enfin, vous irez encore plus loin dans la customisation du compilateur !
Accrochez votre ceinture, paré au décollage !
"Groovy 2.0 and beyond" presentation given at the Groovy/Grails eXchange conference.
Video can be seen here:
http://skillsmatter.com/podcast/groovy-grails/keynote-speech
Groovy Domain Specific Languages - SpringOne2GX 2012Guillaume Laforge
Paul King, Andrew Eisenberg and Guillaume Laforge present about implementation of Domain-Specific Languages in Groovy, while at the SpringOne2GX 2012 conference in Washington DC.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...SOFTTECHHUB
The choice of an operating system plays a pivotal role in shaping our computing experience. For decades, Microsoft's Windows has dominated the market, offering a familiar and widely adopted platform for personal and professional use. However, as technological advancements continue to push the boundaries of innovation, alternative operating systems have emerged, challenging the status quo and offering users a fresh perspective on computing.
One such alternative that has garnered significant attention and acclaim is Nitrux Linux 3.5.0, a sleek, powerful, and user-friendly Linux distribution that promises to redefine the way we interact with our devices. With its focus on performance, security, and customization, Nitrux Linux presents a compelling case for those seeking to break free from the constraints of proprietary software and embrace the freedom and flexibility of open-source computing.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Securing your Kubernetes cluster_ a step-by-step guide to success !KatiaHIMEUR1
Today, after several years of existence, an extremely active community and an ultra-dynamic ecosystem, Kubernetes has established itself as the de facto standard in container orchestration. Thanks to a wide range of managed services, it has never been so easy to set up a ready-to-use Kubernetes cluster.
However, this ease of use means that the subject of security in Kubernetes is often left for later, or even neglected. This exposes companies to significant risks.
In this talk, I'll show you step-by-step how to secure your Kubernetes cluster for greater peace of mind and reliability.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
In his public lecture, Christian Timmerer provides insights into the fascinating history of video streaming, starting from its humble beginnings before YouTube to the groundbreaking technologies that now dominate platforms like Netflix and ORF ON. Timmerer also presents provocative contributions of his own that have significantly influenced the industry. He concludes by looking at future challenges and invites the audience to join in a discussion.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfPaige Cruz
Monitoring and observability aren’t traditionally found in software curriculums and many of us cobble this knowledge together from whatever vendor or ecosystem we were first introduced to and whatever is a part of your current company’s observability stack.
While the dev and ops silo continues to crumble….many organizations still relegate monitoring & observability as the purview of ops, infra and SRE teams. This is a mistake - achieving a highly observable system requires collaboration up and down the stack.
I, a former op, would like to extend an invitation to all application developers to join the observability party will share these foundational concepts to build on:
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
2. Guillaume Laforge
• Groovy Project Manager
• JSR-241 Spec Lead
• Head of Groovy Development
at SpringSource
• Initiator of the Grails framework
• Co-author of Groovy in Action
• Speaker: JavaOne, QCon, JavaZone, Sun TechDays,
Devoxx, The Spring Experience, SpringOne, JAX,
Dynamic Language World, IJTC, and more...
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 2
3. Agenda
•Past
– Groovy 1.6 flashback
•Present
– Groovy 1.7 novelties
– A few Groovy 1.7.x refinements
•Future
– What’s cooking for 1.8 and beyond
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 3
5. Big highlights of Groovy 1.6
• Greater compile-time and runtime performance
• Multiple assignments
• Optional return for if/else and try/catch/finally
• Java 5 annotation definition
• AST Transformations
• The Grape module and dependency system
• Various Swing related improvements
• JMX Builder
• Metaprogramming additions
• JSR-223 scripting engine built-in
• Out-of-the-box OSGi support
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 5
6. Multiple assignement
// multiple assignment
def (a, b) = [1, 2]
assert a == 1 && b == 2
// with typed variables
def (int c, String d) = [3, "Hi"]
assert c == 3 && d == "Hi"
def geocode(String place) { [48.8, 2.3] }
def lat, lng
// assignment to existing variables
(lat, lng) = geocode('Paris')
// classical variable swaping example
(a, b) = [b, a]
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 6
7. More optional return
// optional return for if statements
def m1() {
if (true) 1
else 0
}
assert m1() == 1
// optional return for try/catch/finally
def m2(bool) {
try {
if (bool) throw new Exception()
1
} catch (any) { 2 }
finally { 3 }
}
assert m2(true) == 2 && m2(false) == 1
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 7
8. AST Transformation (1/2)
• Groovy 1.6 introduced AST Transformations
• AST: Abstract Syntax Tree
• Ability to change what’s being compiled by the
Groovy compiler... at compile time
– No runtime impact!
– Change the semantics of your programs! Even hijack the
Groovy syntax!
– Implementing recurring patterns in your code base
– Remove boiler-plate code
• Two kinds: global and local (triggered by anno)
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 8
9. AST Transformations (2/2)
• Transformations introduced in 1.6
– @Singleton
– @Immutable, @Lazy, @Delegate
– @Newify
– @Category, @Mixin
– @PackageScope
– Swing’s @Bindable and @Vetoable
– Grape’s own @Grab
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 9
10. @Immutable
• To properly implement immutable classes
– No mutations — state musn’t change
– Private final fields
– Defensive copying of mutable components
– Proper equals() / hashCode() / toString()
for comparisons or fas keys in maps
@Immutable class Coordinates {
Double lat, lng
}
def c1 = new Coordinates(lat: 48.8, lng: 2.5)
def c2 = new Coordinates(48.8, 2.5)
assert c1 == c2
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 10
11. Grab a grape!
• Simple distribution and sharing of Groovy scripts
• Dependencies stored locally
– Can even use your own local repositories
@Grab(group = 'org.mortbay.jetty',
module = 'jetty‐embedded',
version = '6.1.0')
def startServer() {
def srv = new Server(8080)
SIONS)
def ctx = new Context(srv , "/", SES
ctx.resourceBase = "."
ovy")
ctx.addServlet(GroovyServlet, "*.gro
srv.start()
}
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 11
12. Metaprogramming additions (1/2)
• ExpandoMetaClass DSL
– factoring EMC changes
Number.metaClass {
multiply { Amount amount ‐>
amount.times(delegate)
}
div { Amount amount ‐>
amount.inverse().times(delegate)
}
}
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 12
13. Metaprogramming additions (2/2)
• Runtime mixins
class FlyingAbility {
def fly() { "I'm ${name} and I fly!" }
}
class JamesBondVehicle {
String getName() { "James Bond's vehicle" }
}
JamesBondVehicle.mixin FlyingAbility
assert new JamesBondVehicle().fly() ==
"I'm James Bond's vehicle and I fly!"
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 13
14. JMX Builder
• A DSL for handling JMX
– in addition of Groovy MBean
// Create a connector server
def jmx = new JmxBuilder()
jmx.connectorServer(port:9000).start()
// Create a connector client
jmx.connectorClient(port:9000).connect()
//Export a bean
jmx.export { bean new MyService() }
// Defining a timer
jmx.timer(name: "jmx.builder:type=Timer",
event: "heartbeat", period: "1s").start()
// JMX listener
jmx.listener(event: "someEvent", from: "bean",
call: { evt ‐> /* do something */ })
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 14
16. Big highlights of Groovy 1.7
• Anonymous Inner Classes and Nested Classes
• Annotations anywhere
• Grape improvements
• Power Asserts
• AST Viewer
• AST Builder
• Customize the Groovy Truth!
• Rewrite of the GroovyScriptEngine
• Groovy Console improvements
• SQL support refinements
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 16
17. AIC and NC
• Anonymous Inner Classes and Nested Classes
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
18. AIC and NC
• Anonymous Inner Classes and Nested Classes
Fo rJ ava
’n p aste
c opy
atib ility
co mp
s ake :-)
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 17
19. Annonymous Inner Classes
bo olean called = false
Timer ti mer = new Timer()
timer.schedule(n ew TimerTask() {
void run() {
called = true
}
}, 0)
sleep 100
assert called
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18
20. Annonymous Inner Classes
bo olean called = false
Timer ti mer = new Timer()
timer.schedule(n ew TimerTask() {
void run() {
called = true
}
{ called = true }
}, 0) as
TimerTask
sleep 100
assert called
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 18
21. Nested Classes
class Environment {
static class Production
extends Environment {}
static class Development
extends Environment {}
}
new Environment.Production()
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 19
22. Anotations anywhere
• You can now put annotations
– on imports
– on packages
– on variable declarations
• Examples with @Grab following...
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 20
23. Grape improvements (1/3)
• @Grab on import
@Grab(group = 'net.sf.json‐lib',
module = 'json‐lib',
version = '2.3',
classifier = 'jdk15')
import net.sf.json.groovy.*
assert new JsonSlurper().parseText(
new JsonGroovyBuilder().json {
book(title: "Groovy in Action",
author: "Dierk König et al")
ion"
}.toString()).book.title == "Groovy in Act
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 21
24. Grape improvements (2/3)
• Shorter module / artifact / version parameter
– Example of an annotation on a variable declaration
@Grab('net.sf.json‐lib:json‐lib:2.3:jdk15')
()
def builder = new net.sf.json.groovy.JsonGroovyBuilder
def books = builder.books {
nig")
book(title: "Groovy in Action", author: "Dierk Koe
}
assert books.toString() ==
'{"books":{"book":{"title":"Groovy in Action",' +
'"author":"Dierk Koenig"}}}'
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 22
25. Grape improvements (3/3)
• Groovy 1.7 introduced Grab resolver
– For when you need to specify a specific repository
for a given dependency
@GrabResolver(
name = 'restlet.org',
root = 'http://maven.restlet.org')
@Grab('org.restlet:org.restlet:1.1.6')
import org.restlet.Restlet
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 23
26. Power Asserts (1/2)
• Much better assert statement!
– Invented and developed in the Spock framework
• Given this script...
def energy = 7200 * 10**15 + 1
def mass = 80
def celerity = 300000000
assert energy == mass * celerity ** 2
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 24
27. Power Asserts (2/2)
• You’ll get a more comprehensible output
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 25
28. Easier AST Transformations
• AST Transformations are a very powerful feature
• But are still rather hard to develop
– Need to know the AST API closely
• To help with authoring your own transformations,
we’ve introduced
– the AST Viewer in the Groovy Console
– the AST Builder
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 26
29. AST Viewer
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 27
30. AST Builder
// Ability to build AST parts
// ‐‐> from a String
new AstBui lder().buildFromString(''' "Hello" ''')
// ‐‐> from code
new AstBuilder().buildFromCode { "Hello" }
// ‐‐> from a specification
{
List<ASTNo de> nodes = new AstBuilder().buildFromSpec
block {
returnStatement {
constant "Hello"
}
}
}
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 28
31. Customize the Groovy Truth!
• Ability to customize the truth by implementing a
boolean asBoolean() method
class Predicate {
boolean value
boolean asBoolean() { value }
}
def tr uePred = new Predicate(value: true)
def fals ePred = new Predicate(value: false)
assert truePred && !falsePred
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 29
32. SQL support refinements
// batch statements
sql.withBatch { stmt ‐>
e ‐>
["Paul", "Jochen", "Guillaume"].each { nam e)"
stmt.addBat ch "insert into PERSON (name) values ($nam
}
}
// transaction support
def persons = sql.dataSet("person")
sql.withTransaction {
persons.add name: "Paul"
persons.add name: "Jochen"
persons.add name: "Guillaume"
persons.add name: "Roshan"
}
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 30
33. Groovy 1.7.x changes
• Since Groovy 1.7.0, Groovy 1.7.1, 1.7.2, 1.7.3,
1.7.4 and 1.7.5 have been released already!
• Here’s what’s new!
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 31
34. Map improvements
// map auto‐vification
def m = [:].withDefault { key ‐> "Default" }
assert m['z'] == "Default"
assert m['a'] == "Default"
// default sort
m.sort()
// sort with a comparator
m.sort({ a, b ‐> a <=> b } as Comparator)
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 32
35. XML back to String
• Ability to retrieve the XML string from a node from
an XmlSlurper GPathResult
def xml = """
<books>
<book isbn="12345">Groovy in Action</book>
</books>
"""
def root = new XmlSlurper().parseText(xml)
def someNode = root.book
def bu ilder = new StreamingMarkupBuilder()
assert build er.bindNode(someNode).toString() ==
"<book isbn='12345'>Groovy in Action</book>"
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 33
36. Currying improvements
// right currying
def divide = { a, b ‐> a / b }
def halver = divide.rcurry(2)
assert halver(8) == 4
// currying n‐th parameter
def jo inWithSeparator = { one, sep, two ‐>
one + sep + two
}
def joinWithComma =
jo inWithSeparator.ncurry(1, ', ')
assert joinWithComma('a', 'b') == 'a, b'
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 34
37. New String methods
println """ println """
def method() { |def method() {
return 'bar' | return 'bar'
} |}
""".stripIndent() """.stripMargin('|')
// string "translation" (UNIX tr)
assert 'hello'.tr('z‐a', 'Z‐A') == 'HELLO'
WAAAA!'
asse rt 'Hello World!'.tr('a‐z', 'A') == 'HAAAA
2d!'
assert 'Hell o World!'.tr('lloo', '1234') == 'He224 W4r
// capitalize the first letter
assert 'h'.capitalize() == 'H'
assert 'hello'.capitalize() == 'Hello'
rld'
asse rt 'hello world'.capitalize() == 'Hello wo
mmand)
// tab/space (un)expansion (UNIX expand co
7 8 '
assert '1234567t8t '.expand() == '123456
'
assert ' x '.unexpand() == ' xt
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 35
39. Groovy 1.8 & beyond
• Still subject to discussion
• Always evolving roadmap
• Things may change!
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 37
41. What we’re working on
• More runtime performance improvements
• Closure annotation parameters
• Closure composition
• New AST transformations
• Gradle build
• Modularizing Groovy
• Align with JDK 7 / Java 7 / Project Coin
• Enhanced DSL support
• AST Templates
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 39
42. Closure annotation parameters
• Groovy 1.5 brought Java 5 annotations
• What if... we could go beyond what Java offered?
– In 1.7, we can put annotations on packages, imports and
variable declarations
– But annotations are still limited in terms of parameters
they allow
• Here comes closure annotation parameters!
– Groovy 1.8 will give us the ability to access annotation
with closure parameters at runtime
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 40
43. GContracts
• Closures are already allowed in the Groovy 1.7 Antlr
grammar
– André Steingreß created GContracts,
a «design by contract» module
// a class invariant
@I nvariant({ name.size() > 0 && age > ageLimit() })
// a method pre‐condition
@Requires({ message != null })
// a method post‐condition
@Ensures({ returnResult % 2 == 0 })
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 41
47. build
dh oc oo vy
or e a lar Gr
M o du Hans!
or e m rom
M ef
M or
48. More modular build
• «Not everybody needs everything!» ™
• A lighter Groovy-core
– what’s in groovy-all?
• Modules
– test, jmx, swing, xml, sql, web, template
– integration (bsf, jsr-223)
– tools (groovydoc, groovyc, shell, console, java2groovy)
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 44
49. Java 7 (or 8?) / Project Coin
• JSR-292 InvokeDynamic
• Simple Closures?
• Proposals from Project Coin
– Strings in switch
– Automatic Resource Management
– Improved generics type inference (diamond <>)
– Simplified varargs method invocation
– Better integral literals
– Language support for collections
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 45
50. Improved DSL support
• GEP-3: an extended command expression DSL
– Groovy Extension Proposal #3
• Command expressions
– basically top-level statements without parens
– combine named and non-named arguments in the mix
•for nicer Domain-Specific Languages
– (methodName arguments )*
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 46
51. Before GEP-3
• The idea: extend command-expressions, beyond
top-level statements, for chained method calls
• Before
send("Hello").to("Graeme")
check(that: margherita).tastes(good)
sell(100.shares).of(MSFT)
take(2.pills).of(chloroquinine).after(6.hours)
wait(10.minutes).and(execute { })
blend(red, green).of(acrylic)
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 47
52. With GEP-3
• The idea: extend command-expressions, beyond
top-level statements, for chained method calls
• After
send "Hello" to "Graeme"
check that: margherita tastes good
sell 100.shares of MSFT
take 2.pills of chloroquinine after 6.hours
wait 10.minutes and execute { }
blend red, green of acrylic
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 48
53. With GEP-3
• The idea: extend command-expressions, beyond
top-level statements, for chained method calls
• After
Less
& co pare
ns
send "Hello" to "Graeme"
check that: margherita tastes good mm
sell 100.shares of MSFT
as
take 2.pills of chloroquinine after 6.hours
wait 10.minutes and execute { }
blend red, green of acrylic
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 48
54. Summary (1/2)
• No need to wait for Java 7, 8, 9...
– closures, properties, interpolated strings, extended
annotations, metaprogramming, [YOU NAME IT]...
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 49
55. Summary (1/2)
• No need to wait for Java 7, 8, 9...
– closures, properties, interpolated strings, extended
annotations, metaprogramming, [YOU NAME IT]...
’s s till
Gro ovy
ova tive
inn
20 03!
si nce
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 49
56. Summary (2/2)
• But it’s more than just a language, it’s a very rich
and active ecosystem!
– Grails, Griffon, Gradle, GPars, Spock, Gaelyk...
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 50
57. Thanks for your attention!
e
e Laforg velopment
Gui llaum ovy De m
of Gro e@gmail.co
Head laforg
g
Email: @glaforge
r:
Twitte
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 51
58. Questions & Answers
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 52
59. Images used in this
presentation
• House / past: http://www.flickr.com/photos/jasonepowell/3680030831/sizes/o/
• Present clock: http://www.flickr.com/photos/38629278@N04/3784344944/sizes/o/
• Future: http://www.flickr.com/photos/befuddledsenses/2904000882/sizes/l/
• Cooking: http://www.flickr.com/photos/eole/449958332/sizes/l/
• Puzzle: http://www.everystockphoto.com/photo.php?imageId=263521
• Light bulb: https://newsline.llnl.gov/retooling/mar/03.28.08_images/lightBulb.png
Copyright 2010 SpringSource. Copying, publishing or distributing without express written permission is prohibited. 53