> Am 09.06.2017 um 08:44 schrieb Duncan Jones <dun...@wortharead.com>: > > On Fri, 9 Jun 2017 at 02:35, Gary Gregory <garydgreg...@gmail.com> wrote: > >> 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. > > > D'oh. Sorry about that guys :-(
No problem! > > >> >> 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 >>>> >>>> >>> >> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org