GitHub ReleaseEvent at 2014-03-01 12:38:03
Repository: frege
Actor: Ingo60
Payload: {"action":"published","release":{"url":"https://api.github.com/repos/Frege/frege/releases/205557","assets_url":"https://api.github.com/repos/Frege/frege/releases/205557/assets","upload_url":"https://uploads.github.com/repos/Frege/frege/releases/205557/assets{?name}","html_url":"https://github.com/Frege/frege/releases/tag/3.21.402","id":205557,"tag_name":"3.21.402","target_commitish":"master","name":"Spring '14","body":"As of now, there will be just one downloadable file in a release. This is, of course, the frege jar.\r\n\r\nAll documentation is now kept on http://www.frege-lang.org \r\n\r\n  * [Runtime Javadoc](http://www.frege-lang.org/doc)\r\n  * [Frege Library](http://www.frege-lang.org/doc/frege/Prelude.html)  (I am still looking for a nice way to have a searchable page, or at least an automatic index on http://www.frege-lang.org/doc/frege. Contributions and ideas welcome!).\r\n  * [Language Reference](http://www.frege-lang.org/doc/Language.pdf)\r\n\r\nThe [eclipse plugin](https://github.com/Frege/eclipse-plugin) has now an [upgrade site](http://www.frege-lang.org/fregide). The library sources are part of the compiler jar, and so mouse over+ctrl+click navigation to library code is always possible.\r\n\r\nThis release has the following enhancements:\r\n\r\n  * Quickcheck 2.6 ported from Haskell\r\n\r\n  * [Quick](http://www.frege-lang.org/doc/frege/tools/Quick.html), a tool to run Quickcheck properties of a module, or several modules. (If you try this on the fregec.jar, there will be 2 failing tests. No worries!)\r\n\r\n  * better documentation, especially for overloaded native functions\r\n\r\n  * native array support via [JArray](http://www.frege-lang.org/doc/frege/prelude/PreludeArrays.html#JArray)\r\n\r\n  * better Unicode support in the scanner, who used to ignore surrogate pairs. Also, everything that is not explicitly uppercase is treated as lowercase, as far as Frege is concerned. This means, you can now write variable names in scripts that do not have case (like Devanagari). Caveat: the scanner still does not recognize glyphs, that is, if I have a german keyboard, I can enter `ä` and it will be `U+00E4 LATIN SMALL LETTER A WITH DIAERESIS`, which is a letter and hence acceptable in identifiers, but if one enters the canonical decomposition `ä` `U+0061 LATIN SMALL LETTER A + U+0308 COMBINING DIAERESIS` it won't be recognized as identifier part, becasue the scanner still operates on single unicode points, and  the diaresis is not a letter, but a non-spacing mark. Arguably, improvements are possible here.\r\n  \r\n  * Regex literals also are more Unicode-ish, they are being compiled with UNICODE_CASE; CANON_EQ and UNICODE_CHARACTER_CLASS flags.\r\n\r\n  * fixed a bunch of issues\r\n\r\n  * made the compiled code faster (and, unfortunately, at the same time bigger)\r\n\r\n  * added a head-strict cons operator [`(!:)`](http://www.frege-lang.org/doc/frege/prelude/PreludeBase.html#_excl_colon). This means that in `x+3 !: ys`, for example, `x+3` is evaluated right away, while `ys` is still lazy. List comprehension uses this, which often results in better code with less laziness overhead. If one needs to allow for undefined elements in the list, one must use map or the list monad.\r\n\r\n  * the type unsafe special native return type `[a]` is no longer recognized. Use JArray to tell Frege that a Java method returns an array.\r\n\r\n  * cleaned up the handling of let bound functions. Until now, local functions that did not reference any local name from their outer scope were silently moved to the top level. This often resulted in more general types, though this is seldom necessary. From now on, if you want your local function to have a polymorphic type, you need to annotate it or write it as top level function right away. Unannotated let bound functions are thus never generalised by the type checker, which brings more consistency and often better code. Still, if the function doesn't use local variables from the enclosing scope, it might get moved to the top level so as to avoid inner classes. This is now also documented in the language reference and the \"Differences to Haskell\".\r\n\r\n  * `main` can now have type `IO a`  or `[String] -> IO a` for some type `a`. If `a` is not (), you need to annotate it, though. If the frege `main` function returns `IO Int` or `IO Bool` and if it is run through the supplied `static void main(String args)` java method (i.e. as command line application), the returned value will be used to determine the exit status, where `0` or `true` signal success. If main is not annotated and doesn't look like a function, it is assumed to be `IO ()`. Otherwise, if it has arguments, `[String] -> IO ()` is assumed, as before.\r\n\r\n  * implemented several convenience functions of Haskell heritage: [`on`](http://www.frege-lang.org/doc/frege/prelude/PreludeBase.html#on), [`interact`](http://www.frege-lang.org/doc/frege/Prelude.html#interact), [`readFile`](http://www.frege-lang.org/doc/frege/Prelude.html#readFile), [`writeFile`](http://www.frege-lang.org/doc/frege/Prelude.html#writeFile), [`appendFile`](http://www.frege-lang.org/doc/frege/Prelude.html#appendFile), [`getContents`](http://www.frege-lang.org/doc/frege/Prelude.html#getContents) and, as substitute for Haskell's `hGetContent` we have [`getContentsOf`](http://www.frege-lang.org/doc/frege/Prelude.html#getContentsOf) which operates on a Reader.\r\n\r\n  * improved type directed name resolution (TDNR). This means, that expressions of the form `x.m` where `x` is an expression and `m` is an identifier, will always (I hope!) be typeable, whenever the type of `x` can be determined at all. The non-globalised lets contribute here because there is more code where the type of `x` may get disclosed, but the algorithm I used up to now also had a flaw that prevented proper typing in some cases. The better TDNR also applies to the other syntactic forms that trigger it: `x.{m?}` `x.{m=v}` and `x.{m<-f}`","draft":false,"author":{"login":"Ingo60","id":785782,"avatar_url":"https://avatars.githubusercontent.com/u/785782","gravatar_id":"c74c780e9affd6edecde9800bfca0a57","url":"https://api.github.com/users/Ingo60","html_url":"https://github.com/Ingo60","followers_url":"https://api.github.com/users/Ingo60/followers","following_url":"https://api.github.com/users/Ingo60/following{/other_user}","gists_url":"https://api.github.com/users/Ingo60/gists{/gist_id}","starred_url":"https://api.github.com/users/Ingo60/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ingo60/subscriptions","organizations_url":"https://api.github.com/users/Ingo60/orgs","repos_url":"https://api.github.com/users/Ingo60/repos","events_url":"https://api.github.com/users/Ingo60/events{/privacy}","received_events_url":"https://api.github.com/users/Ingo60/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2014-02-26T17:47:47Z","published_at":"2014-03-01T12:38:01Z","assets":[{"url":"https://api.github.com/repos/Frege/frege/releases/assets/84375","id":84375,"name":"frege3.21.402-g0b89544.jar","label":"","uploader":{"login":"Ingo60","id":785782,"avatar_url":"https://avatars.githubusercontent.com/u/785782","gravatar_id":"c74c780e9affd6edecde9800bfca0a57","url":"https://api.github.com/users/Ingo60","html_url":"https://github.com/Ingo60","followers_url":"https://api.github.com/users/Ingo60/followers","following_url":"https://api.github.com/users/Ingo60/following{/other_user}","gists_url":"https://api.github.com/users/Ingo60/gists{/gist_id}","starred_url":"https://api.github.com/users/Ingo60/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ingo60/subscriptions","organizations_url":"https://api.github.com/users/Ingo60/orgs","repos_url":"https://api.github.com/users/Ingo60/repos","events_url":"https://api.github.com/users/Ingo60/events{/privacy}","received_events_url":"https://api.github.com/users/Ingo60/received_events","type":"User","site_admin":false},"content_type":"application/x-java-archive","state":"uploaded","size":13905965,"download_count":0,"created_at":"2014-03-01T12:05:01Z","updated_at":"2014-03-01T12:38:01Z"}],"tarball_url":"https://api.github.com/repos/Frege/frege/tarball/3.21.402","zipball_url":"https://api.github.com/repos/Frege/frege/zipball/3.21.402"}}