If a language solved a problem 5 years ago, it'll solve the same problem today. It won't die unless something else is found that solves the problem in a better way.
If a language solved a problem 5 years ago, it'll solve the same problem today. It won't die unless something else is found that solves the problem in a better way.
Should we make CPU makers update their machine code as well every year or so to integrate all these programming discoveries?
role Eq {
requires 'equal_to';
method not_equal_to($a: $b) { return !$a->equal_to($b) }
}
The technique of composing classes from parts has recently been popularized by Smalltalk, Perl 6, Perl 5 (Moose), and Scala. (Scala's implementation is intentionally limited for some reason; look to Moose for the most reliable implementation that people actually use for Real Work.)If you want to do this in Java, you would have to create a class like:
class NotEq {
private Eq a;
method not_equal_to(b) { !a.equals(b) }
}
class Foo implements Eq {
private NotEq neq;
Foo() { neq = new NotEq(this) }
method equal_to(b) { ... }
method not_equal_to(b) {
neq.not_equal_to(b)
}
}
This is a lot of code to write, which is why people just cut-n-paste instead.Also, Java is not merely 5 years behind, so it is worthwhile to look back farther to find ideas that Java could embrace. Java would do well to steal a sane object system like CLOS or Moose; it could really eliminate a lot of boilerplate. (One thing I think is annoying about Java is how much work the constructor has to do. In Lisp and Perl, I never write my own constructors, the object system does it for me. This means that things can be composed without the programmer having to know every detail, including which position each attribute initializer should be in.)
Anyway, if you really think Java is the state of the art, you should look around a bit more. Yes, it's silly that people want to do their own type checking in "dynamic languages", but that's not why they use them -- it's all the other features that they want. The lack of static type checking is an unfortunate overreaction to C and C++.
Remember that Java is the language that introduced garbage collection to the world. Before Java, it was basically an untested academic thing that Lisp machines did. Why be liberal with such a radical new idea and conservative with things that let you implement programs the same way you do now but with less typing? It makes very little sense.
Typing a few less characters on boiler plate doesn't buy you anything, unless you're a slow/lazy programmer.
Typing "public static class" is boring, yes. But it's irrelevant. It can't contain bugs, so getting rid of that doesn't buy you anything at all.
Less typing != less bugs (When the code is compiled, statically typed, etc).
There is absolutely no reason to duplicate code in Java, and if you're copy/paste coding, it's not the languages fault, it's yours.
Must be nice to have an infinitely large short term memory.
Sometimes I wonder why I bother arguing with axod. Wait, I always wonder that...
I wonder why I try to bring sanity to these sorts of discussions also :/
But amazingly, sometimes code more complicated than that needs to be reused
I wonder why I try to bring sanity to these sorts of discussions also :/
When did you do that? You seem to bring a lot of emotion, very few technical arguments, and a lot of words like "fashion".
You can use "? extends SomeInterface" only if you write SomeInterface wrappers for every type which you want to use "generically." This is boilerplate relative to most other languages.
// T here is a type that must support these two operations:
// bool froznit();
// void frobnob(Foo* foo);
template <class T> class Frozner { ... }
And public interface SomeStupidName {
public bool froznit();
public void frobnob(Foo foo);
}
public class Frozner<? extends SomeStupidName> { ... }
To be just as much work to type.What they were shooting for seems to have been something that combines the syntax of C and some of C++ for easy access to a large pool of existing programmers but without those 'scary pointers', and the memory leak issues associated with bad programming habits in C and C++.
Thanks for proving my point. My point is, It doesn't have to be "State of the art" (fashionable). It has to work.
I do use C. For classes of problems that are appropriate - kernel/low level stuff.
For several things though, the lack of gc'd memory management, buffer overflows etc is a good reason not to use C.
It sounds like you truly identify yourself as a "<language> programmer" rather than a "programmer" :/
Ask me which of Common Lisp, Haskell, and Perl I prefer, then call me a "<language> programmer". Remember, in the other threads, I am advocating combinations of features that do not currently exist in any programming language. I may be a "<language> programmer", I guess, but that <language> does not actually exist. Meta...
(You are the one who thinks that every feature that Java has is essential for programming, and every feature it's missing is <some cynical weasel-words here>. That is indicative of seeing the world through Java-colored glasses.)
I've also never said that Java is better than <insert other language here> without qualifying what it is better for.
He has taken the unfortunate, but popular, definition of a dead programming language: one which has stopped evolving. Of course, such a language is no more dead than sharks.
In my point of view Java is just the tool to create new domain specific languages that solve these new problems.
But, general languages that just make just a bit shorter or less verbose (as everyone who likes to dismiss Java uses quite often), to create a class won't do it for me to change language/platform.
Or, if you want something lightweight where you effectively have a DSL without creating an actual language, look towards static imports + fluent interfaces + builder pattern:
http://blog.centuryminds.com/2007/10/java-static-imports-flu...
You make some libraries, functions that do shit. Then call them. That way other people can still read the code, and help.
It's like GOSUB but better!