Syntactic Salt and SugarJames GouldAlex HolmesVerisign205
Alex       2
Jim      3
Introduction               4
Format          Discuss 5 Syntactic Elements> >          Lead discussion of each Element              Introduce newer Elem...
AGENDA> DSL> Project Lambda> AOP 2> CDI> Grab Bag                   6
AGENDA> DSL> Project Lambda        2> AOP> CDI> Grab Bag                   7
omain specific languageNoun:   a computer programming language        of limited expressiveness focused on        a pa...
Rich languages
Domain specific language
DSL examples  ELECT * FROM STATION WHERE LAT_N > 39.7;
Domain model
Grammatical Elements of a DSL                           operators +  verbs        nouns       separators  deposit       ac...
Internal DSL  An internal DSL is a DSL  represented within the syntax of  a general-purpose language.  Its a stylized use ...
Java internal DSL                    15
Java internal DSL
External DSL   An external DSL is a domain-   specific language represented in a   separate language to the main   program...
External DSL for ATM  d -> :a(0.95) :chk(12345)    What do “d”, “a” and “chk” represent?    What’s with the obfuscated syn...
Just call me Sherlock
Re-worked DSL grammar   deposit amount 0.95           into checking 12345
DSL Sugar diomatic way to communicate with domain experts an be used by non-programmers elf-documenting                   ...
DSL Salt SL syntax can quickly become salty o you really need a DSL? upporting a DSL is labor-intensive                   ...
AGENDA> DSL> Project Lambda        2> AOP> CDI> Grab Bag                   23
Project Lambda : Introduction> Included in Java 8> Defined in JSR-335  – Lambda Expressions  – Default Methods            ...
Project Lambda : Lambda Expressionspublic class Calculator {    ublic class Calculator {     static interface Calculate { ...
Project Lambda : Type Targeting> How “Calculate addition = (op1, op2) -> op1 + op2;” works?  – Type expression is inferred...
Project Lambda : Type Targeting Sample ublic class HelloWorld {     public static void main(String... args) throws Excepti...
Lambda’s and Collections raditional iteration:   ewritten for lambda’s: or (Car c : cars) {     ars.forEach(c -> c.setColo...
Project Lambda : Lambda Expression Sugar nonymous addition = (op1, op2)in aop1 + op2; Calculate Inner Classes done -> clea...
Project Lambda : Lambda Expression Salt ark Reinhold – “Some would say adding Lambda expressions is just to keep up with t...
Project Lambda : Default Methods nterface A {     void execute() default {          System.out.println("A.execute()");    ...
Project Lambda : Default Methods nterface A {     void execute() default {          System.out.println("A.execute()");    ...
Project Lambda : Default Methods nterface A {     void execute() default {          System.out.println("A.execute()");    ...
Project Lambda : Default Methods and Lambda nterface A {     void execute() default {          System.out.println("A.execu...
Project Lambda : Default Methods Sugar inally able to add code to interfaces!                                          35
Project Lambda : Default Methods Salt dding multiple inheritance to Java ixing Default Methods and Lambda Expressions adds...
AGENDA> DSL> Project Lambda        2> AOP> CDI> Grab Bag                   37
AOP 2 : Introduction          spect Oriented Programming (AOP)         nnotation Oriented Programming (AOP)               ...
AOP 2 : Aspect Oriented Programming> When should aspects be used?  – By container?      By container?  – Extraneous functi...
AOP 2 : Annotation Oriented Programming> Annotations designed in similar goals as AOP  – Special markers to classes, metho...
AOP 2 : Annotation Oriented Programming Sample@Data   RequiredArgsConstructorpublic class Sample {  private final int age;...
AOP 2 : Annotations Sugar   Communication with compiler     @Override, @Deprecated, @SuppressWarnings   Communication with...
AOP 2 : Annotations Salt  Configuration  Added Dependencies  Used for code generation                             43
2          2AOP : AOP> Annotations and aspects together is a natural fit  – Annotations provide meta-data   – Aspects to d...
AOP 2 : Java EE Interceptors  ublic class PrintInterceptor {  @AroundInvoke  public Object execute(InvocationContext ctx) ...
AOP 2 : What is This?  Procedure(name = "Account.deposit")  ublic void deposit (                     @In(Types.NUMERIC) fi...
AGENDA> DSL> Project Lambda        2> AOP> CDI> Grab Bag                   47
Changing Landscape of Dependency Injection
Huh?
JSR-330 + JSR-299 Compared
JSR-330 Annotations• @Inject• @Named• @Provider• @Qualified• @Scope• @Singleton
Basic Injection
Named Injections
Qualifiers
Pop Quiz   Question: Do both garage instances   refer to the same object?   Answer: No, the default scoping in   JSR-330 i...
Scopes
JSR-299 – Context Dependency Injection•   Uses JSR-330 as foundation•   Adds Java EE-specific extensions    • Producers   ...
JSR-299 – Additional Scopes  built-in scopes:  RequestScoped  SessionScoped  ApplicationScoped  ConversationScoped
Pop Quiz
CDI Extensions
CDI Sugar tandards for Dependency Injection nnotation-driven injection, decorators, interceptors xtensible SPI            ...
CDI Salt  hy are there 2 standards?  ack of Java SE DI support  o dynamic DI injection                              63
AGENDA> DSL> Project Lambda        2> AOP> CDI> Grab Bag                   64
Binary Literals and Underscores
Handling multiple exceptions
Multi-Catch
Resource cleaning
Try-with-resources
Strings in switch
Diamonds (are a geek’s best friend)
Java 7 Language Enhancements: Sugar or Salt?                                               72
James Gould   verisigninc.comVerisign      jgould@verisign.comAlex Holmes   verisign.comVerisign      alholmes@verisign.com
Syntactic Salt and Sugar Presentation
Upcoming SlideShare
Loading in …5
×

Syntactic Salt and Sugar Presentation

1,337 views

Published on

Presentation given at Jazoon 2012 on syntactical elements of new Java language enhancements, as well as covering DSL's, aspects and annotations.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,337
On SlideShare
0
From Embeds
0
Number of Embeds
32
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Syntactic Salt and Sugar Presentation

  1. 1. Syntactic Salt and SugarJames GouldAlex HolmesVerisign205
  2. 2. Alex 2
  3. 3. Jim 3
  4. 4. Introduction 4
  5. 5. Format Discuss 5 Syntactic Elements> > Lead discussion of each Element Introduce newer Elements – – – Identify Good Identify Bad Participation is encouraged!> 5
  6. 6. AGENDA> DSL> Project Lambda> AOP 2> CDI> Grab Bag 6
  7. 7. AGENDA> DSL> Project Lambda 2> AOP> CDI> Grab Bag 7
  8. 8. omain specific languageNoun: a computer programming language of limited expressiveness focused on a particular domain.
  9. 9. Rich languages
  10. 10. Domain specific language
  11. 11. DSL examples ELECT * FROM STATION WHERE LAT_N > 39.7;
  12. 12. Domain model
  13. 13. Grammatical Elements of a DSL operators + verbs nouns separators deposit account () {} [] . -> => = withdraw amount < > ! ~ ? : == ++ || -- *= <<< % ^ ; , %= && >= -1 >>>= // #
  14. 14. Internal DSL An internal DSL is a DSL represented within the syntax of a general-purpose language. Its a stylized use of that language for a domain-specific Excerpt from Martin Fowler’s book “Domain purpose. Specific Languages”, published by Addison- Wesley
  15. 15. Java internal DSL 15
  16. 16. Java internal DSL
  17. 17. External DSL An external DSL is a domain- specific language represented in a separate language to the main programming language its working with. This language may use a custom syntax, or it may Excerpt from Martin Fowler’s book “Domain follow the syntax of another Specific Languages”, published by Addison- Wesley representation such as XML.
  18. 18. External DSL for ATM d -> :a(0.95) :chk(12345) What do “d”, “a” and “chk” represent? What’s with the obfuscated syntax? Where is the language documented? YALTL – Yet another language to learn
  19. 19. Just call me Sherlock
  20. 20. Re-worked DSL grammar deposit amount 0.95 into checking 12345
  21. 21. DSL Sugar diomatic way to communicate with domain experts an be used by non-programmers elf-documenting 21
  22. 22. DSL Salt SL syntax can quickly become salty o you really need a DSL? upporting a DSL is labor-intensive 22
  23. 23. AGENDA> DSL> Project Lambda 2> AOP> CDI> Grab Bag 23
  24. 24. Project Lambda : Introduction> Included in Java 8> Defined in JSR-335 – Lambda Expressions – Default Methods 24
  25. 25. Project Lambda : Lambda Expressionspublic class Calculator { ublic class Calculator { static interface Calculate { int calc(int op1, int op2); static interface Calculate { } int calc(int op1, int op2); public static void main(String... args) { } Calculate addition = (op1, op2) -> op1 + op2; public static void main(String... args) { System.out.println("Addition = " + addition.calc(10, 20)); Calculate addition = new Calculate() { Calculate multiply = (op1, op2) -> op1 * op2; public int calc(int op1, int op2) { System.out.println("Multiply = " + multiply.calc(10, 20)); return op1 + op2;}}; }} System.out.println("Addition = " + addition.calc(10, 20)); 25
  26. 26. Project Lambda : Type Targeting> How “Calculate addition = (op1, op2) -> op1 + op2;” works? – Type expression is inferred by type expected in context – Calculate is a Functional Interface – Expression compatible to Function Interface  Interface is Functional Interface  Expression has same number of parameters  Expression return is compatible  Expression exception thrown is allowed by Interface> Lambda’s are strongly typed 26
  27. 27. Project Lambda : Type Targeting Sample ublic class HelloWorld { public static void main(String... args) throws Exception { Callable<Void> helloCall = () -> {System.out.println("Hello World!"); return null;}; Runnable helloRun = () -> {System.out.println("Hello World!");}; 27 helloCall.call();
  28. 28. Lambda’s and Collections raditional iteration: ewritten for lambda’s: or (Car c : cars) { ars.forEach(c -> c.setColor(RED)); c.setColor(RED); arallelized: ars.parallel() .forEach(c -> c.setColor(RED)); 28
  29. 29. Project Lambda : Lambda Expression Sugar nonymous addition = (op1, op2)in aop1 + op2; Calculate Inner Classes done -> clean way Calculate addition = new Calculate() { public int calc(int op1, int op2) { return op1 + op2; }}; atches feature of other languages C#, C++, Ruby, Python, JavaScript, … Take advantage of multicore processors Mark Reinhold – “the real reason is multicore processors; the best way to handle them is with 29 Lambda”
  30. 30. Project Lambda : Lambda Expression Salt ark Reinhold – “Some would say adding Lambda expressions is just to keep up with the cool kids, and there’s some truth in that” ava as a Object Oriented language o you want Anonymous Inner Classes on steroids? ack of code clarity 30
  31. 31. Project Lambda : Default Methods nterface A { void execute() default { System.out.println("A.execute()"); } lass ClassA implements A { lassA classA = new ClassA(); 31
  32. 32. Project Lambda : Default Methods nterface A { void execute() default { System.out.println("A.execute()"); } nterface B extends A { void execute() default { System.out.println(“B.execute()"); 32 }
  33. 33. Project Lambda : Default Methods nterface A { void execute() default { System.out.println("A.execute()"); } nterface B { void execute() default { System.out.println(“B.execute()"); } lass ClassHuh implements A, B { 33 void execute() {
  34. 34. Project Lambda : Default Methods and Lambda nterface A { void execute() default { System.out.println("A.execute()"); } nterface B extends A { void execute() default { System.out.println(“B.execute()"); } void execute2(); 34 nterface C extends A, B {}
  35. 35. Project Lambda : Default Methods Sugar inally able to add code to interfaces! 35
  36. 36. Project Lambda : Default Methods Salt dding multiple inheritance to Java ixing Default Methods and Lambda Expressions adds more confusion 36
  37. 37. AGENDA> DSL> Project Lambda 2> AOP> CDI> Grab Bag 37
  38. 38. AOP 2 : Introduction spect Oriented Programming (AOP) nnotation Oriented Programming (AOP) 2 OP 38
  39. 39. AOP 2 : Aspect Oriented Programming> When should aspects be used? – By container? By container? – Extraneous functions? Extraneous functions? – Semantics of the language?  A = B? = B? 39
  40. 40. AOP 2 : Annotation Oriented Programming> Annotations designed in similar goals as AOP – Special markers to classes, methods, and fields – Processed by libraries and tools> Everything seems to be annotated now! 40
  41. 41. AOP 2 : Annotation Oriented Programming Sample@Data RequiredArgsConstructorpublic class Sample { private final int age; @NonNull private String name; EqualsAndHashCode} ToString ublic class Sample {Sample sample = new Sample(21, “James”); @Getter private final int age;assert ( sample.getAge() == 21);assert ( sample.getName().equals(“James”));sample.setName(“Jim”);@Setter private String name; @NonNull @GetterSystem.out.println(“sample = “ + sample);“sample = Sample(age=21, name=Jim) 41
  42. 42. AOP 2 : Annotations Sugar Communication with compiler @Override, @Deprecated, @SuppressWarnings Communication with frameworks Java Persistence API, Spring 42
  43. 43. AOP 2 : Annotations Salt Configuration Added Dependencies Used for code generation 43
  44. 44. 2 2AOP : AOP> Annotations and aspects together is a natural fit – Annotations provide meta-data – Aspects to drive cross-cutting logic based on Annotations 44
  45. 45. AOP 2 : Java EE Interceptors ublic class PrintInterceptor { @AroundInvoke public Object execute(InvocationContext ctx) throws Exception { System.out.println("Intercepting method " + ctx.getMethod().getDeclaringClass().getName() + ":" + ctx.getMethod().getName()); Object result = ctx.proceed(); 45 return result;
  46. 46. AOP 2 : What is This? Procedure(name = "Account.deposit") ublic void deposit ( @In(Types.NUMERIC) final Long accountId, @In(Types.NUMERIC) final Long locationId, @In(Types.NUMERIC) final BigDecimal amount, @In(Types.TIMESTAMP) final Date transactionDate, @Out(Types.NUMERIC) Ref<BigDecimal> balance) { 46
  47. 47. AGENDA> DSL> Project Lambda 2> AOP> CDI> Grab Bag 47
  48. 48. Changing Landscape of Dependency Injection
  49. 49. Huh?
  50. 50. JSR-330 + JSR-299 Compared
  51. 51. JSR-330 Annotations• @Inject• @Named• @Provider• @Qualified• @Scope• @Singleton
  52. 52. Basic Injection
  53. 53. Named Injections
  54. 54. Qualifiers
  55. 55. Pop Quiz Question: Do both garage instances refer to the same object? Answer: No, the default scoping in JSR-330 is “@Dependent” 55
  56. 56. Scopes
  57. 57. JSR-299 – Context Dependency Injection• Uses JSR-330 as foundation• Adds Java EE-specific extensions • Producers • Decorators • Interceptor enhancements
  58. 58. JSR-299 – Additional Scopes built-in scopes: RequestScoped SessionScoped ApplicationScoped ConversationScoped
  59. 59. Pop Quiz
  60. 60. CDI Extensions
  61. 61. CDI Sugar tandards for Dependency Injection nnotation-driven injection, decorators, interceptors xtensible SPI 62
  62. 62. CDI Salt hy are there 2 standards? ack of Java SE DI support o dynamic DI injection 63
  63. 63. AGENDA> DSL> Project Lambda 2> AOP> CDI> Grab Bag 64
  64. 64. Binary Literals and Underscores
  65. 65. Handling multiple exceptions
  66. 66. Multi-Catch
  67. 67. Resource cleaning
  68. 68. Try-with-resources
  69. 69. Strings in switch
  70. 70. Diamonds (are a geek’s best friend)
  71. 71. Java 7 Language Enhancements: Sugar or Salt? 72
  72. 72. James Gould verisigninc.comVerisign jgould@verisign.comAlex Holmes verisign.comVerisign alholmes@verisign.com

×