the ideal module system and the harsh reality
TRANSCRIPT
![Page 1: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/1.jpg)
@adamwarski#DV13 #modules
The ideal module system ...
… and the harsh reality
Adam WarskiSoftwareMill
Wednesday 13 November 13
![Page 2: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/2.jpg)
@adamwarski#DV13 #modules
New languagesAre we focusing on the wrong problem?
Wednesday 13 November 13
![Page 3: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/3.jpg)
@adamwarski#DV13 #modules
About me
• During the day: coding @ SoftwareMill
• SoftwareMill: a great software house!
• Afternoon: playgrounds, Duplo, etc.
• Evening: blogging, open-source
• Original author of Hibernate Envers
• ElasticMQ, Veripacks, MacWire
• http://www.warski.org
Wednesday 13 November 13
![Page 4: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/4.jpg)
@adamwarski#DV13 #modules
Plan for the next 50 minutes
• Ideal module system
• Veripacks
• Ceylon
Wednesday 13 November 13
![Page 5: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/5.jpg)
@adamwarski#DV13 #modules
What is a module?• OSGi bundle?
• Jigsaw-something?
• Maven build module?
• Guice module?
• Ruby module?
Wednesday 13 November 13
![Page 6: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/6.jpg)
@adamwarski#DV13 #modules
What is a module?
Source: http://www.merriam-webster.com/dictionary/module
Wednesday 13 November 13
![Page 7: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/7.jpg)
@adamwarski#DV13 #modules
The Modularity Continuum
Wednesday 13 November 13
![Page 8: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/8.jpg)
@adamwarski#DV13 #modules
The Modularity Continuum
Classes
Single responsibility principle
Wednesday 13 November 13
![Page 9: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/9.jpg)
@adamwarski#DV13 #modules
The Modularity Continuum
Classes Packages
Wednesday 13 November 13
![Page 10: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/10.jpg)
@adamwarski#DV13 #modules
The Modularity Continuum
Classes Packages
Build modules
Wednesday 13 November 13
![Page 11: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/11.jpg)
@adamwarski#DV13 #modules
The Modularity Continuum
Classes Packages
Build modules Projects
Wednesday 13 November 13
![Page 12: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/12.jpg)
@adamwarski#DV13 #modules
The Modularity Continuum
Classes Packages
Build modules Projects
Systems
Wednesday 13 November 13
![Page 13: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/13.jpg)
@adamwarski#DV13 #modules
Ideal module system
Wednesday 13 November 13
![Page 14: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/14.jpg)
@adamwarski#DV13 #modules
Group code
• Comprehensible chunks of code
• Specific (single) responsibility
• Isolation
• Namespacing
Wednesday 13 November 13
![Page 15: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/15.jpg)
@adamwarski#DV13 #modules
Reusable
• Across one system
• Across multiple systems
• Industry standards
Wednesday 13 November 13
![Page 16: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/16.jpg)
@adamwarski#DV13 #modules
Abstraction
• Hide implementation details
• Decide what is accessible to who
• Not only what, but also how (wiring)
Wassily Kandinsky, Accent on Rose, 1926
Wednesday 13 November 13
![Page 17: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/17.jpg)
@adamwarski#DV13 #modules
Interfaces
• Multiple implementations
• A way to define the interface & data structures
Wednesday 13 November 13
![Page 18: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/18.jpg)
@adamwarski#DV13 #modules
Composability
• Create big modules from smaller ones
• Hierarchical
• Scalable
Wednesday 13 November 13
![Page 19: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/19.jpg)
@adamwarski#DV13 #modules
Replaceable
• Swap implementations
• Run time/load time/build time
Wednesday 13 November 13
![Page 20: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/20.jpg)
@adamwarski#DV13 #modules
Meta
• Dependencies
• Versioning
• Specify & verify
Wednesday 13 November 13
![Page 21: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/21.jpg)
@adamwarski#DV13 #modules
Requirements
• Group code
• Reusable
• Abstraction
• Interfaces
• Composability
• Replaceable
• Meta
Wednesday 13 November 13
![Page 22: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/22.jpg)
@adamwarski#DV13 #modules
Requirements
• So ... what now?
• Let’s create a new revolutionary language™!
Wednesday 13 November 13
![Page 23: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/23.jpg)
@adamwarski#DV13 #modules
Packages & Veripacks
Wednesday 13 November 13
![Page 24: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/24.jpg)
@adamwarski#DV13 #modules
Packages
Classes Packages
Build modules Projects
Systems
Wednesday 13 November 13
![Page 25: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/25.jpg)
@adamwarski#DV13 #modules
Packages
• Namespacing
• Simple string identifiers
• Parent-child relations?
•com.company.myapp.finance
•com.company.myapp.finance.invoicing
Wednesday 13 November 13
![Page 26: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/26.jpg)
@adamwarski#DV13 #modules
All classes are equal?
• “By default” classes are public
• Which class is the main one?
• What’s the responsibility of the package?
Wednesday 13 November 13
![Page 27: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/27.jpg)
@adamwarski#DV13 #modules
One public class per package
• Make only one class public
• Other: package-protected
• Clearly visible:
• what is the responsibility of the package
• what’s the main entry point
Wednesday 13 November 13
![Page 28: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/28.jpg)
@adamwarski#DV13 #modules
Growing the concept
• Support from JVM/Java ends here
• What if the functionality is big?
• extract a sub-package
• now the classes in the sub-package must be public
Wednesday 13 November 13
![Page 29: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/29.jpg)
@adamwarski#DV13 #modules
Enter Veripacks
• Specify which classes are exported from a package hierarchy• Respect package parent-child relationships
• Allow exporting classes & child packages
• Using annotations
• Verify Package Specifications
Wednesday 13 November 13
![Page 30: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/30.jpg)
@adamwarski#DV13 #modules
package foo.bar.p1 { @Export class A { ... }
class B { ... }}
package foo.bar.p1.sub_p1 { class C { ... }}
Enter Veripacks
package foo.bar.p2 { class Test { // ok new A()
// illegal new B()
// illegal new C() }}
Wednesday 13 November 13
![Page 31: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/31.jpg)
@adamwarski#DV13 #modules
Veripacks: exporting
• By default: export all
• Export a class
• Export a child package
• ... or any mix
• Transitive!
Wednesday 13 November 13
![Page 32: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/32.jpg)
@adamwarski#DV13 #modules
public void testPackageSpecifications() { VeripacksBuilder .build()
.verify(“foo.bar”) // root package to check
.throwIfNotOk()}
Running Veripacks
Wednesday 13 November 13
![Page 33: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/33.jpg)
@adamwarski#DV13 #modules
Veripacks: importing
• Also transitive
• to sub-packages
• Specify that a package needs to be imported
• @Import• @RequiresImport
• Importing 3rd party libraries
Wednesday 13 November 13
![Page 34: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/34.jpg)
@adamwarski#DV13 #modules
// src/main/scala/org/veripacks/reader/package-‐info.java
@Import("org.objectweb")package org.veripacks.reader;
import org.veripacks.Import;
3rd party library import example
VeripacksBuilder .requireImportOf("org.objectweb") .build .verify("org.veripacks") .throwIfNotOk()
Wednesday 13 November 13
![Page 35: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/35.jpg)
@adamwarski#DV13 #modules
Replacing build modules?
• Why do we create build modules?
• isolate parts of code
• api/impl split
• adding a 3rd party lib to a part of code
• group code with similar functionality
• statically check inter-module dependencies
Wednesday 13 November 13
![Page 36: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/36.jpg)
@adamwarski#DV13 #modules
Build modules are heavy
• Maven: elaborate xml
• Separate directory structure
• Hard to extract a common part
• Additional thing to name
Wednesday 13 November 13
![Page 37: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/37.jpg)
@adamwarski#DV13 #modulesWednesday 13 November 13
![Page 38: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/38.jpg)
@adamwarski#DV13 #modules
Other benefits
• No need to think when functionality is “big enough” to create a module
• Test code sharing
• Refactoring, easy to:
• introduce a module
• remove a module
• rename a module
Wednesday 13 November 13
![Page 39: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/39.jpg)
@adamwarski#DV13 #modules
Packages+Veripacks as modules?
• Group code
• Partially reusable
• Abstraction: yes (@Export)
• Interfaces: no
• Composability: partial (transitivity)
• Replaceable: no
• Meta: dependencies yes (@Import), versioning no
Wednesday 13 November 13
![Page 40: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/40.jpg)
@adamwarski#DV13 #modules
Ceylon
Wednesday 13 November 13
![Page 41: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/41.jpg)
@adamwarski#DV13 #modules
What is Ceylon?
• “A language for writing large programs in teams”
• Cross-platform (Java/JS)
• Statically typed (union, intersection types, ...)
• OO/FP mix
• Typesafe metaprogramming
• 1.0 with an IDE available: http://ceylon-lang.org/
• ... and modularity
Wednesday 13 November 13
![Page 42: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/42.jpg)
@adamwarski#DV13 #modules
Ceylon modules
• Moving a level higher
• A bit similar to OSGi, Jigsaw
• But part of the language
Classes Packages
Build modules Projects
Systems
Wednesday 13 November 13
![Page 43: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/43.jpg)
@adamwarski#DV13 #modules
Sharing
• In Ceylon things can be shared, or not
• Things:
• program elements (classes, class members)
• packages
Wednesday 13 November 13
![Page 44: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/44.jpg)
@adamwarski#DV13 #modules
Modularity concepts in Ceylon• 3 basic concepts:
• modules
• packages
• classes
• Classes mostly similar as in Java
• (from the modularity perspective)
Wednesday 13 November 13
![Page 45: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/45.jpg)
@adamwarski#DV13 #modules
Packages in Ceylon
• Separate file with meta-data
• Annotations
• sharing
• comments
Wednesday 13 November 13
![Page 46: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/46.jpg)
@adamwarski#DV13 #modules
Modules in Ceylon
• Bundles a set of packages into a .car archive
• Package names: prefix of the module name
• Import other modules
Wednesday 13 November 13
![Page 47: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/47.jpg)
@adamwarski#DV13 #modules
There’s more!
• Runnable modules
• Local/remote repositories used:
‣ during the build
‣ when running
Wednesday 13 November 13
![Page 48: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/48.jpg)
@adamwarski#DV13 #modules
There’s more!
• Run-time component
• isolated class-loaders
• based on JBoss Modules
Wednesday 13 November 13
![Page 49: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/49.jpg)
@adamwarski#DV13 #modules
Modules in Ceylon
• Group code
• Reusable: yes
• Abstraction: yes (shared)
• Interfaces: no
• Composability: partial
• Replaceable: partial
• Meta: yes (both for packages and modules)
• Run-time
Wednesday 13 November 13
![Page 50: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/50.jpg)
@adamwarski#DV13 #modules
Summing up
• Modules come in different flavors & sizes
• How many explicit module types do we want?
• scalability• small, but specialized?
• from very big to very small, general?
• Which requirements should which types meet?
• Challenge for the Next Big Language?
Wednesday 13 November 13
![Page 51: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/51.jpg)
@adamwarski#DV13 #modules
Links
• http://github.com/adamw/veripacks
• http://ceylon-lang.org
• http://warski.org
Wednesday 13 November 13
![Page 52: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/52.jpg)
@adamwarski#DV13 #modules
Thank you; Come & get a sticker
http://codebrag.com/devoxx/Wednesday 13 November 13
![Page 53: The ideal module system and the harsh reality](https://reader033.vdocuments.us/reader033/viewer/2022052618/554ec8a0b4c905064d8b4d34/html5/thumbnails/53.jpg)
@adamwarski#DV13 #modules
Party!
Wednesday 13 November 13