From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 74342 invoked by alias); 18 Jan 2017 02:43:24 -0000 Mailing-List: contact kawa-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: kawa-owner@sourceware.org Received: (qmail 74312 invoked by uid 89); 18 Jan 2017 02:43:22 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.5 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: aibo.runbox.com Received: from aibo.runbox.com (HELO aibo.runbox.com) (91.220.196.211) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 18 Jan 2017 02:43:12 +0000 Received: from [10.9.9.212] (helo=mailfront12.runbox.com) by bars.runbox.com with esmtp (Exim 4.71) (envelope-from ) id 1cTgDN-0002Q0-Ky for kawa@sourceware.org; Wed, 18 Jan 2017 03:43:09 +0100 Received: from 76-9-64-11-rt-broadband-00.broadband.oakhurst.sti.net ([76.9.64.11] helo=localhost.localdomain) by mailfront12.runbox.com with esmtpsa (uid:757155 ) (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.82) id 1cTgD9-0007GU-44 for kawa@sourceware.org; Wed, 18 Jan 2017 03:42:55 +0100 To: Kawa mailing list From: Per Bothner Subject: please try 'invoke' branch - it has incompatible changes Message-ID: <1d0a9c63-c6d8-a724-1162-9403fc52867b@bothner.com> Date: Wed, 18 Jan 2017 02:43:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2017-q1/txt/msg00021.txt.bz2 The "invoke" branch in the Kawa git repository will be the basis for the Kawa 3.0 release. It has a number of major and exciting changes. No idea when it will be released - but at this point it is relatively stable and usable: Though there are some bugs and incomplete features, most existing code should work, with few or no changes. However, there are some incompatible changes planned, so I recommend you try out your Kawa code on the invoke branch, and see if anything breaks. The test it, clone the Kawa git repository, and then do: $ git checkout invoke and then build in the usual way. * Most places where you could declare a new identifier binding have been generalized to accept *note patterns: Variables and Patterns. * The internal calling convention used for “apply” (ie. calling an unknown-at-compile-time procedure) has been completely changed. * _Incompatible change:_ String literals are now ‘gnu.lists.IString’ rather than ‘java.lang.String’. The advantage of using ‘gnu.lists.IString’ is that ‘string-ref’ and ‘string-length’ are (roughly) constant-time, rather than having to linearly scan the string. * _Incompatible change:_ The procedures ‘string-append’, ‘substring’, ‘list->string’, and the constructor ‘string’ return an immutable string (an ‘IString’). (The functions ‘string-copy’ is similar to ‘substring’, but returns a mutable string.) This is a work-in-progress with the goal of implementing SRFI-140 (http://srfi.schemers.org/srfi-140/srfi-140.html): Other procedures will be changed to return immutable strings. If you ‘(import (scheme base))’ standard procedures such as ‘string-append’ will return mutable strings; if you ‘(import (kawa base))’ the procedures will return immutable strings. The command-line options ‘--r5rs’ or ‘--r6rs’ or ‘--r7rs’ override the default so these procedures return mutable strings. * _Incompatible change:_ Before, if a Java parameter type was ‘java.lang.String’ Kawa would accept any value, converting it using Object’s ‘toString’ method. Now Kawa will reject an argument if it is not a ‘java.lang.CharSequence’. * _Incompatible change:_ Kawa traditionally followed Java in allowing you to pass an array with the “rest” arguments to a varargs method. For example, you could write: (define args (Object[] 3 "cm")) (java.lang.String:format "length:%s%s" args) This is no longer allowed. Instead, use the splice operator: (java.lang.String:format "length:%s%s" @args) * _Incompatible change:_ You used to be able to write a type-specifier in a formal parameter or return type without using ‘::’, as in: (define (incr (x int)) int (+ x 1)) This is no longer allowed, because it conflicts with the syntax for patterns. Instead you have to write: (define (incr (x ::int)) ::int (+ x 1)) -- --Per Bothner per@bothner.com http://per.bothner.com/