Joerg Heinicke pisze: > > I don't have the time to actually look into your implementation. I'm > just wondering if all the insight views couldn't be used to improve the > Java implementation rather than starting something in a different language.
It could. What I'm doing at the moment is sort of wild experimentation that I don't know where will lead me to. I'm reimplementing sitemap in Scala because I thought that sitemap processing is something complicated enough to get a real feel of programming in Scala. It's true that anything I write in Scala could be emulated in Java but when I think about it I feel rather overwhelmed by the possible verbosity of Java counterparts to Scala constructs. In my implementation I exploit heavily strong typing by defining lots of types and using lots of generics. I use closures and pattern matching quite a lot. Compare (Scala): private def filterUnprefixedSimpleAttributes(attributes : MetaData) : Map[String, String] = Map() ++ attributes.flatMap(attr => attr match { case ua : UnprefixedAttribute => List(ua.key -> ua.value.first.toString) case _ => Nil }) to translation of it (Java): private Map<String, String> filterUnprefixedSimpleAttributes(MetaData attributes) = { return (new Map<String, String>()).putAll(attributes.flatMap( new Function1<MetaData, List<Tuple2<String, String>>() { List<Tuple2<String, String>> apply(MetaData x) { if (x istanceof UnprefixedAttribute) { UnprefixedAttribute ua = (UnprefixedAttribute) x; return new List<Tuple2<String, String>>().add( new Tuple2<String, String>(ua.key(), ua.value().first().toString())); } else { return new List<Tuple2<String, String>>(); } }) } And no, I didn't take the most complicated example from my code because I don't it find funny to write such a spaghetti code. So certainly I could write the same in Java but I honestly believe that in Java operating on strongly typed, immutable collections is NOT fun and that's the reason nobody seems to do. And if you skim through my code you'll find that it's more or less only about mapping, reducing and filtering strongly typed collections. Still example above does not prove anything general (like "Java sucks, let's do it in Scala") but my reimplementation of sitemap processing should provide a nice background for a discussion what we want to see in C3. For example, I'm interested in answering questions like if we are going to introduce any other language apart from Java in C3. Traditionally Cocoon had other languages integrated for years (Javascript comes to mind) so it's rather natural to ask this question. If answer was positive (based on some evaluation) another question that pops up is why it can't be Scala? WARNING: Here follows some thoughts on personal experience with Scala that you my safely ignore as they are rather off-topic. Might be that I'm extrapolating but my sitemap reimplementation in Scala did work just after I finished all necessary bits. I mean: I have written all the processing, integrated it into servlet so it could work with the rest of C3 and it did work just immediately. I didn't have any test-cases and I didn't run my code while writing it. After extensive testing with all samples C3 provides I found exactly one bug[1] in that code. Of course, this does not mean I don't have any other bugs but the probability that I have many of them is really small. Does Scala make me magically not making any mistakes? Certainly not. It only informs me about them at the time of writing code by reporting compilation errors. This experience convinced me to have following standpoint: If we are going to introduce any secondary language in Cocoon, I would really prefer if it was strongly typed one. Oh, and if you wonder how on the hell I could be typing non-trivial stuff for more than one day without introducing almost any bugs. It might be because my code cotains 5 if statements, no return, break or continue statements and only a few raw loops (like "while", "for" or "repeat"). I believe that's the reason... And yes, I have to admit that sitemap processing is somehow special case where the power of concepts I've used simply shines. [1] http://github.com/gkossakowski/apache-cocoon3/commit/845f7b61861827a17fb017625eb7f2281ac458df -- Best regards, Grzegorz Kossakowski