I've never run into anyone that is holding off on Fantom because it lacks 
'true' generics.

Scala's problem is that it tries to change too much, but Fantom's problem is 
that it doesn't change enough; no matter what people tell you, its fairly 
obvious (to me anyway, YMMV) that changing something as fundamental as the 
programming language, especially if that language prefers use of alternative 
(fantom / scala versions of) crucial java runtime classes such as ArrayList, 
is a gigantic step that will never be taken lightly. So, you need a lot of 
convincers, but at the same time, the _vast_ majority of programmers do not 
want to learn more than 1 language so have to feel like another language can 
make a new home for them based on some simplistic snippets and without 
knowing much about said language. So, the language has to be both filled 
with convincing arguments that it feels like real, meaningful progress, 
whilst at the same time looking like it'll be such a minor change that 
they'll know for sure they'll adapt easily to this new language.

Screwed if you do, screwed if you don't.

I've said it before, but if any contender to java's throne is to show up, it 
needs to come up with "leightweight" convincers, just like java did to C: 
Java took just about the entire C syntax, warts and all, and imported that 
part wholesale to lower the bar (i.e. to 'be like fantom'). It then added 
things that were worth a lot but didn't have a high impact on the language 
itself in order to convince C programmers to switch to it (i.e. to 'be like 
scala'): A garbage collector, write-once-run-anywhere, threading, 
networking, and many other fairly standard tasks all supplied by a universal 
standard library thus truly delivering on the 'platform independent' 
promise. As an encore, java simplified a number of things, including 
removing the preprocessor. Not sure if that made a real difference in the 
end, but keeping things simple (in fact, now we might argue java was a 
little _too_ simple) never hurt language uptake, unlike the reverse of 
course. Something as simple as looking at scala's collections API makes 
people run for the hills even though in practice those crazy type variables 
do work fine (.toMap(implicit) on the other hand....)

So, high impact stuff that doesn't complicate the language, that's what'll 
make java.next. What should this look like? Don't know - but I guess at 
least one of these will be involved:

 - A language that caters to DSLs not by making the syntax flexible but by 
standardizing the AST and Parser and making these pluggable, with a 
meta-notation to define which plugins are to be used for the sources itself. 
May or may not be paired by the notion that AST editing is the basic form 
(instead of 'stream of characters' like 99.99% of all programming today), 
and most likely will require adapting these plugins to be written with IDEs 
in mind.

 - A marriage between OSGi (i.e. runtime modularity), maven central (i.e. 
module repository), and gradle/ivy/maven (i.e. buildtime modularity) and 
better than all 3 combined, built into the language syntax. i.e. all you 
need to do is write "import guava.* from 
jigsaw://guava.google.com/guava/r8;" at the top of the file and the IDE will 
use one of the basic commands of the language's toolkit (just as basic as 
'java' and 'jar') to resolve and download this dependency, and link it all 
up, sources included, in your IDE.

 - Be quite close at least at-a-glance to java syntax, just like java syntax 
looked virtually 100% the same as C code if you didn't look too close and 
picked examples that fit well, such as algorithms.

 - Yes, most likely this language _will_ have closures, even if only because 
excluding them means all the discussion will be about a perceived negative. 
Personally I do think java 1.1's anonymous inner classes were a mistake and 
should have been closures instead. It'll most likely also have collection 
literals and do away with a few annoyances.

 - A solution for sharing objects/structs provided by one library, between 2 
libraries that each are dependent on a different version of that library. 
i.e. you want to share a guava ImmutableList between 2 libraries, but 
library one is at r7, the other is at r8. May involve some sort of nifty 
'view' concept where an API can also export a bunch of wrapper methods that 
make it look like different API, while being represented 'under the hood' by 
the same batch of fields/struct so it can be transferred. Could be used to 
fix collections API while remaining compatible with that same API well 
enough to be able to pass (java.next) lists around to methods that want 
java.util.Lists without hassle.

 - Possibly will ship WITHOUT most of what we now consider a standard 
library, instead embracing the modularity concept fully and shipping instead 
with the knowledge that there's boatloads of libraries out there for you to 
import.... though I wonder if this will hit the right notes of trivially 
understood simplicity and power that are needed to become a new great 
language. I'm sure this part IS typically simple+powerful to fit, but it 
might not be obvious enough. Same goes for features to sanely upgrade 
libraries. If anything annoys me personally about the search for a new 
language is that the vast majority of them are blaming java for things that 
will happen to them in 10 years time too: Libraries that looked good then 
don't look so great now but changing it won't work because you really can 
NOT break backwards compatibility when you're that established. I can point 
at many scala libraries that seem like fine candidates to look downright 
"what the heck were they thinking". Not now, but in 10 years time. Just like 
java.util.Date, and the implicit mutability of java.util's collections, etc. 
Again a point which definitely leads to a simple+powerful language but might 
not be obvious enough. Would at least require some serious campaigning to 
make this point stick in the minds of the masses. (Probably with placations 
of "The only language ready for the future!" or some such).

 - I _really_ doubt this is in practice simple+powerful, but it might look 
like it: parallelism and other fine-grained concurrency control built 
straight in the language. Some mix of parallel-by-default loops and Software 
Transactional Memory perhaps. It'll certainly look like a lightweight 
convincer even if it isn't, and looks is worth a lot.

 - Ships out of the box with full IDE support. The vast majority of rank and 
file java programmers use Eclipse, IDEA, Oracle's builderwhatsit thing, or 
netbeans (in that order). Shows people you understand how they work.


Looking at that list, Gosu is a lot closer than fantom or scala... though 
probably not good enough either.

-- 
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com.
To unsubscribe from this group, send email to 
javaposse+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to