#### Recent Releases

3.1731 May 2018 06:05
**minor feature:**
Added the Array.rref() method (reduced row echelon form). (1f77458).
Added the Array.gauss_jordan_invert() method (matrix inversion). (1f77458).
Added the Array.gauss_jordan_solve(v) method (solution to a system of linear equations). (1f77458).
Added the Number methods: bsearch, bsearch_le and bsearch_ge. (e09e762).
Added Number lnbernreal(n) method (also aliased as lnbern(n)). (a4fcb28).
Added the Number hyperfactorial(n) method. (1ef0b40).
Added the Number lnsuperfactorial(n) and lnhyperfactorial(n) methods. (15d9296, 5c1ae7c).
Added the Number bernoulli_polynomial(n, k) method. (53802c2, a0a7cdc).
Added the Number catalan(n) to return the n-th Catalan number. (59f1ac2).
Added the Array.map_cons(n, ... ) method. (28f0ab1).
Added the Number euler_number(n) method. (2c6f883).
Added the euler_polynomial(n, x) Number method. (c5c76bd, 7e7a966).
Added the Number geometric_sum(n, r) method. (b2c1f89, 4248165).
Added the Number methods quadratic_formula(a,b,c) and iquadratic_formula(a,b,c). (9480b35).
Added the Number solve_pell(d, n) method to solve a generalized Pell equation. (f91e039).
Added the Number methods: approx_cmp, approx_lt, approx_le, approx_gt, approx_ge and approx_ne. (918d1ad).
Extended the optimizations in Number digits(n, b) and sumdigits(n, b). (c85a90e).
Extended the base number up to 62 in Number base(n, b), as_int(n, b) and as_frac(n, b). (c85a90e).
Optimization in Numberperfect_root(n) (11db384).
Various optimizations in the Perl deparser. (ec45264).
Optimized faulhaber_sum(n, k) to use the tangent numbers to compute the Bernoulli numbers. (b4484a7).
Extended the Number float(x) method to convert x to any floating-point number, either real or complex (in this order). (0e32c24).
Renamed the Catalan constant from Num.catalan to Num.CatalanG. (b36cd44, ee2e120).
Changed the boolification of NaN from true to false. (9189641).

3.1606 May 2018 07:05
**minor feature:**

3.1518 Feb 2018 03:17
**minor feature:**
Number
multinomial(a, b, c...) (df33a59)
arithmetic_derivative(n) (c6b7fc3)
sqrt_cfrac(n) (2859ad0, 76474c1)
subfactorial(n, k=0) (18d91e3, 43c02c6)
.
multinomial(a, b, c...) (df33a59).
arithmetic_derivative(n) (c6b7fc3).
sqrt_cfrac(n) (2859ad0, 76474c1).
subfactorial(n, k=0) (18d91e3, 43c02c6).
Array.
.accumulate() (8072a0b).
.accumulate_by (6cd6e58).
.shift_while (0b77fe8).
.pop_while (0b77fe8).
.indices_by (7bc32b8).
.bsearch (a8b87fe).
.bsearch_le (a8b87fe).
.bsearch_ge (a8b87fe).
.bindex_le (a8b87fe).
.bindex_ge (a8b87fe).
.
.accumulate() (8072a0b).
.accumulate_by (6cd6e58).
.shift_while (0b77fe8).
.pop_while (0b77fe8).
.indices_by (7bc32b8).
.bsearch (a8b87fe).
.bsearch_le (a8b87fe).
.bsearch_ge (a8b87fe).
.bindex_le (a8b87fe).
.bindex_ge (a8b87fe).
Hash.
.collect (47bb3e3).
.
.collect (47bb3e3).
Lazy.
.first_by (bcc96b8).
.
.first_by (bcc96b8).
String.
.encode_base64() (b240ad7).
.decode_base64() (b240ad7).
.
.encode_base64() (b240ad7).
.decode_base64() (b240ad7).
Support for one-line nested for-in loops (same as in Julia). (67f7105, 514bd8e, f1c6794).
Using mpfr_beta() when mpfr-4.0.0 is available. (4cfa15e).
Using mpfr_z_sub() when mpfr = 3.1.0 is available. (f2f52fb).
Extended Lazy.first() to return the first item when no argument is provided. (f157ae3).
Extended Number.complex() to accept an optional argument. (3f33c77).
Switched to Hurwitz expansion for complex numbers in Number.as_cfrac(). (0ebb66f).
Reimplemented Number.rat_approx() for much better performance ( 3x faster). (3e488c8).
Using a more efficient algorithm in Number.convergents(). (608aafc).
More efficient algorithm in computing the n-th Bell number in Number.bell(). (baa5ce9).
Minor simplification/optimization in Number.digits() when the base is not specified. (3099ee7).
Better performance in Array and RangeNumber prod() and prod_by() methods. (9ddade5).
Binary splitting in Array.sum(), Array.sum_by , Math.lcm() and Range.sum_

3.1009 Dec 2017 14:05
**minor feature:**
Simplified the Number.times method. (38509f6).
Simplifications and optimizations in the Number class. (339354f, 8043705, 79898a5).
60x faster decimal-expansion of a fraction, in Number __stringify__(). (9f8d838).
Sieve the primes with a variable step in Number.nth_prime(). (86801d9).
Optimized the RangeNum.sum() to use a -form expression for all ranges. (3dc5a89).
Unified the for-in loop with the Block iterators map, each and grep. (87490e4).
Reimplemented Number.prime_count() for better performance. (69b06b3, 9a16d87, 4c9d965).
Extended the unary dot operator to allow array and hash lookup (same as in Perl 6). (9e0551b).
Reimplemented Number.digit() and Number.digits() to support arbitrary large bases. (a47cf65, 4c041d9, ab09256, 7d1bec5).
Removed the built-in MultiArray class. (8f4528d).
polygonal_root(n, NaN) to return NaN instead of n. (c24158a).
Extended the Array eq and cmp methods to support cyclic references. (1bd9f0a, 1de91f9).
Extended the Hash eq method to support cyclic references. (69fd70a).

