v0.28 8 Apr 2012 - [lib] Fixed bugs in sub() and substr(). - [compiler] Fixed bug in JavaGenerator::patternEqual(). - [doc] Updated substr() to reflect fixed semantics. v0.27 25 Mar 2012 - [runtime] Fixed bug in Integer.mp_expt_d(). Courtesy of: dbussink. - [runtime] Fixed bug in Integer.mp_mod(). Courtesy of: moritz. - [compiler] Assorted minor improvements. - Fixed slang.cmd script to properly detect Server JVM. - Updated UTF8-CPP to v2.3.1. - Updated APfloat to v1.6.3. - Updated UnicodeData.txt to 8-Nov-2011 (newest). - [doc] Minor corrections to the library reference. - [doc] Improved the readme. If anyone ever uses Slang, it'll be helpful. v0.26 14 Feb 2011 - [grammar] Updated to specify that escaped backslashes are acceptable in char and string literals. - [grammar] Updated to allow escaped single-quotes in char literals and escaped double-quotes in string literals. - [grammar] Updated to allow almost any Unicode text in char and string literals. - [compiler] Changed Lexer to accept new escape sequences in char and string literals. - [compiler] Changed Lexer to accept almost any Unicode text in char and string literals. - [compiler] Now properly detects and reports invalid code points in char and string literals. - [compiler] Greatly improved Windows support scripts. POSIX/Interix later. v0.25 2 Feb 2011 - [compiler] Eliminated extensive memory leaks due to Analyzer::freshHelper(), Analyzer::makeTypeExpression(), Analyzer::~Analyzer(), and most functions in Parser. - [*] Fully relaxed identifier rules to accept characters belonging to any Unicode letter category. This required the addition of code to parse the specficiation of Unicode character attributes in $(SPL_ROOT)/resources. v0.24 29 Jan 2011 - [compiler] Added support for UTF-8-encoded source files. For now, arbitrary Unicode text is allowed only in comments. This required the introduction of a third-party library, UTF8-CPP. - [compiler] Eliminated more dead variables. - [compiler] More changes to appease g++ 4.2. - [runtime] Corrected IOManager.open() to skip byte-order marks. - [runtime] Corrections to build scripts. - [runtime] Changes to support scripts to support UTF-8 source. - [doc] Cleaned and slightly reorganized overview. - [*] Relaxed identifier rules to allow characters in the following inclusive Unicode ranges: - Greek, uppercase [0x391-0x3A9] - Greek, lowercase [0x3B1-0x3C9] - [license] Updated to refer to the new third-party library. v0.23 26 Jan 2011 - [compiler] Updated JavaGenerator to match design of other components. - [compiler] Eliminated dead returned variable in JavaGenerator. - [compiler] Protected single-parameter c-tors with explicit. - [compiler] Did some stuff to appease g++ 3.3: - Added throw-specifiers to d-tor and what() in exception hierarchy. - Renamed Analyzer::not() to Analyzer::logical_not(). - Included in preprocessor.cpp. - Qualified namespaces of friend functions for compiler components. - [runtime] Renamed make.win32.cmd to make.cmd. - [runtime] Renamed Makefile.win32 to Makefile.win and corrected to include std.sys. Oops. - [runtime] Created versions of Makefile, slangc, and slang for POSIX/Interix. - [doc] Added overlooked round() in std.math to libref. - [doc] Updated overview to cover getting started on POSIX/Interix. v0.22 24 Jan 2011 - [runtime] Specialized finger tree for machine-int annotations and added int- indexed lookup. - [runtime] Added Int32 to perform hardware arithmetic while integer values are small. - [runtime] Added Float64 to represent hardware floating-point values. - [runtime] Added interfaces Numeric and Integral to better organize the language's number values. - [library] Added the following functions to std.basic: str2float: string -> float maybe float2str: float -> string - [library] Added the following functions to std.math: fpromote: int -> float isNaN: float -> bool isInf: float -> bool fsqrt: float -> float modf: float -> int * float - [library] Added the following functions to std.text: fformat: string * float -> string - [library] Added the following functions to std.alg: merge: (`a * `a -> order) * [`a] * [`a] -> [`a] - [library] Added std.sys with the following functions: coresAvailable: void -> int - [library] Added StackOverflow and BadArgument to BasicException in std.basic. - [library] Resolved far too many bugs to list. - [library] Extensive corrections were needed to support the new numeric representations. - [doc] Updated overview, libref, etc. - [doc] Improved sample programs and added binarytrees.slang. - [*] Added double-precision IEEE 754 float type and operations. - [*] Changed division operator / to work with integers and return only the quotient, discarding the remainder. - [*] Renamed operator mod to operator %. - [*] Renamed "object" to "record" wherever necessary. v0.21 15 Jan 2011 - [runtime] Improved finger tree documentation, but there's a lot more to do. - [runtime] Added the Lazy hierarchy to finger tree implementation and modified the data structure to lazily evaluate measurements. - [compiler] Renamed slang::RawException to slang::Exception. - [compiler] Updated slang::Exception to subclass std::exception. - [doc] Updated documentation-generation script. - [doc] Improved show_self.slang to demonstrate idiomatic file I/O. v0.20 13 Jan 2011 - [library] Corrected generate() and rev(). - [library] Switched some Slang-implemented functions to Java imports. - [library] Fixed a few library functions to throw appropriately. - [library] Corrected type signatures of foldl() and foldr(). WTF? - [library] Switched map(), foldl(), and foldr() to use internal finger tree operations. - [compiler] Fixed bugs in rules to analyze and generate finally. - [compiler] Updated the version number. (Forgot to do this before.) - [runtime] Corrected FingerTree.reverse() operation. - [runtime] Added lazy-evaluation classes in preparation for switch to fully- "functional" finger tree implementation. - [runtime] Added a specialized FingerTree.map() to avoid passing and lifing measurements when the input and output types are the same. - [doc] Improved sample program thread_ring.slang. v0.19 11 Jan 2011 - [compiler] Now mangles all identifiers that would collide with Java reserved words. - [compiler] Added equality test to the type expression hierarchy. - [grammar] Changed, added, and removed productions for a cleaner result, but no syntactically meaningful alterations. - [doc] Some improvements. v0.18 9 Jan 2011 - [grammar] Reserved channel keyword and added productions for using it as a type constructor and as an operator over types to create channel literals. - [grammar] Finally added finally to the try handler definition. - [compiler] Updated to implement above changes. - [runtime] Updated to support above changes. - [library] Removed haveMsg(), sendMsg(), and recvMsg() from std.thread. - [library] Moved Interrupted from ThreadException to BasicException. - [library] Added the following functions to std.basic: send: `a channel * `a -> void recv: `a channel -> `a - [doc] Updated all documentation to reflect these changes. v0.17 5 Jan 2011 - [compiler] Now unifies main()'s type with [string] -> void so that the annotations can be omitted. - [compiler] Now interns patterns in match statements. - [library] Corrected the following functions: setprec(), take(), drop(), insert(), rev(), open(), powMod(), invMod(), sqrt(), log(), pi(), isRunning(), sendMsg(), wait(), sleep(). - [library] Added order ADT to std.basic. - [library] Added RuntimeFailure to BasicException in std.basic. - [library] Added ThreadException and related constructors to std.thread. - [library] Added BadOpenmode to IOException in std.io. - [library] Renamed the following functions: ext_euclid => extEuclid is_probable_prime => isProbablePrime next_probable_prime => nextProbablePrime invmod => invMod powmod => powMod rand_prime => randPrime have_msg => haveMsg is_running => isRunning recv_msg => recvMsg send_msg => sendMsg - [library] Added more operations to std.basic: compare: `a * `a -> order slice: int * int * [`a] -> [`a] - [library] Added more operations to std.alg: find: (`a -> bool) * [`a] -> `a maybe findAll: (`a -> bool) * [`a] -> [`a] binarySearch: (`a * `a -> order) * `a * [`a] -> `a maybe - [library] Changed sorts in std.alg to use ordered comparators. - [library] Added reverse to finger tree implementation. - [runtime] Updated Sequence for reverse operation. - [runtime] Several changes to IOManager. - [runtime] Corrected Integer.s_mp_mul_high_digs() to prevent negative array index. - [runtime] Corrected Integer.mp_prime_next_prime() according to v0.42 LTM patch. - [runtime] Tentatively improved Integer.mp_expt_d() according to a Rubinius LTM patch. Courtesy of: dbussink. - [runtime] Corrected Runtime.int_divide() to check for zero divisor instead of zero dividend (wonder when I introduced that bug). - [runtime] Improved equals() performance in many classes. - [doc] Created library reference. - [doc] Updated sample programs to reflect changes. - [doc] Added new sample programs. - [doc] Updated overview. v0.16 30 Jun 2010 - [library] Decentralized exception specifications. Added header-specific exception specifications to most headers. Altered implementations of many functions to throw constructions of those header-specific type constructors. - [compiler] Typechecker relaxed to allow catching type constructors. - [library] Added the following functions to std.alg: mapMaybe: (`a -> `b maybe) * `a -> `b mergeSort: (`a * `a -> bool) * [`a] -> [`a] quickSort: (`a * `a -> bool) * [`a] -> [`a] - [compiler] Changed Analyzer to freshen data constructors and native importations upon definition. This corrects a problem with conflicting substitutions of type variables. - [runtime] Added TypeConstructor to represent algebraic data types. A nasty oversight. - [runtime] Corrected Construction to remember and return correct type at runtime. v0.15 28 Jun 2010 - [library] Added partition: (`a -> bool) * [`a] -> [`a] * [`a] to std.alg. - [library] Added type constructor maybe and utility functions to std.basic: val: `a maybe -> `a isNothing: `a maybe -> bool isSome: `a maybe -> bool - [library] Changed str2int(), str2real(), and int2char() to return maybe constructions. - [library] Added exception specifications to std.basic. - [library] Added more sequence operations to std.basic: split: int * [`a] -> [`a] * [`a] insert: int * `a * [`a] -> [`a] delete: int * [`a] -> [`a] - [doc] Updated docs and sample programs to reflect changes. v0.14 25 Jun 2010 - [compiler] Added control-path-termination checks for match in Analyzer. Eliminated redundant checks from JavaGenerator. - [compiler] Changed output code for match to use _args__slang (internal temporary variable). - [compiler] Corrected code generation for nullary constructors. v0.13 25 Jun 2010 - [library] Changed order of arguments to map(), filter(), foldl(), foldr(), and foreach() such that the function/predicate is now the first parameter; and in the folds, the initial value is in the middle. - [compiler] Fixed several memory leaks in Analyzer::expression(). - [compiler] Fixed memory leak in Analyzer::function_application(). - [compiler] Migrating explicit memory management to std::auto_ptr where reasonable. - [compiler] Changed format of error messages. v0.12 22 Jun 2010 - [runtime] Corrected variadic Runtime.multiply() and Runtime.add(). - [library] Improved error-detection of most functions in std.basic. - [library] Added range: int * int -> [int] to std.alg. - [library] Added round: real -> int to std.math. - [*] Extensive syntactic and semantic changes: - data-statement: typesafe discriminated union (known in functional languages as an algebraic data type) - pattern: now a powerful matching system - match-statement: allows branching on the structure of data as well as its value This will someday be extended to include most places where variable binding can occur. v0.11 17 Jun 2010 - [library] Changed join() to wait() in std.thread. - [library] Added std.text header with the following importations: join: string * [string] -> string rjust: int * char * string -> string ljust: int * char * string -> string - [runtime] Corrected parsing of Unicode escape sequences in strings. Now parses these sequences when so instructed. - [compiler] Demands escape-sequence parsing for interned literals. v0.10 15 Jun 2010 - [compiler] Fixed Parser::bitwise_expression(): now parses multiple consecutive binary bitwise operators correctly. - [compiler] Renamed some functions to improve consistency of convention. - [library] Changed interface of and implemented all functions in std.io. For example, changed fd to a record and replaced input()/input_line() with getline(). - [doc] Updated overview to reflect changes to std.io. - [doc] Added show_self.slang to sample programs. v0.09 13 Jun 2010 - [compiler] Added -v (version) option. - [compiler] Now infers void range from empty return statements. - [compiler] Now verifies that rethrows appear in catch statements. - [compiler] Improved detection of termination of control paths. Still have a long way to go. v0.08 12 Jun 2010 - [compiler] Fixed memory leaks after use of Analyzer::fresh(), Analyzer::getType(), and Analyzer::make_type_expression(). Also fixed a memory leak in Analyzer::pattern_polymorphic(). - [compiler] Rewrote some portions of Analyzer into more idiomatic C++. - [runtime] Updated Apfloat to v1.6. (Thanks again to M Tommila.) - [compiler] Improved error messages for primitive-math-op type failures. v0.07 11 Jun 2010 - [grammar] Type annotations are now optional wherever you can write a parameter or a function range. This includes def statements, fun statements, and function literals. - [compiler] Now tries to infer the most general type of any parameter for which you omit a type annotation. This is probably still bugged, so be careful. If in doubt, add annotations. The error messages probably won't make much sense when the typechecker fails; this is the same problem Standard ML has. v0.06 10 Jun 2010 - [runtime] Finally implemented Integer.not(). I'm lazy, okay? - [runtime] Added Sequence.map(), Sequence.foldLeft(), and Sequence.foldRight() to expose corresponding FingerTree operations. - [library] Added foldr(). Also re-added rev(). What the hell. - [compiler] Corrected behavior for constraint of nongeneric type variables within a named function definition. - [doc] Changed sample programs where necessary according to abovementioned correction. v0.05 9 Jun 2010 - [compiler] Corrections and improvements to the typechecking algorithm. This required changes primarily to Analyzer and Environment. Will be an ongoing process for at least one more release. - [library] Added rhead(), rtail(), and at(). - [*] Moved head and tail operations from grammar to standard library. - [*] Reworked library/runtime Makefile. v0.04 6 Jun 2010 - [doc] Updated sample programs to reflect current version of language. - [runtime] Replaced naive list implementation with H&P finger tree. See: http://www.soi.city.ac.uk/~ross/papers/FingerTree.html - [*] Updated all code using lists to use new interface. This required many changes to the compiler, the runtime, and the standard library, not to mention the documentation. - [library] Removed rev(), which I consider unnecessary. v0.03 28 May 2010 - [compiler] Added stub code for optimizer. - [compiler] Fixed JavaGenerator::write_pattern(): now passes isDefine on recursive calls. - [compiler] Fixed Environment::getDefinition(): now properly prunes types. - [*] Changed identifier in list comprehension to pattern. v0.02 27 May 2010 - [runtime] Added Integer.toByteArray() and Integer.toBigInteger(). - [runtime] Applied patch to Apfloat library supplied by M Tommila (Apfloat author). This patch reduces the cost of converting a BigInteger into an Apfloat. - [library] Added take() and drop(). - [library] Shortened the names of many functions: int_to_string => int2str int_to_radix => int2radix int_to_char => int2char real_to_string => real2str string_to_int => str2int string_to_real => str2real char_to_string => char2str char_to_int => char2int bool_to_string => bool2str get_precision => getprec set_precision => setprec reverse => rev length => len extended_euclid => ext_euclid v0.01 24 May 2010 - [runtime] Fixed Integer.mp_copy(): java.util.Arrays.copyOf() now uses correct size. - [runtime] Fixed Integer.mp_div_d(): now saves remainder before call to mp_div_2d() in power-of-two logic. - [runtime] Added interfaces to Integer.mp_div_3() and Integer.mp_mod_3(). - [runtime] Reduced Integer.MP_DIGIT_BIT to 30 to take advantage of Comba multiplication. - [runtime] Added Object constructor to support new output code. - [compiler] Fixed output code for objects. - [library] Added ceil(), floor(), int_to_radix(), mod3(), div3(), and rand_prime(). - [*] Added bitwise operators (except bitwise not). - [*] Added modulo operator.