#416 select, reject, detect, collect and inject
the relation between Clipper and FoxPro, Smalltalk blocks with Square brackets and a vertical pipe separating the parameters, the knights of the square bracket, the pipe replaced by the arrow in Java, block context template as the single type for every SmallTalk block, anonymous inner classes used as block substitutes before Java 8, the Smalltalk hierarchy with object as a subclass of nil, nil as an instance of the undefined object class that still responds to messages, a blog post about null as an object in Java, metaclasses and the endless class of the class chain, nominal types and functional interfaces versus one type for all blocks, single abstract method (SAM) and the disappearance of the term, the combinatorial explosion of function types over primitives and generics, naming generic type parameters T and V, single character type variables and collisions with variable names, var and local variable type inference in everyday Java, var for expected values in unit tests, postfix completion in IntelliJ IDEA with dot var and dot out, changing a running Smalltalk image and porting IntelliJ IDEA key bindings back to VisualAge for Smalltalk, control Y to delete a line in WordStar and in IntelliJ IDEA, JetBrains MPS and custom DSLs, Clipper code blocks with curly braces and double square brackets around the parameters, blocks for sorting and for T-Browse columns in Clipper, Clipper visual objects compiling to native Windows executables, the Classy library for classes without inheritance in Clipper, the Smalltalk collection protocol select, collect, reject, detect and inject into, filter as an ambiguous method name compared to select and reject, transforming behaviours map, flat map and collect, String.transform in Java, the missing reject in the Java Streams API, Alice's Restaurant by Arlo Guthrie as the claimed origin of the Smalltalk method names, Smalltalk popularity in Europe and Argentina, Newspeak, OS/2 Warp and REXX, duck typing and does not understand errors in Smalltalk, Ruby as a Smalltalk dialect with select, reject and inject, asciidoctorj running on JRuby, blocks versus closures and captured state, effectively final captured variables in Java lambda expressions, Groovy closures and Grails before Java 8, the joint Groovy and Java compiler, Apache Groovy and the Gradle DSL, blog exchanges with Groovy committer Paul King, the Scala and Kotlin adoption waves, Java 25 shipping enough out of the box, the origins of Eclipse Collections in 2004 as Caramel (collection array map enumeration library) at Goldman Sachs, open sourcing as GS Collections to share use cases with the JSR 335 expert group, the ten year quest to get lambdas into Java, the BGGA prototype, lambdas in the JSR 341 expression language before Java 8, memory consumption and code duplication rather than performance as the motivation for Eclipse Collections, procedure instead of consumer and extending consumer for JDK interoperability, select with and predicate two to keep lambdas stateless and static, method references preferred over multi line lambdas, refactoring anonymous inner classes to lambdas for 10 to 20 percent less code, the commercial JGL collections framework, early access testing in the OpenJDK quality outreach program, a new Collectors.toList instance created on every call, Brian Goetz and the constraints of the Java language architect, composing records, patterns and switch expressions into data oriented programming, the book Eclipse Collections Categorically and its method categories, custom folding regions in IntelliJ IDEA to simulate method categories
Donald Raab on twitter: @TheDonRaab