3.0504 Nov 2017 22:45
**minor feature:**
Optimization for numerical ranges ( 2.4x faster). (dfb7b89, e2618e8).
Minor optimization in Number polygonal(n, k). (caa65aa).
Simplified and optimized the generated for the for-in loop. (195dc18).
Optimized the Number eta(n) function for native unsigned integer values. (14ef4df).
Optimized the Number methods is_div(n, k) and k.divides(n). (a245ca3).
Reimplemented the Number next_power(n, k) method to support arbitrary large integers. (2ec1bf1).
Renamed Sidef::Convert::Convert to Sidef::Object::Convert and is now used as a parent by Sidef::Object::Object. (6fbeb14).
the numification of integers to the integer limits. (04a5b41, 42199ba, 8a14be4).
Block scoped variables will now keep their scope in compiled code as well. (e27030c).
__sub__(Math::GMPz, Math::MPFR) now does correct rounding in all cases. (6741de3).
the intification of values to the integer limits, inside the Perl deparser. (dfb7b89).
the objectification of the value returned by Math::Prime::Util::GMP::chinese(). (27e3133).

3.0406 Oct 2017 10:05
**minor feature:**
Number
Convergents(n, k) (9ac40d6)
Faulhaber_sum(n, k) (d43ac9f)
Polygonal(n, k) (e6e499d)
Polygonal_root(n, k) (de23455)
Polygonal_root2(n, k) (f604bed)
Ipolygonal_root(n, k) (e6e499d)
Ipolygonal_root2(n, k) (f604bed)
Is_polygonal(n, k) (e6e499d)
Is_polygonal2(n, k) (f604bed)
.
Convergents(n, k) (9ac40d6).
Faulhaber_sum(n, k) (d43ac9f).
Polygonal(n, k) (e6e499d).
Polygonal_root(n, k) (de23455).
Polygonal_root2(n, k) (f604bed).
Ipolygonal_root(n, k) (e6e499d).
Ipolygonal_root2(n, k) (f604bed).
Is_polygonal(n, k) (e6e499d).
Is_polygonal2(n, k) (f604bed).
Array.
.zip_by ... (ddec3bf).
.unzip_by ... (fea9d55).
.extract_by ... (f922d6e).
.extract_first_by ... (f8de4a2).
.extract_last_by ... (f8de4a2).
.weighted_shuffle_by ... (688a57a).
.
.zip_by ... (ddec3bf).
.unzip_by ... (fea9d55).
.extract_by ... (f922d6e).
.extract_first_by ... (f8de4a2).
.extract_last_by ... (f8de4a2).
.weighted_shuffle_by ... (688a57a).
Added the.replace_all String alias for.gsub. (125effa).
Added the.cache() and.uncache() Block methods. (224afd2).
Added the.chrs alias for Array.decode() and Array.join_bytes(). (23b0aa3).
Added the.head and.tail aliases for.first and.last Array and Range methods. (69d4976).
Optimized the Array.nth_permutation() method. (5259c8d).
More consistent deparsing of Complex numbers. (213499e).
Number.as_cfrac() will now return integers, if possible. (acb51f9).

3.0328 Aug 2017 06:05
**minor feature:**
Added the Array expand and recmap methods. (0d4cec6).
Added the Number ipow2(n) and ipow10(n) methods. (7962ad7).
Added the falling_factorial(n, k) and rising_factorial(n, k) methods. (0d9a98c).
Added the Regex.run() alias for Regex.match(). (ddc5f04).
Added support for storing the original value evaluated inside an if statement. (99bf5fa).
Added support for capturing the arguments of the when and case statements. (0de6336).
Added the Match.string() and Match.regex() methods. (6f44dfc).
Added comparison and (in)equality support for Regex objects. (cc673df).
Added the Number.rat_approx() method. (041eb51, 079bd23).
Added the Number.as_cfrac() method. (5980cb8).
New dependencies: Algorithm::Combinatorics and Algorithm::Loops. (d9c69ba, 71e1916).
Implemented all the functions provided by Algorithm::Combinatorics. (c77c4e3, 329747c).
Added the Number.polymod() method from Perl 6. (271058a).
Extended the with statement to support capturing of multiple arguments. (03069a9).
Faster stringification of floating-point numbers (including complex numbers). (8dd6c96).
Optimization for integers in Number as_rat and as_frac. (dc9a1c7).
Optimized the creation of Number objects from native signed and unsigned integers. (f3a465c).
Extended Array.reduce() and Range.reduce() to accept an initial optional value. (0de25bd).
Optimization inside Number.zeta() for unsigned native integers. (0bd26a1).
Cached the generated code for the __BLOCK__ keyword. (17d9a5a).
Minor optimizations inside the Number.ilog() method. (553e20e, ba36742).
Number.next_prime() now uses Math::Prime::Util::GMP::next_prime() and is 2x faster. (c550d89).
Re-implemented the Array.abbrev to match the behavior of Abbrev::abbrev from Ruby. (861038b).
the FileHandle.copy() method. (f5b856e).
two special cases in the Number class. (cc7e5b6).
the multiple dispatch with anonymous pattern-expressions. (792cf44).
Floating-points numbers are now deparsed as floats by the Sidef deparser. (dcf6aa5).
the NaNi and Infi literal

3.0206 Jun 2017 09:25
**minor feature:**
Added the is_coprime(n, k) Number method. (26ae193).
Added the Hash.invert() alias for Hash.flip() and Hash.reverse(). (6b90a0b).
Many internal simplifications and optimizations inside the Number class. (ba78194).
Performance improvement in bernreal(n) for large values of n. (5319dd9).
Minor simplifications in the Number cis() function. (8c41374).
Re-implemented the ilog(x, y) function for better performance. (dffc692).
the inheritance of a class defined inside a module. (c1d5c63).
the return values of Number.eta() and Number.harmreal(). (a0ed475, 1e2150e).
Number.digits() with an additional argument specifying the base, now returns an array of strings. (ac685c5).

