Mercurial Hosting > reactionary
view src/java.html.luan @ 54:50db01566278
learn mercurial
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 14 Jan 2024 20:46:18 -0700 |
parents | c385a4f75b10 |
children | 7c496678f32a |
line wrap: on
line source
local Luan = require "luan:Luan.luan" local error = Luan.error local Io = require "luan:Io.luan" local Http = require "luan:http/Http.luan" local Shared = require "site:/lib/Shared.luan" local head = Shared.head or error() local existing_header = Shared.existing_header or error() return function() Io.stdout = Http.response.text_writer() %> <!doctype html> <html> <head> <% head() %> <title>Reactionary Software - Java 8</title> <style> li { margin-top: 8px; } </style> </head> <body> <% existing_header() %> <div content> <h1>Java 8</h1> <p>Java started in 1995 as a clean simple object-oriented language with garbage collection. It was good reactionary software, designed before modern programming ruined software. Java was a big improvement over C++ and I started using Java from the beginning.</p> <p>Java went through many releases. The last useful addition was in 2006 after which it only declined. The last usable release was Java 8 in 2014. After this, Java was totally ruined by modern programmers and became completely unusable. So I suggest using <a href="https://www.oracle.com/java/technologies/downloads/#java8">Java 8</a>.</p> <p>Here is the history of Java copied from <a href="https://old.reddit.com/r/GoodSoftware/comments/d40pz7/java/">here</a>:</p> <ul history> <li>Java 1.0 was release in 1995.</li> <li>Java 1.1 (1997) added reflection which was good. It also added inner classes which had problems as I discussed <a href="http://www.mikraite.org/Jave-inner-classes-tp3503.html">here</a>.</li> <li>Java 1.2 (1998) didn't change the language.</li> <li>Java 1.4 (2002) added "assert" which is harmless though I don't use it.</li> <li> Java 1.5 (2004) added many features. <ul> <li>Added generics which is horrible mess. Some solution to generics was needed, but this overcomplicated disaster wasn't the right solution. To be honest, I haven't thought through how this should be done. But even C++'s approach is better than Java generics. My suggestion is to only use generics when it is painless. As soon as some complication arises, just dump generics instead of struggling to figure things out.</li> <li>Added annotations. This is harmless and can be ignored. I have played with it but never found a real need for it.</li> <li>Added autoboxing. I don't like this in theory, but in practice it seems harmless. I use it.</li> <li>Added enumerations. This isn't too bad but I hardly use it.</li> <li>Added varargs. This is a good feature.</li> <li>Added the for-each loop. This is a good feature.</li> <li>Added static imports. This is purely a bad feature. It does nothing but reduce readability and it should never be used.</li> </ul> </li> <li>Java 1.6 (2006) added the compiler API. This is a good feature and I use it to compile Luan.</li> <li>Java 1.7 (2011) had no significant language changes.</li> <li>Java 1.8 (2014) added lambda expressions which is a complete horror. I have never used them. They are basically depraved pseudo-closures implemented like broken anonymous inner classes. Besides suffering from all the flaws of inner classes, they are syntactically horrible and unreadable. And they don't conceptually fit in Java at all.</li> </ul> <p>I had read about later versions of Java and I knew that it was just getting worse. For example, local-variable type inference is a horrible idea. But when I finally tried to use Java 11, it was far worse than even I expected. They added a new horrible feature <a href="https://www.oracle.com/corporate/features/understanding-java-9-modules.html">Java Modules</a> that not only made Java very complicated, but also completely broke backward compatibility so this feature can't just be ignored. You can find the whole story <a href="https://saidit.net/s/programming/comments/8ddy/my_java_11_saga/">here</a>. This Java change was so horrible that even <a href="https://www.reddit.com/r/java/comments/9vmk0w/java_11_sucks_big_time/">some modern programmers complained</a>. The end result is that I will never use a Java version beyond Java 8, and Luan requires Java 8.</p> <p>This story of the destruction of Java by modern programmers applies to all projects being maintained by modern programmers. Modern programmers can only make software worse, so one should never upgrade any software being maintained by modern programmers. In the case of Java, I suggest sticking with <a href="https://www.oracle.com/java/technologies/downloads/#java8">Java 8</a>.</p> </div> </body> </html> <% end