On Thu, Jun 8, 2017 at 6:29 PM, Simon Spero <sesunc...@gmail.com> wrote:

> There is a one other compatibility issue, which can be seen in the attached
> code:
>
> import java.nio.charset.StandardCharsets;
>
> public class Weasel {
>
>     private static final String US_ASCII = "US-ASCII";
>     private static final String UTF_8 = "UTF-8";
>     private static final String STANDARD_US_ASCII =
> StandardCharsets.US_ASCII.name();
>     private static final String STANDARD_UTF_8 =
> StandardCharsets.UTF_8.name
> ();
>
>     public static void main(String[] args) {
>
>         switch (args[0]) {
>             case US_ASCII:
>                 System.out.println("USA! USA!");
>                 break;
>             case UTF_8:
>                 System.out.println("Emoji Lovin' Hippies!");
>                 break;
>             default:
>                 System.out.println("Weirdo.");
>         }
>     }
> }
>
>
> This code compiles.
> However, if the case labels are changed to STANDARD_US_ASCII and
> STANDARD_UTF_8, the compilation will fail, because the  case labels are no
> longer constant expressions.
> In the actual code, this means that code compiled against an older version
> of the library would work against the new code (because the old strings had
> already been inlined), but could not be re-compiled.
>

Thank you for doing this research and POC :-)