3.0110 May 2017 06:45
**minor feature:**
Added the Number is_smooth(n,k) method.
Added support for the literal NaNi and Infi special imaginary values.
Added the Array nth_perm() method, which returns the nth permutation of the self array.
Added a check for exact divisibility of two integers.
floor() and ceil() of a rational integer, now returns a number stored internally as an integer.
Many other internal simplifications and optimizations in the Number class.
Modified next_pow2(x) and next_pow(x, b) to return the smallest power of b not less than x.
a segmentation fault in Complex() without arguments.
a rounding error in next_pow2() and next_pow().
another rounding error in Number ilog(n, b).
a regarding the equality of two NaN values.

3.0023 Apr 2017 03:15
**minor feature:**
Minor change in the syntax for indented here-documents.
Minor in here-doc with indentation.
modified: lib/Sidef/Types/Number/Number.pm.
New implementation of the numerical system.
Inheriting from the same class, is no longer allowed.
Require Math::GMPq =0.45.
Minor code tweaks.
Extended the Block.for() method to accept multiple ranges.
Added the Block.

2.3705 Apr 2017 08:25
**minor feature:**
Added the Array diff() method. (b043bec).
Added the Number make_coprime() method. (b0ca3ca).
Defined comparison for complex numbers. (d7ae774).
Added the Complex mod() method and the Complex inoperator. (04e404d).
Defined the sgn() function for Complex numbers. (9156a58).
Added the Number mfactorial method. (3fb3c4d).
Added the Complex acmp() method (absolute comparison). (9e94c45).
Added support for inclusion of modules inside other modules. (6b8467e, a5c7269).
Added the Number Ai() method (Airy function). (71c2636).
Added the NameParam name() and value() methods. (ffce3b7).
Better rounding for Complex numbers. (07e5926, 626d1a1).
Better implementation of the Number fmod() method. (3a127ed).
Minor simplifications and optimizations in the Hash class. (33a1193).
Minor simplifications in the Number class. (fe0d15f).
Minor optimization in multiple-dispatch with inheritance. (ede3854).
Minor optimization in bernreal(n) for very large values of n. (72d901d).
Reimplemented the Number mod() method entirely with rational numbers. (07d15f9).
The name of the class is now included in the multiple dispatch error of 'possible candidates'. (fa368f4).
Decreased the precision of floating-point numbers from 200 bits to 192 bits. (8340e73).
Changed the syntax for in-method calls from name to `name`. (Haskell-like) (864b872).
The Parser keyword will now point directly to the current instance of the parser that parsed the current program. (062b692).
a strange in the deparsing of preunary operators. (0ba4e9a).
an unsafe Array optimization in the Optimizer. (9675be7).
Minor in Number remove() when the second argument is 0. (c180735).
a special case in Number expmod(x,y,z) when y 0 and gcd(x, z) != 1. (0a7a641).

2.3603 Mar 2017 06:05
**minor feature:**
Added the Hash.set_keys() method. (2556978).
Added the Range min_by and max_by methods. (8681cae).
Added the Number square_free_count(min, max) method. (e7eb7cd).
Added the Number is_semiprime(n) method. (3830f95).
Added the Number random_prime(min, max) method. (c72fd1f).
Added the Number nth_prime(n) method. (b5e3890, c75b589, 2bbf3fb, d1d187e).
Added random_nbit_prime(n) and random_ndigit_prime(n) Number methods. (aacf0aa).
Added the Array.cartesian method, for computing the Cartesian product. (519437c, 49689b9).
Number fadd(), fsub(), fmul() and fdiv() are all slightly faster. (bda00c8).
Minor simplifications in Object.eq() and Object.cmp(). (ee2420e).
Extended and generalized the Array zip() and mzip() methods. (fe40cea).
Extended the include() parse-time function to accept glob-like paths. (a0d812e).
Changed the output of Array.freq_by . (a4d6ea6).
Renamed Number.pfactor() to Number.factor_exp(). (e8f976e).
Object.kind_of() will now expect a string-like object, rather than an arbitrary object. (4539d95).
the multiple dispatch with inheritance. (b668ae7, d05d954, 2439f03).
the inclusion of files in the current namespace. (e424b7d).
two special cases in Number.divisors() for n=0 and n=1. (ca5dbba).
a minor in String.center() when the width is smaller than the length of the string. (94c7b6e).

2.3501 Feb 2017 20:05
**minor feature:**
Added the Array and Range sum_by and prod_by methods. (9d830f3).
Added the Number forperm and forcomb methods. (ca73dcb).
Added the O alias for s. (a05c231).
Added the Number.beta() method. (95b9093).
Added the Complex.sqr() method. (b2f0da8).
Added the Math.chinese() function. (e57b1d7).
Added the Array.cons(n) method. (9c5dba9).
Added the Number/Complex sin_cos() method. (cc11fd2).
Added the Number/Complex lambert_w() method. (57e224b).
New algorithm in Array.pick() and Range.pick(). (0e4786f).
Added the Number ilog(), ilog2() and ilog10() methods. (6dfd647).
Added the String.center() method to center a string into a given width. (7c4dee4).
Several tail-call optimizations. (d44585f).
Defined behavior for Complex() without arguments. (52e25ee).
Minor code simplification in the decimal expansion of non-integers. (7af5537).
Many simplifications and optimizations inside the Array class. (ec98af4, 92a0d0e, 543eafa).
Extended Number.round() without an argument to mean Number.round(0). (52518c4).
Minor optimization in Complex.new() when called with a Math::MPC object. (dbfc6d2).
Extended the set of valid characters allowed in the name of identifiers. (2383481).
Extended the Range first() and last() method to accept an optional number. (0e4786f).
Number.is_prob_prime() uses a faster algorithm when invoked without an argument. (d624c22).
Changed the behavior of an object in hash lookup. (60b5ffd, a4c34c7).
Aliased the method Array.to_s() to Array.dump(). (9197d3c).
Minor change in the code generation for dynamic constants. (dabacb7).
Declaring more parameters after a slurpy parameter, is no longer allowed. (7052d6f).
a minor inside the parser. (9c5dba9).
a minor in the Sidef deparser. (617d352).
Explicit undef values are now preferred over implicit ones. (e7042fd).
The integer limits from Math::GMPq are used only when they are defined. (9955135).
some special cases in the bessel_j() and bessel_y() Number methods. (9159c4b).
const, static and define declarations a

