Hi Eugen,

On Tue, 2020-06-09 at 00:52 +0300, Eugen Stan wrote:
> I'm also against adding more complexity in James.

I guess we all are.

> My arguments against adding scala to James are:
> 
> - It adds another language that is more complex that Java - operator
> overloading, much more dense language (easier to write, harder to
> read).

My experience with Scala is the opposite: you can write code that
express the problem you are solving instead of a lot of boiler plate
that divert the reader from the intent.

I'm not saying Scala is perfect but I would not say it's more complex
than Java (no checked exception, support for immutable datastructure,
easy separation of infrastructure and data, no primitive mess, easy
data type definition, etc).

> - Extra build and runtime dependencies. Scala is another compiler
> step
> and if I remember quite slow (might have changed). 

It's definitely slower than Java.

> It also requires adds
> the library to the applications. 

That's also true

> More bytes to push, more surface area
> to atack. Ideally we should have NO outside dependencies in James
> core.
> Hard but doable - Lucene does it.

Depending on what is the 'core', I may agree. However scala stdlib is
like the jdk: do you see the jdk as a too-big dependency? We have to
balance number of dependencies with not re-implementing everything
(with more bugs) from scratch.

> 
> 
> I do believe we should make James easy to consume from other
> languages
> but I don't believe we should add more things to James. We should
> strip
> them off, starting with dependencies.

Depending on what you define as being James, the goal is opposite as
what is done currently. James intent is to store things in RDBMS or
distributed datastores, we can't do that without dependencies.

>From what I understand you would at least want a central part of James
to keep dependencies to the minimum. The ADR we wrote is about writing
components and extensions in Scala. So I don't think it opposes this
vision as component are swap-able, having one in Scala should not be a
problem. What do you think?

> 
> Right now I'm trying to "mvn compile" master and I can't.  mvn clean
> package also fails after running for 30-45 minutes on a Ryzen 7.  I
> feel
> that does not work.

Ok, there are two problems here:
1. we have a lot of tests and they are run by default
2. the build process is not as reliable as it should

> The project has 408244 lines of Java  and takes longer to compile
> than
> the linux kernel [1]. I believe we are doing something wrong here.

I can build James in less than 3 minutes and my computer is slower than
yours. Most of the time is spent in Maven and not in actual code
compilation.

Here you compare the time our testsuite takes to run to compile C code
to a binary: it's not a fair comparison.

> As a developer I should be able to work on James and build it
> locally,
> otherwise things are not going to move forward.

Agree.

> Every new tool and external dependency adds complexity.

Not exactly: when using a tool that prevent us from writing a lot of
code, it actually removes complexity. All technologies are not
equivalent: some are better in some cases and help keeping code simple,
etc.

I would give a single example here: do you think splitting strings for
doing protocol parsing is less complex than using a typesafe PEG parser
library? In the later case: we can stick to ABNF grammar and everything
is obvious at the cost of learning the tool. In the former case: it
looks like raw Java so people feel at home but the grammar is lost and
it's probably very buggy.

> I believe we should avoid adding more languages to James.
> 
> I personally prefer Clojure but I will not add Clojure to James core
> for
> the same reason. I will build apps on top of James with Clojure for
> sure.
> 

As somebody who write code for this project, I'm probably more willing
to use modern tool. It's very usual: users want things to be stable
because they don't want to work for keeping their service online.
Developers want things that make their work easier or funnier.

It's one reason I asked to the community and I'm glad you answered. 

I didn't changed my mind (yet) but at least I evaluated my opinion
against others and it's always valuable. Thank you for the time you
took to write that answer.

Cheers,

-- Matthieu Baechler


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to