But Ugh! :-( We shot ourselves in the foot here.

Benedikt, how do you feel about a fix and a new RC?

Gary


>
> I don't know why anyone would be doing this...
>
>  (CLIRR pre-dates string switches)
>
> Simon
>
> On Thu, Jun 8, 2017 at 5:10 PM, sebb <seb...@gmail.com> wrote:
>
> > On 8 June 2017 at 18:09, Gary Gregory <garydgreg...@gmail.com> wrote:
> > > On Thu, Jun 8, 2017 at 9:57 AM, sebb <seb...@gmail.com> wrote:
> > >
> > >> On 8 June 2017 at 17:19, Gary Gregory <garydgreg...@gmail.com> wrote:
> > >> > On Thu, Jun 8, 2017 at 5:38 AM, Simon Spero <sesunc...@gmail.com>
> > wrote:
> > >> >
> > >> >> [A Note, not a vote :) ]
> > >> >>
> > >> >> 1. Clirr is generally considered obsolete, as it hadn't been worked
> > on
> > >> for
> > >> >> about ten years.   japicmp is a good replacement, especially for
> > report
> > >> >> generation, and is used in other commons projects.
> > >> >>
> > >> >
> > >> > IIRC, we've started using japicm here and there. Each component can
> > >> decide.
> > >> > But yes, Clirr looks pretty dead.
> > >> >
> > >> >
> > >> >> 2. Are the "changes" to the values in CharEncoding really
> > necessary[1]
> > >> (The
> > >> >> deprecation surely is). Technically this is a potentially breaking
> > >> binary
> > >> >> incompatible change, as constant strings and primitives are inlined
> > at
> > >> >> compile time. [2]
> > >> >> In this particular case, the results of load-time evaluation of the
> > new
> > >> >> initialization expressions  are identical to the old constants, so
> > it's
> > >> >> behaviourally compatible; however, since this is the case, and
> since
> > >> it's
> > >> >> all deprecated anyway, why not leave the old values in-place?
> > >> >>
> > >> >
> > >> > The changes are not "necessary" that for sure and we do get Clirr
> > >> warnings:
> > >> >
> > >> > Value of field ISO_8859_1 is no longer a compile-time constant
> > >> > Value of field US_ASCII is no longer a compile-time constant
> > >> > Value of field UTF_16 is no longer a compile-time constant
> > >> > Value of field UTF_16BE is no longer a compile-time constant
> > >> > Value of field UTF_16LE is no longer a compile-time constant
> > >> > Value of field UTF_8 is no longer a compile-time constant
> > >> >
> > >> > It's source compatible. What is the issue at runtime that could hurt
> > >> users?
> > >>
> > >> As the OP wrote, constants are inlined by the compiler.
> > >> So unless all code is recompiled, if it referenced the constant it may
> > >> have a stale value.
> > >> That is not binary compatible.
> > >>
> > >
> > > But in this case the actual values are the same are they not? So what
> is
> > > the difference? Would this only be a problem if we changed the string
> > > values?
> >
> > AFAIK the compiler only inlines compile-time constants.
> > So going forward, the values won't be inlined.
> > I assume the behaviour will be unaffected since the runtime value
> > should be the same as the constant.
> >
> > The release notes really ought to explain why the Clirr report items
> > aren't a problem.
> >
> > > Which we can't since these are defined in the JRE. And the JRE is
> > > unlikely to change those.
> > >
> > > Gary
> > >
> > >
> > >>
> > >> >
> > >> >> 3. JDK9 adds some extra parameters to the Deprecated annotation
> (most
> > >> >> notably  forRemoval=true, which is used to indicate that the
> > annotated
> > >> item
> > >> >> is really really deprecated.)   It's not needed in this case, but
> is
> > >> worth
> > >> >> thinking about  when jdk9 is eventually released (latest schedule
> > >> change :
> > >> >> from 7/27/2017 to 9/21/2017).
> > >> >>
> > >> >
> > >> > I do not think we plan on making Java 9 a requirement for any
> current
> > >> > project.
> > >> >
> > >> > Gary
> > >> >
> > >> >
> > >> >>
> > >> >> Simon
> > >> >>
> > >> >> [1]  https://github.com/apache/commons-lang/commit/7c19a1ff4c217
> > >> >> f03c0be62baf1169d689f566825#diff-820a48456e11e85bf6cf5356c1aed4
> baR48
> > >> >>
> > >> >> [2] https://docs.oracle.com/javase/specs/jls/se8/html/jls-
> > >> >> 13.html#jls-13.4.9
> > >> >>
> > >> >> On Jun 8, 2017 4:48 AM, "Benedikt Ritter" <brit...@apache.org>
> > wrote:
> > >> >>
> > >> >> > Hello,
> > >> >> >
> > >> >> > we have fixed quite a few bugs and added some nice new features
> > since
> > >> >> > Commons Lang 3.5 was released, so I would like to release Commons
> > Lang
> > >> >> 3.6
> > >> >> > based on RC3.
> > >> >> > The following issues have been fixed since RC2:
> > >> >> >
> > >> >> > - Site build now works from source distribution
> > >> >> > - IBM JDK test failures have been fixed
> > >> >> > - Automatic-Module-Name MANIFEST entry has been added for Java 9
> > >> >> > compatibility
> > >> >> >
> > >> >> > Commons Lang 3.6 R3 is available for review here:
> > >> >> >  https://dist.apache.org/repos/dist/dev/commons/lang (svn
> revision
> > >> >> 19928)
> > >> >> >
> > >> >> > The tag is here:
> > >> >> > https://git-wip-us.apache.org/repos/asf?p=commons-lang.git;
> > a=tag;h=
> > >> >> > e454e79463ffbbd9114db43019dd211debbcc105
> > >> >> >
> > >> >> > Commit ID the tag points at:
> > >> >> >  360198dfb6a2d68f1702f616dfacee34ae0541bb
> > >> >> >
> > >> >> > Maven Artifacts:
> > >> >> >  https://repository.apache.org/content/repositories/
> > >> >> orgapachecommons-1250
> > >> >> >
> > >> >> > These are the Maven artifacts and their hashes:
> > >> >> >
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > javadoc.jar
> > >> >> > (SHA1: c8adadb6c0b56c73f2cc2b4c77a09bfe34ec3a66)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > >> sources.jar.asc
> > >> >> > (SHA1: 46347c179ca9246d146d653bdc7363bda6f17d44)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.pom.asc
> > >> >> > (SHA1: 1309d4f3dd41a01ff9dd1f3c1a6eee10dad1ef77)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.pom
> > >> >> > (SHA1: 0fb4499188c94c63b3cba44f12481e193708c4a8)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar.asc
> > >> >> > (SHA1: e67e7d44751f1e346c2fda496193cbe251cfe098)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > >> javadoc.jar.asc
> > >> >> > (SHA1: 6b19fa12d319ced69c0f8a27001569514711f9dc)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > sources.jar
> > >> >> > (SHA1: f89c1df082d6f67cb7c956715c56d7e7a0508d0a)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6.jar
> > >> >> > (SHA1: e58ba08b01d37a023746f0987dcd910036a63021)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > tests.jar.asc
> > >> >> > (SHA1: af050e8c29a801a5d6783268c56230b814f56240)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > >> >> > test-sources.jar.asc
> > >> >> > (SHA1: 71e4c11efb9e3b2eff402ba4648d21822fb8da4a)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> > >> test-sources.jar
> > >> >> > (SHA1: 04a0fc8293d4ed64a54dcc9ba5f996776a4657ea)
> > >> >> > /org/apache/commons/commons-lang3/3.6/commons-lang3-3.6-
> tests.jar
> > >> >> > (SHA1: 87993a16c14a251062e3fe860fa53b5ef5304a0f)
> > >> >> >
> > >> >> > I have tested this with JDK 7, JDK 8 and JDK 9 EA b172 using
> Maven
> > >> 3.5.0.
> > >> >> >
> > >> >> > Details of changes since 3.5 are in the release notes:
> > >> >> >    https://dist.apache.org/repos/dist/dev/commons/lang/RELEASE-
> > >> NOTES.txt
> > >> >> >    http://home.apache.org/~britter/commons/lang/LANG_3_6_
> > >> >> > RC3/changes-report.html
> > >> >> >
> > >> >> > Site:
> > >> >> >      http://home.apache.org/~britter/commons/lang/LANG_3_6_RC3
> > >> >> >  (note some *relative* links are broken and the 3.6 directories
> are
> > >> >> >  not yet created - these will be OK once the site is deployed)
> > >> >> >
> > >> >> > Clirr Report (compared to 3.5):
> > >> >> >    http://home.apache.org/~britter/commons/lang/LANG_3_6_
> > >> >> > RC3/clirr-report.html
> > >> >> >
> > >> >> > RAT Report:
> > >> >> >        http://home.apache.org/~britter/commons/lang/LANG_3_6_
> > >> >> > RC3/rat-report.html
> > >> >> >
> > >> >> > KEYS:
> > >> >> >  https://www.apache.org/dist/commons/KEYS
> > >> >> >
> > >> >> > Please review the release candidate and vote.
> > >> >> > This vote will close no sooner that 72 hours from now,
> > >> >> > i.e. sometime after 11:00 CEST (UTC+2) 11-June 2017
> > >> >> >
> > >> >> >  [ ] +1 Release these artifacts
> > >> >> >  [ ] +0 OK, but...
> > >> >> >  [ ] -0 OK, but really should fix...
> > >> >> >  [ ] -1 I oppose this release because...
> > >> >> >
> > >> >> > Thanks!
> > >> >> > Benedikt
> > >> >> > ------------------------------------------------------------
> > ---------
> > >> >> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > >> >> > For additional commands, e-mail: dev-h...@commons.apache.org
> > >> >> >
> > >> >> >
> > >> >>
> > >>
> > >> ---------------------------------------------------------------------
> > >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > >> For additional commands, e-mail: dev-h...@commons.apache.org
> > >>
> > >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> > For additional commands, e-mail: dev-h...@commons.apache.org
> >
> >
>

Reply via email to