2.3425 Dec 2016 03:16
**minor feature:**
Added the !! postoperator. (5995615).
Added the seed() and iseed() methods inside the Number class. (42b0216).
Added the Array.bindex() method, to binary search a sorted array. (1ec991a).
Added the Array.binsert() method, to insert an element into a sorted array. (b5ad92f).
Added the Hash.pairs() alias for Hash.to_a(). (a49ed99).
Added the Number bessel_j() and bessel_y() methods. (b652fc2).
Added the Number.is_mersenne_prime() method. (f40a928).
Added the Number.remove() method. (d903949).
Added the Number.rad() method, which returns the radical of a given number. (a563aeb).
Added the Number perfect_root() and perfect_power() methods. (8704be8).
Added the File and String md5(), sha1(), sha256() and sha512() methods. (527c968).
Added the Number.eta() method, which is Dirichlet's eta function. (d07e561).
Added the Number.cis() method, defined as cos(x) + sin(x)*i. (194bbca).
Added the Complex.hypot() method. (9a481cd).
Empty local() declarations are now allowed. (a95f4c8).
Extended RangeNumber methods sum() and prod() to accept an optional block. (b61ca0a).
Optimized the sum() and prod() RangeNumber methods in some common cases. (2c73036).
Extended the cross and zip meta-operators to accept alphanumeric method names. (08a9a95).
Various optimizations inside the Perl deparser. (1e6775e, a5b5506).
Experimental changes inside the parser, regarding the inoperators. (6957238, c1e42a1).
Renamed the Number method factors_pairs() to pfactor(). (fd8f1c5).
Removed the old and undocumented d string escape. (b09acf0).
the localization of multiple variables. (857cb7c).
an infinite loop inside the parser for include(...). (cc65d17).
the acoth(x) method for x -1 and x 1 . (7a614c3).
the interactive help when Sidef is installed. (805fbc1).
some special cases of the method Number.irootrem(). (4f35ac7).
Undefined methods from Fcntl are no longer created in the File class. (bebf042).
the accuracy in Number.bernreal() for small n. (0c2de24).
Minor in Number.irand() when the number

2.3314 Nov 2016 06:25
**minor feature:**
Added the recursive Array.match() method. (a55424b).
Added the... postoperator in the Match class. (aaa74e6).
Experimental implementation of the MAIN() function from Perl 6. (a26075c).
Added the experimental Array.getopt() method for parsing long arguments. (cd64146).
Added the harmfrac() and harmreal() Number methods. (6cd5d3e, 175d5b7).
Better initialization support for numbers. (79c13d0, 080ccbc).
Rational exponentiation is slightly faster now. (72e8d9b).
Number.bernfrac() is many order of magnitudes faster for large values. (006de26).
Number.is_pow() with two arguments, is considerably faster. (f88151d).
Code simplifications in Number.base(), which made it slightly faster. (67de959).
Number.is_prime() is slightly faster for large numbers. (ee770c5).
for x ? y ... is now equivalent with: for x in y ... . (ea25db8).
a potential infinite-loop in Number.lgrt() and Complex.lgrt(). (4927708).
and improved the support for premethod-calls. (69cd5d9).
Math:: objects stored in state variables, are no longer blessed. (43a58c0).
Removed the broken FileHandle.compare() method-alias. (9139948).

2.3208 Oct 2016 10:05
**minor feature:**
Added the Number.lgrt() and Complex.lgrt() methods.(bc912ea).
Added support for comparing objects that contain cyclic references. (dab878c).
Added the Hash.as_tree(root) method, for converting a nested Hash into a tree. (e8c3ab2).
Added the Array.part(n) method, which partitions an array into two parts. (fa8d261).
Added the Array.kv() and Hash.kv() aliases. (e18f0af).
Added support for rational exponentiation with an integer power. (b0e87f0).
Added Number.li(n) for computing the logarithmic integral of n. (bb41c0d).
Added bernreal(n) and bernfrac(n) Number methods. (27ad32d, ec96b9c).
Added the Number.popcount(n) method for counting the number of 1-bits in n. (3d65a34).
Extended Number.is_pow() to accept an optional argument for power. (f7ebeb4).
Added valuation(n,k), which counts the number of times n is divisible by k. (2678827).
New Number methods: fadd(), fsub(), fmul(), fdiv() and fpow(). (9d7813f).
Slighlty faster dumping of nested structures. (02cc0bc).
Extended the explicit notation for pre-method calls to behave like an unary operator. (3c34d99).
Optimization for obj.("method") to obj.method (available at -O1) (a5bfdfc).
Better performance of Perl function calls in void context. (e182484).
Extended the.reduce method to accept an optional initial value. (7d0a04e).
Increased the default of reps in Number.is_prime() from 12 to 20. (b456473).
Increased the default floating-point precision from 128 bits to 200 bits. (60510d5).
Implicit pre-method calls on blocks is no longer allowed. (74314c3).
All the individual lines from FileHandle no longer include a trailing newline. (291a78e).
Simplified the method iroot to no longer return complex numbers. (fa828d4).
a segmentation fault in Number.modpow when the third argument is zero. (77f5e1b).

