On Wed, Mar 27, 2013 at 2:12 AM, Caleb James DeLisle <[email protected]> wrote: > This is the premise, you are going to write a new XWiki. > You are not bound by any backward compatibility requirements. > Use any technology or combination of technologies. > PHP? C++? Golang? Node.js? Java? Your call! > > Describe it in as much detail as possible. > What frameworks will you use? What ORM? what databases? > > Why will it perform well? > How will you get new features into the hands of users quickly? > How will you avoid this: > http://steve-yegge.blogspot.ca/2007/12/codes-worst-enemy.html > and this: http://www.laputan.org/mud/ > > Think big and go wild! > I would try to do mostly the following: rewrite the core using a functional approach, trying to stay away as much as possible from mutable state and side effects functions (correctly isolating and limiting those parts that needs for some reason to introduce side-effects) - This would almost completely rule out concurrency issues, though introducing some little performance penalties.
In order to do so you would need to use a language that is functional and supports persistent data structure (otherwise you're doomed to endless memory copying). Since I would stick to the JVM this means that, AFAIK, you basically have two choices: 1) Scala 2) Clojure I would choose Clojure which is several orders of magnitude simpler than Scala and also doesn't suffer of the runtime upgrade problems that Scala has. I think that Clojure community is very vibrant, responsive, friendly and there is a strong professional support because eminent people of the community founded a company that's basing all its business on Clojure. So basically I would (try to) rewrite the core using Clojure and see how it goes, at least to put into practice what is being preached recently by a lot of people. I think there's a lot of truth there indeed, but I would also like to check :) This, in some ways, also contadicts my idea that for developing maintainable software we should use type checked languages :) However Clojure has a library for performing some type checking so maybe there's not too much contradiction here. Unfortunately Scala, which has a great type-checker, seems to be too messy to be used. Ideally, it could be very interesting to put this in practice by providing an implementation for the new model backed by Clojure :) For the client interactions'll use very simple and composable REST frameworks. Clojure has plenty of these, but even if we stick to java, a JAX-RS would do just fine. I have not a strong opinion on this but maybe it could be interesting to explore the idea of using a language with a more sane semantics for writing frontend Javascript. Something like Dart or a language that is able to compile to Javascript. Clojure has clojurescript, Haskell has Fay, etc. -Fabio > Thanks, > Caleb > > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