2.3109 Sep 2016 10:45
**minor feature:**
Added support for literal complex numbers. (2f66c7c).
Added the with/orwith/else construct. (9bac444).
Added the String.findall(/regex/) method. (febe813).
Added the FileHandle.fcntl() method. (3e53503).
Added the built-in SocketHandle type to represent a socket handle. (3e53503).
Added the pipe() and backtick() String methods. (df9f322).
Added the powmod alias for modpow and expmod. (765e9b8).
Extended the File.delete() method to remove all the links to a file. (a071375).
Complex.i() invoked on a complex object, now multiplies the self object with i. (a5428a3).
6 faster code generation for operator-like methods. (1a8c6f4).
Slightly faster deparsing of Number objects. (0d79a29).
File.readlink() now returns a File or a Dir object correspondingly. (e4c31f6).
Slightly faster stringification of floating-point numbers. (c97844b).
Various other simplifications and performance improvements. (1d89775, 3d5dc58, 9b72a19).
Math::GMPq =0.41 and Data::Dump are now required. (2075925, 8add044).
Preunary operators no longer extend implicitly on multiple lines. (0b578c6).
Number.sign() now returns 1, 0 or -1 instead of "+", "" or "-" (ead18b8).
a potential in the deparsing of numerical ranges. (2b1b80b).
(-Inf).root(1) to return -Inf instead of Inf. (a5428a3).
A missing block after elsif(...) is now caught as expected. (5287e8f).
a compatibility with perl-5.18. in the code generated for dynamical constants. (7ca5257).
the Number.binomial() method to work correctly with large 64-bit unsigned integers. (2caedc2).
the P() and X() quotes. (df9f322).
a segmenetation fault for Number('1/0') (7094c49).
the LayzMethod objects returned by Object.methods(). (8bc33e2).
a minor in the deparsing of Complex objects. (1a96a7c).

2.3030 Jul 2016 17:45
**minor feature:**
Support for multi-lines inside the REPL. (265749c, b6a8b83).
Better redesigned numeric and string ranges. (ad7857d, 34b32ee, 969ed8d).
Cache support for small integers ( = 0 and

2.2603 Jun 2016 10:25
**minor feature:**
Dumping support for cyclic references. (cd2388d 7b39d16).
Added the clone() and dclone() Object methods. (be63b10 52377cc a240b66).
Extended the optimizer to cover named parameters. (0cfab89).
Specialized code generation for numerical constants. (dd82f9e).
include("file.sf") now resolves file paths relative to the current file. (6302d91).
Array.copy() and Hash.copy() are deprecated. (use.clone() or.dclone() instead).
Creating Complex objects with Complex arguments works correctly now. (afd11fd).
and improved Block.ffork() to work correctly with blocks that return numeric objects. (2e53114).

2.2528 May 2016 11:25
**minor feature:**
Database precompilation support for Sidef scripts. (9998c4b).
Added the Enumerator built-in class. (d7a5e28).
Added the Lazy built-in type to represent a lazy pipeline. (6459949).
Added the Object.dump() and Match.dump() methods. (da2e4d0).
Added the Hash.sort() method. (1cdcced).
Rewritten the Number.irand() method to use the Mersenne Twister algorithm. (e17af6c).
Added the following Array methods: slice_before(), slice_after(), compact(). (d7a5e28).
New user-friendly API for parsing and executing Sidef scripts from Perl. (22f3ad3).
Cached the code generation for subset blocks. (3a80249).
Faster and better creation of string objects. (1e1345d).
Faster Perl deparsing of strings. (75433b2).
Improved the Optimizer to cover interaction between Number and Complex objects. (1a61fc7).
Extended the Optimizer to recognize expressions in more places. (ac353bc).
Added constant-folding support for exp2() and exp10() numerical methods. (86f7638).
Various internal simplifications. (e1ed9ac bbf811f 031ce4c).
Optimized the for-in loop to use a Perl subroutine as the block of the loop. (ab3313f).
Removed the as_list() alias for to_list() in Hash and Array classes. (c2cd6b9).
Removed the collect and filter method aliases. (d7a5e28).
The Perl code generator no longer produces tidied code. (6bfcefe).
a minor that changed the names of some types in error messages (69ea436).
Minor -in Array.diff() for arrays with non-blessed objects. (cb99130).
Minor -for 0Inf and for 0(-Inf). (629e20d).

2.2425 Mar 2016 19:45
**minor feature:**
Support for subsets. (7bc973c, more info).
Inheritance support for class variables. (e61c5be).
Inheritance support for class attributes. (754cad0).
Structures and subsets became lexical to the current scope only. (59d0f9b).
Added the Any Hash case, which check if Any is a key in Hash. (5da1978).
Experimental support for lazy evaluation with the method Object.lazy. (4cc49f6, 0d73901).
Added the Array.freq_by which creates a frequency table from the mapped elements. (6b934f4).
The Did you mean? feature is now available for misspelled variable names at parse-time. (2fbe734).
Added the FileHandle.each_char method, to iterate over a file character by character. (3bc91b3).
Many internal simplifications. (cc64b91).
Improved the optimizer to cover data types. (bd8ec1a).
Simplified the code generation for the for-in loop. (03789d8).
Reduced a lookup for the init method in class initialization. (21dfbe1).
Reduced some overhead in block calls, making them about 25 faster. (ab0faa3).
Improved the formatting of error messages to be more human readable. (d8784dc).
The gather/take construct no longer creates a temporary copy of the array. (266b44e).
Optimized the algorithm which is internally used for the Did you mean? feature. (192e747).
Optimized the optimizer to use an O(1) algorithm for rule-matching, instead of O(n). (989feb2).
Optimized the following Array methods: and, diff, or, xor. (e9a49af, 53855dc,
aa2bf7e, 79ab66d).
Replaced the base pragma with the more lightweight parent in code generation of user-defined classes. (8980b26).
Forbidden the inheritance from structures. (2e1aeae).
nil, compared to any other object, is always lower. (6604cbe).
Removed the support for old class constants (ClassName::CONST). (20b2eb9).
the compilation in some cases with -c. (248e247).
the code generation for anonymous structures. (fe0546c).
a minor in parsing structures with recursive types. (f093f37).
the code produced by -Rperl in some special cases. (70de42a).
the RangeNum class

2.2307 Mar 2016 09:45
**minor feature:**
Auto-stringification for named parameters. (ccb6f3e).
Special methods ==, and are now overloadable. (366ccc5).
Added the "Did you mean?" feature, for non-existent method calls. (4128110).
Added the unary caret operator to create an exclusive range. (a16df42).
Added general support for matrix-iteration with the for-in loop. (2c57915 c16b95c).
Added the Array.slices(n) method, which returns a matrix with n elements per row. (bcc1190).
Better stringification of Block objects. (1bbb790).
Structure names are now deparsed as data types (834d232).
Better parsing of the if, while and for constructs. (9d3d3be).
Optimized and extended the for-in loop to work with any object. (68ff1cd).
Micro optimization in code generation for operator-like methods. (49c17f4).
All ranges became immutable objects. (ed0b8e2).
Removed the inellipsis operator (...). (afdf08c).
Bareword data types are now parsed correctly as data-type objects. (4e7c001).
Renamed the Object.super_join() method to Object.interpolate(). (e4b0c1b).
Forbidden the calling of pre-methods without parentheses (f0a56ef).
a minor-parsing in declaration of variables on multiple lines. (f9c252a).
a segmentation fault for integer division with non-integer operands. (3c904ac).
Half-a inside the Block.ffork() method. (badb582).

2.2208 Feb 2016 13:25
**minor feature:**
Added the Array.jaro_distance() method (4e91b02).
Added the Number.round() alias for Number.roundf() (a817703).
Added the Number.imod() and Number.ipow() methods (7088344).
Added the all and any methods inside the RangeNum class (a6657c3).
Added the Number.itimes iterator method (af3b989).
Added the Number.as_int() and Number.as_float() methods (f66c8e4 00b2fab).
Added support for multiple lines in interactive mode (c639a8a).
Added support for loading code from files in interactive mode (82c80e8).
Added support for saving an interactive session to a file (f52cedb).
Added the Hash.each_k and Hash.each_v aliases for Hash.each_key and Hash.each_value respectively. (dde9ed4).
Many optimizations inside the Number class (451ce51 7362990).
Significant improvements and simplifications inside the RangeNum class (f22587c 71f678f).
Improved the Number.rand() method to return random floats of a greater precision (af8ad0c).
Extended the Number.root() to accept Complex numbers as the nth root. (fbb1268).
Improved the Complex.cbrt() method to return a more accurate result (b9429bc).
Array.push and Array.unshift are slightly faster now (7b207f3).
Better stringification for very small values (bbc249f).
Inf.times is now a little bit faster and truly unbounded (ee1ed52).
Improved the Number.pow() method for negative integers to return the exact result (dce6459).
Extended the Number left-shift and right-shift operators to work with negative integers (d3c6ab7).
Minor optimization in code-generation for != and ! operators (36dee2f).
Extended the Block.fork() method to accept and pass parameters to a forked process (80051b2).
Number.roundf() is now implemented natively. (93ff7d7 79512a6).
The stringification of numbers is now also implemented natively (17a8925).
Changed the -P command-line switch to specify the precision in decimal digits (f66c8e4).
Sidef now runs inside a virtual environment, which prevents accidental namespace collisions (0b864cf).
The operands for and

2.2115 Jan 2016 16:45
**minor feature:**
Added stringification support for ranges (213ae43).
Classes can now inherit fields from structures (4db2844).
Added the FileHandle map and grep methods (8db434b).
Added support for block parameters with slurpy variables (cddb544).
Added the Number.irand() method to return a random integer (d44611c).
Added the Array.keys method to return the indices of the self array (6aba0f8).
Improved the NaN value to support all the basic operations (843375a).
Improved the -c command-line switch works more generically (5b02da0).
Faster integer check for numbers (325afb0).
Extended the Array.grep() method to support a regular expression as argument (8db434b).
Extended the initialization of Complex numbers to accept a string as a complex value (309dee2).
Extended the Number.is_prime() method to accept an optional parameter for accuracy (cbfd8d2).
Math::Big Float,Int,Rat objects returned by Perl modules, are now converted correctly (8350cd5).
Removed the -d command-line switch (beff0a8).
__BLOCK__ will no longer refer to pseudo-blocks (06d68d1).
Arguments to String methods are now strigified with string context (5c5ec44).
The original Block.fork method is now available as Block.ffork (e0b276d).
Minor -in parsing the post... operator followed by a newline (5a7ab18).
Numbers inside the Socket object are now unboxed correctly (c9c09f9).
Minor -in parsing default parameter values in block parameters (52f6e98).
Minor -inside the Sidef deparser for consecutive function calls (44f25bb).
a segmentation fault for n 0 and 0.divides(n) (202ef13).
Anonymous methods are no longer stored as part of the class methods (1181d62).

2.2003 Jan 2016 09:45
**minor feature:**
Switched from Math::Big Float,Int,Rat to Math:: MPFR,MPC,GMPz,GMPq (445a699).
Added support for initialization of numbers in different bases (dec506c).
Complex numbers and real numbers are now blended together (1a507bb).
Added the Inf and -Inf keywords to represent positive and negative infinity.
Added the NaN keyword to represent the Not a Number value (be1542b).
New methods inside the Number class, such as: fib, gamma, is_prime, primorial, etc.
Added the with(exp) ... statement, similar to that from Perl 6 (bd8c1da).
Added support for Unicode symbols in Math constants, such as Math::? (d67be5d).
Added the Number.base(n) method to return a number in a given base (33df118).
Added a new syntax for changing or declaring class variables (Class!name) (a86d4cb).
Better support for Complex numbers (b6ed0b9 0c85c73).
Extended the support for ranges with floating-point numbers (2faee2a).
Better stringification of numbers (e.g.: (100! + 1) / 2 will display the exact result) (a86d4cb).
Removed the Byte(s), Char(s) and Graph(s) built-in types (445a699).
Changed the behavior of // operator to mean integer division (d4199ad).
Redefined the behavior for Inf0 to return 1, instead of NaN (b9fc23f).
the String.count(regex) method to return correctly the number of matches (8affc32).

2.1327 Dec 2015 03:17
**minor feature:**
Auto evaluation-conversion for lazy-methods (ef52c90).
Added the Number.modinv() method (b049eb0).
Added the Object.bless method to return a blessed object in the self class (0603970).
Added the Array.each_slice(n, ... ) method (5e94052).
Added the Array.each_cons(n, ... ) method (203ce65).
Added experimental support for changing the global precision and accuracy of numbers (8157b53).
Optimized all the op-assign operators, such as +=, -=, etc... (2dd3ec7).
Simplified the code used in calling subroutines from Perl modules (0b786ec).
Improved the support for autovivification (4455a3f).
String.first() and String.last() will now accept a number as an argument (801ff02).
Optimized the String.match() and String.gmatch() methods (31f81c4).
Better dumping of regular expressions (32262a1).
Pair.first and Pair.second are now lvalues (93af122).
Optimized and improved the Array.combinations() method (be956e5).
Better translation of certain expressions (1e2133f).
Faster translation of strings with code-points between 127 and 255 (e7c3756).
Array.ft(from, to) is now considerably faster (3a127a8).
Minor performance improvement in stringification of Boolean values (0968745).
Renamed the built-in object SIG to Sig (42a1483).
Renamed Array.each_with_index to Array.each_kv (0cc0dcf).
Renamed Array.reduce_pairs to Array.pairmap (ce2fc7b).
Blocks will always be called as blocks, and never as functions (782e847).
In list assignments, the last lvalue is now returned (160c97b).
Unary operator - will now call the neg method, instead of negate (0621e50).
Number.range() with only one argument is no longer inclusive (6bc3074).
The __BLOCK__ keyword is now translated correctly as a block (572cabb).
the -c command-line switch to work when Sidef is installed (8b8c966).
the Convert.to_f() method to work with rational numbers (a07896d).
Flat lists as array indices will work as expected (5fa3c64).

2.1211 Dec 2015 03:18
**minor feature:**
Support for multiple dispatch (ab914f8).
Support for functional pattern matching (e756b97).
Support for class attributes with the has keyword. (7de49f0).
Auto-conversion of arguments from Perl callback functions (8c7debc).
Added the Array.last_by method (423f190).
Added the -k switch to keep track of potential unsafe interpretations (e31de40).
Added the Array.dig() and Hash.dig() methods (6ce5ad5).
Added the... preoperator to represent unimplemented code (b1604b3).
Added the Array.freq() and the Hash.map methods (ae25298).
Added the String.numbers and String.each_number methods (1f7991d).
Added the Hash.count method (59b595d).
Added the Bool.pick method which randomly returns true or false (d71f860).
Added the following Complex methods: root, roots, polars and reals (501b714 26f78d4).
Optimized the preand post++ and -- operators (ab914f8).
The operator != is slightly faster now (84483ef).
Improved the assertions to include the actual values (d584e60).
Improved the given/when construct (e9f70c7).
All the meta-objects are created directly inside the parser (80bae2e).
Better localization of the topic variable (_) (c723701 6c45643).
Array.rotate will always return a new array (606c837).
the deparsing of the bare Block keyword (754f102).
Deparsing code to Perl (with -Rperl) will now include binmode(STD*, ':utf8') (4a9ebf1).

2.1125 Nov 2015 06:05
**minor feature:**
Added the for var in array ... construct, to iterate over an array (436a730).
Added the cross ( X) and zip ( Z) meta-operators from Perl 6 (22f950b).
Added support for checking multiple return-types. (9998e5c).
Added the rational-division operator (//) which creates a Math::BigRat object (2eac143).
Added the Array.map_with_index method (3ae5182).
Added the String.prepend() which adds a sub-string in front of the self string. (6f5fefb).
Added the Array.fetch() and Hash.fetch() methods to fetch a value with a default value (5edff8a).
All variables are now block-scoped, instead of function-scoped. (3507cad).
Simplified and improved the local variables (4409629).
Extended the String.contains() method to support regular expressions. (87b8a4a).
Memoization of functions and methods is considerably faster. (6059550).
Array.sum() and Array.prod() will accept an argument as a starting value (775fe8f).
Generalized the Array.index() and Array.rindex() to work with objects of any type (d9b1608).
Optimized the Array.rotate() method (b73f61a).
Improved the support for assertions to display exactly where the assertion failed (0350534).
die and warn keywords will now display the file and the line number (8710936).
Improved greatly the -O1 optimization level to cover more constructs (b18f611 e3a1a1f).
Modified the read() built-in function to accept a message and a type. (de7537b).
do is no longer considered a keyword, unless it is followed by a pair of curly brackets.
Bare blocks can no longer be called with named parameters (3f492c1).
Minor -in deparsing block arguments with default values. (974f33d).
Minor -inside the parser regarding the declaration of variables (451f169).
nil values are now displayed correctly in interactive mode (-i) (adebde5).

2.1002 Nov 2015 02:25
**minor feature:**
All functions and methods are now closures.
The goto keyword and support for labels.
Support for global variables.
Localization support for magic variables.
Support for real-constants.
Support for do ... while (expr) support.
The inkeywords if and while.
The Grapheme and Graphemes built-in types.
Traits for functions and methods.
The Array.sort_by ... method (0687ff3).
Preand postdereference.
Better support for structures (struct Name ... ) (a353469).
More constants can now be declared at once.
Stricter rules for comparison operators.
Optimized the Array.uniq and Array.last_uniq methods.
Slurpy parameters now support default values (7bdfafe).
Better type-checking for typed parameters (ad1f961).
Better support for named parameters (8097b21).
Better support for declaration of variables with default values (5952210).
Method calls can now expand on multiple lines (c1dc82f).
eval() is considerably faster now.
Semicolons are now fully optional.
The regex variables ( 1, 2...) are gone. (1eaf761).
Removed the triple-equal (===) operator.
Removed the support for class def variables.
The gather/take construct is now recursive-friendly.
break(n) and next(n) no longer work (use goto instead).
The support for multiple dispatch is currently unimplemented.
0.11-EOL...2.10.
https://github.com/trizen/sidef2/commits/master.

0.11-EOL13 Oct 2015 16:05
**minor feature:**
Added experimental support for implicit block calls. (a0c1e81).
Added the Class.alias() method for creating aliases to methods. (3eea5a1).
the FileHandle.slurp() method to work with :utf8 layers in future version of Perl. (f46fe9b).

0.1017 Sep 2015 14:25
**minor feature:**
Added the Block.all and Block.any methods (6a39c5b).
Added the Array.index and Array.rindex methods (6da2ce7).
Added the following String methods: bin, oct, num (98e7a11).
Added the Match.join method to join the captured matches (087c773).
Added support to assign a value to a reference with dereferencing (d475f33).
Added the ClassInit.method and ClassInit.invoke methods (7fd6816).
Added the Number.atan and Number.atan2 methods (fba18cc).
Added the Sys.wait, Sys.fork and Socket.socketpair methods (6617f38).
Added the Range.map method for number ranges (00fc434).
Improved the -O3 optimization level (376d7bf, 72ca7d9).
Extended the Hash.default method to accept a block of code. (4522d5b).
Extended the Hash.delete method to delete more than one key (8a17915).
Extended the Number.range method to accept a third parameter (fa009ac).
Added auto-stringification for Match and Complex objects. (1428ebc 6dae437).
Hash.copy and Array.copy are now much faster and safer (86d9350).
Extended the op hyper-operator to work with arrays of different sizes (3b8612a).
Extended the smartmatch operator ( ) to work with Range Obj (f45a4c7).
Extended the MultiArr object to work with arrays of different sizes (0f4f985).
The output of backticks is no longer UTF-8 decoded (f369175).
Removed the camelCase method-aliases, along with other core changes (19ab31b).
Changed the behavior of the given/when construct to the smartmatch operator (ceecf82).
a critical related to the initialization of Math::BigFloat (9ee37d0).
Returned objects from module calls are now objectified correctly (43e1f00).
the Hash.flip method -- now it works correctly (86d9350).
w(...) arrays are now created dynamically at run-time (8f6e9e7).
The unary operator ? and ! will now work correctly on overloaded objects (41f9013).

0.0801 Aug 2015 17:17
**minor feature:**
What's new
Generalized the syntax for prefix method calls. (3828759 3f119d9)
Added the Block.pfork method, which is a lightweight version of Block.fork (24e928e)
Added the String.looks_like_number() method and others (33bf066)
Added the -C command line switch to check the syntax of a program (a5332b0)
Added the assert, assert_eq and assert_ne built-in keywords. (354e22e)
Added the s(...) and S(...) quotes (f527e18)
Changes
Modules are now executed in reversed parse order (4bd4f97)
Simplified the internal object system, among other core changes (48c1f1f b4da2e2)
Number.divmod() and some other methods will return a list instead of an array (d0fdf0f)
Added srand() after each fork to re-seed the random number generator (8fdb831)
Changed the behavior of the smartmatch operator for String String (0322aab)
Bug-fixes
Fixed a stack bug for variables initialized inside the condition of a while loop (d7eb89e)
Fixed a bug related to object stringification of various objects (814ae15)

0.0925 Jul 2015 06:05
**minor feature:**
Added support for nexting two or more loops with next(n). (b9b242e).
Added the Array.each_index ... method to iterate over the indices. (e950204).
Added the.dump method for user-defined classes. (758ab9c).
Added the Class.__class__ method to get the class of an object (502a5ec).
Added the FileHandle and DirHandle types. (5c80e36).
Added the.levenshtein method for String and Array objects. (f32aae1).
Added the.METHODS method for user-defined classes. (6122dd9).
Added the.method method for user-defined classes. (dbf29e5).

0.0707 Jul 2015 23:02
**major feature:**
Added support for nexting two more loops via next(n). (b9b242e)
Added the Array.each_index ... method to iterate over the indices. (e950204)
Added the .dump method for user-defined classes. (758ab9c)
Added the Class.__class__ method to get the class of an object (502a5ec)
Added the FileHandle and DirHandle types. (5c80e36)
Added the .levenshtein method for String and Array objects. (f32aae1)
Added the .METHODS methods for user-defined classes. (6122dd9)
Added the .method method for user-defined classes. (dbf29e5)
Improved the .METHODS method for built-in types. (aaa3382)
Improved the parsing of classes and the parsing of return types from functions. (5c80e36)
Performance improvements. (46b5379, 1a44f27)
Changed slightly the behavior of the smartmatch operator ( ) (b1d44e1)
Undefined method calls for user-defined classes are now fatal. (858420f)
File. and File.cmp no longer refers to File.compare (e060408)
Removed the following operators: ??, and . (dad6bd3)
Merged the PipeHandle object into FileHandle. (5c80e36)
Renamed has_method into respond_to for user-defined classes. (dbf29e5)
Fixed a minor related to array autovivification on slice creation. (3b7ee7e)
Minor fix for parsing type-constants. (966223c)

0.0620 Jun 2015 00:59
**major feature:**
Added functional style for method calls (#27) (19d18a9)
Added the Variable.defined() function/method (c155e2a)
Added parsing support for consecutive calls (e.g.: f()()) (f37f99e)
Added string and boolean context overload for user-defined classes (28de310)
Added the is_a and is_an methods to user-defined classes. (65340bf)
Added support for n() and i() to create arrays of numbers and integers (b01a5d1)
Added support for hash parameters and hash init variables (c6b240b)
Added the Complex.dump() method (e769eca)
Number.of now initializes a counter. (e.g.: 10.of i ... ) (f37f99e)
Block.fork() now uses Storable instead of Data::Dump (aaf657d)
Extended the Array.concat() method to accept any type of argument. (93bec83)
Improved the String.dump() method to work more nicely (d166fcc)
Many performance improvements and stability improvements. (8ea587c)

0.0503 Jun 2015 13:37
**major feature:**
Added the ClassInit += operator which inherits methods from a class.
Added experimental support for Sidef to Perl code conversion (sidef -Rperl).
Added the -O3 level of optimization which generates and runs native Perl code.
Added the Range.includes() method.
Added the Ref keyword type to represent a reference type.
Added the Array.any method which tests an array against an expression.
Added Math constants (example: Math::PI, Math::e, Math::ln2, ...)
Added support to access class parameters without specifying the self object.
Added the File.truncate() method which truncates a file to a given size.
Added the Array operator as alias for append and push.
Added the Sys.copy() method which clones any type of object.
Added the following given/switch operators: , ?? and ...