Skip to content
Tags give the ability to mark specific points in history as being important
  • 0.2.9
    b8a4dd01 · make distcheck fixes ·
    GNU ease.js 0.2.9 released
    
    This release succeeds v0.2.8, which was released 15 July, 2016.  There are
    no backwards-incompatible changes, but certain default behaviors have
    changed (see changes below).  Support continues for ECMAScript 3+.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages.  Features include
    simple and intuitive class definitions; classical inheritance;
    abstract classes and methods; traits as mixins; interfaces; public,
    protected, and private access modifiers; static and constant members;
    and more.  Please see the comprehensive documentation at
    <https://www.gnu.org/s/easejs/manual.html> for more information,
    examples, and implementation details.
    
    Changes between 0.2.8 and 0.2.9
    -------------------------------
    * Class constructors are now virtual by default.  The manual has been
      updated with information about this change.
    
    * Method overrides are now implicitly virtual.  This is consistent
      with other object-oriented languages and solves the problem with
      breaking stackable traits if the author forgets to supply `virtual'
      to an overridden (intended-to-be-stackable) method.  The manual has
      been updated.
    
    * New methods `Class.assertInstanceOf' and its alias `Class.assertIsA' have
      been added to eliminate boilerplate of enforcing polymorphism.  They are
      like `Cass.isInstanceOf' and `Class.isA' respectively, but will fail by
      throwing a TypeError.  The manual has been updated to include these two
      methods, along with some rewording of the containing section.
    
    * `Class.extend(Base)', where `Base' is a class, will now assume that you
      forgot the class definition and throw an error rather than trying to use
      `Base' as the definition object.
    
    * [bugfix] Using `#constructor' (alias of `#__construct') in Error subtypes
      will no longer complain about an attempt to redefined `#__construct'.
    
    * `Constructors' section of manual has been reworded and references to
      poor practices (static classes, Singletons) have been removed.
    
    * Manual (and website) examples modernized to use ECMAScript 6 syntax.
      Users must still write ES3 syntax if they want to use ease.js in ES3
      environments, of course.
    
    * INSTALL file added to repository (removed from .gitignore).  This
      was previously (and unintentionally) only available in the
      distribution archives.
    
    * Copyright years updated on combined and minified distributions.
    
    This release contains a number of bugfixes for traits, which is stable but
    still under development:
    
    * [bugfix] Methods of trait class supertypes now apply with the
      correct context.  (Feature added in 0.2.7)
    
    * [bugfix] Traits extending classes may now be named using the
      `Trait('Name').extend(C, dfn)' notation.  (Feature added in 0.2.7)
    
    * [bugfix] Can now mix in traits with class supertypes that define
      constructors.  (Feature added in 0.2.7)
    
    * [bugfix] `this.__inst' in traits now correctly references the object
      mixed into; previously, this was `undefined'.
    
    I apologize for the (extreme) delay in this release: the process was stalled
    for many months while waiting for certain legal documents after my employer
    was purchased by another company.
    
    Release notes for past releases are available at:
      https://www.gnu.org/software/easejs/release-notes.html
    
    More information, including an online manual, can be found on GNU's
    website:
      https://gnu.org/software/easejs
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.9.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.9.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.9.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys D6E9B930028A6C38F43B2388FEF635745E6F6D05
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    http://www.gnu.org/software/easejs/whyfreejs.html
    
    Explore why online freedoms are of practical importance with
    my LibrePlanet 2016 talk:
      https://media.libreplanet.org/u/libreplanet/collection/restore-online-freedom/
    
  • 0.2.8
    GNU ease.js 0.2.8 released
    
    This is a minor release introducing transparent Error subtyping.
    
    This release succeeds v0.2.7, which was released 26 October, 2015.  There
    are no backwards-incompatible changes; support continues for ECMAScript 3+.
    
    Changes between 0.2.7 and 0.2.8:
      * Transparent Error subtyping
        - Extending an ECMAScript Error constructor will transparently produce a
          Error subtype that performs all necessary boilerplate and strips
          itself from the stack trace.  See manual for more information.
    
      - Manual changes:
        - Added "Error Subtyping" section.
        - Removed recommendation to always use `public' keyword when defining
          public methods (which is the default), and warning that it might be
          required in the future.  Omitting is fine (and preferred by some).
        - Added "Class Caveats" section; documented `this.__inst'.
    
    Release notes for past releases are available at:
      https://www.gnu.org/software/easejs/release-notes.html
    
    More information, including an online manual, can be found on GNU's website:
      https://gnu.org/software/easejs
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftpmirror.gnu.org/easejs/easejs-0.2.8.tar.gz
      https://ftpmirror.gnu.org/easejs/easejs-0.2.8.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.8.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages.  Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more.  Please see the
    comprehensive documentation at <https://www.gnu.org/s/easejs/manual.html>
    for more information, examples, and implementation details.
  • 0.2.7 Release: 0.2.7
    GNU ease.js 0.2.7 released [stable]
    
    This is a minor release introducing additional features for classes and
    traits.
    
    This release succeeds v0.2.6, which was released 14 August, 2015.  There are
    no backwards-incompatible changes; support continues for ECMAScript 3+.
    
    Changes between 0.2.6 and 0.2.7:
      * ES6-style constructor method supported.
      - Directly invoking the easejs object with a constructor will now perform
          the equivalent of a Class.extend( ctor, {} ).
      - Documentation now compiles with Texinfo 5.2.
    
      Trait support is currently under development and will be undocumented
      until v0.3.0; it is included here as a preview.  The implementation is
      stable and comprehensively tested, but is incomplete (see TODO).
    
      * [preview] Traits can now override public and protected methods of class
          supertypes.
      - [preview] Error now provided when attempting to declare a mixin that is
          not a trait.
    
    Release notes for past releases are available at:
      https://www.gnu.org/software/easejs/release-notes.html
    
    More information, including an online manual, can be found on GNU's website:
      https://gnu.org/software/easejs
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.7.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.7.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.7.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at <https://www.gnu.org/s/easejs/manual.html>
    for more information, examples, and implementation details.
    
  • 0.2.6
    4a617817 · Browserify fix ·
    GNU ease.js 0.2.6 released [stable]
    
    This is a minor release, focusing on a single compatibility issue.
    
    This release succeeds v0.2.5, which was released 28 May, 2015.  There are no
    backwards-incompatible changes; support continues for ECMAScript 3+.
    
    Changes between 0.2.5 and 0.2.6:
      * `require` paths in index.js changed to be compatible with Browserify
        - Browserify will now properly recognize all require'd modules;
          previously, it was halting after processing only index.js.
    
    Historical release notes are available at:
      https://www.gnu.org/software/easejs/release-notes.html
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.6.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.6.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.6.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
  • 0.2.5
    GNU ease.js 0.2.5 released [stable]
    
    This is a feature release, focused primarily on the continued development of
    traits.
    
    This release succeeds v0.2.4, which was released 07 Aug, 2014.  There are no
    backwards-incompatible changes; support continues for ECMAScript 3+.
    
    Changes between 0.2.4 and 0.2.5:
      - [doc] Manual has been updated to reflect an implementation detail that
        causes `this.__super` to remain in scope after a call to a private
        method.
        - This is not a bug, but is undefined behavior.
    
      Trait support is currently under development and will be undocumented
      until v0.3.0; it is included currently as a preview and is functional and
      comprehensively tested, but is incomplete.  For a list of outstanding
      tasks, see `README.traits`.
    
      * [preview] Traits may now "extend" classes.
        - Extending a class C denotes compatibility with C's interface: the
          trait may then only be mixed into C or its subtypes.
        - Extending traits is not yet supported, but will be in the next
          release.
        - Releated test cases:
          - test/Trait/{Abstract,ClassExtend}Test.js
    
      - [preview] Staging object returned by `#use` calls---representing an
        eventual mixin---now statisfy the `Class.isClass` predicate.
    
    Examples of Trait use can be found in the extensive test cases (test/Trait)
    and in the resources found on the ease.js homepage:
      https://www.gnu.org/software/easejs/#traits
    
    Historical release notes are available at:
      https://www.gnu.org/software/easejs/release-notes.html
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.5.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.5.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.5.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
  • 0.2.4
    GNU ease.js 0.2.4 released [stable]
    
    This is a maintenance release correcting a number of bugs---most of which
    were introduced in v0.2.3---addressing primarily ECMAScript 3
    incompatibilities. Users needing to support ES3 environments (notably,
    IE<=8) should consider v0.2.3 to be broken.
    
    v0.2.3 was released last week on Jul 28.
    
    Changes between 0.2.3 and 0.2.4:
      * [bugfix] method.super references in ease.js and test cases are now
        ES3-compatible
    
      * [bugfix] The Global prototype introduced in v0.2.3 used an
        implementation that IE<=8 did not support; now using an alternative
    
      - [bugfix] Interface.isInstanceOf now correctly operates as documented in
        the interoperability section of the manual
        - When passed an object whose constructor is not an ease.js class, it
          now falls back to Interface.isCompatible (as it should have).
    
      - [bugfix] Corrected test broken by Node.js 0.10.27
        - See commit cef45cd0 for details on what changed within Node.js.
    
      Trait support is currently under development and will be undocumented
      until v0.3.0; it is included currently as a preview and is functional and
      comprehensively tested, but incomplete.
    
      * [preview] [bugfix] Non-argument traits now apply an empty array to
        `__mixin` instead of `undefined`, which is unsupported by ES3
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.4.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.4.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.4.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
  • 0.2.3
    GNU ease.js 0.2.3 released [stable]
    
    This is the fourth release of the 0.2 series as part of the GNU project; it
    is primarily a maintenance release, but does introduce a significant
    (preview and undocumented) feature---parameterized traits.  A generic
    `super` method has also been added to satisfy more sophisticated subtyping
    that `__super` alone cannot handle.
    
    Changes between 0.2.2 and 0.2.3:
      * `super` method now provided by method override wrapper
        - Allows invoking arbitrary method on supertype to handle cases where
          `__super` is not sufficient
        - Documentation added to manual under the heading of ``Arbitrary
          Supertype Method Invocation''
        - Anyone relying on undocumented internal properties to achieve this
          effect should now use this method instead.
    
      - ease.js and its test cases now conform to ES5 strict mode
    
      - Began ease.js metadata storage refactoring; those relying on
        undocumented properties (e.g. ___$$*$$) should take note
        - Please do not rely on undocumented behavior
    
      - Test runner now passes option arguments to Node.js
        - e.g. --debug and --debug-brk
    
      - [bugfix] Subtypes of prototype subtypes no longer clobber ease.js
        metadata
    
      Trait support is currently under development and will be undocumented
      until v0.3.0; it is included currently as a preview and is functional and
      comprehensively tested, but incomplete.
    
      * [preview] Parameterized traits
        - C' = C.use( T( ...params ) ); ...params passed to T#__mixin by
          reference upon instantiation of C'
        - See NEWS (or website blog) and test cases for rationale and examples
    
      - [preview bugfix] Corrected __length metadata on trait virtual proxies
    
      - [preview bugfix] Corrected virtual non-overridden trait methods
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.3.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.3.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.3.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
  • 0.2.2
    GNU ease.js 0.2.2 released [stable]
    
    This is the third release of the 0.2 series with a focus on interoperability
    with vanilla ECMAScript/JavaScript. Three bugfixes address potential issues
    when dealing with native prototypes. Additionally, GNU ease.js now considers
    non-ease.js objects to adhere to an interface (without having to implement
    it) so long as the object implements all methods and the proper number of
    arguments, which allows users to integrate with ease.js classes without
    having to use ease.js themselves. It further allows defining interfaces for
    existing objects to ensure API conformance. Finally, to make definitions
    more concise and more natural to prototypal developers, underscore-prefixed
    members are now implicitly private; this can be overridden with an explicit
    access modifier.
    
    Changes between 0.2.1 and 0.2.2:
      * [doc] Added interoperability chapter to manual.
    
      * Members with an underscore prefix (e.g. _foo) are now implicitly
        private.
        - This can be overridden by explicitly specifying an access modifier.
        - Follows common conventions in modern object-oriented languages and
          permits concise definitions that are more natural to users of
          JavaScript's native prototype model.
        * This is backwards-incompatible if there is code that accesses
          underscore-prefixed members as public or protected without explicitly
          providing the visibility keyword in the member definition.
    
      * Interfaces are now interoperable with vanilla ECMAScript objects
        (including prototypes).
        - This allows for runtime polymorphism within ease.js methods without
          having to use ease.js.
        - Also allows creating interfaces for pre-existing objects (e.g. W3C DOM
          objects) to ensure adherence to an API.
    
      * Generated classes now have an `asPrototype` method for use as a
        constructor prototype.
        - Defers execution of class constructor, allowing prototypal subclassing
          (for those preferring not to use ease.js, but wish to extend a class
          generated from it).
    
      * [bugfix] Classes inheriting from prototypes will now properly proxy
        assignments to properties on the prototype.
        - Note that ease.js can only detect properties that are initialized in
          the prototype's constructor; otherwise, you must manually declare it
          public within the class definition to ensure proper proxying.
    
      - [bugfix] Classes inheriting from prototypes will now properly handle
        method overrides.
        - Parent prototype methods are implicitly virtual, unlike ease.js
          methods; see test/Class/InteropTest.js for rationale.
    
      - [bugfix] Class.isInstanceOf once again attempts blind native instanceof
        without preemptive function check.
        - v0.2.1 first checked to see if the argument was a function to prevent
          use of a try/catch; unfortunately, the proprietary browser IE9+ seems
          to treat certain DOM constructors (e.g. HTMLElement) as objects rather
          than functions, yet the `instanceof` keyword works with them. This
          reverts that change.
    
      Trait support is currently under development and will be undocumented
      until v0.3.0; it is included currently as a preview and is functional and
      comprehensively tested.
    
        - [preview] Named trait staging of the form Trait("Foo") implemented
          (analogous to Class("Foo")) and will no longer throw an obscure error.
    
        - [preview] Trait API now exposed in combined source file.
          - The v0.2.0 release exposed Trait via index.js, but the combined file
            (intended for use client-side) was overlooked.
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.2.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.2.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.2.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    Free Your JavaScript!
    ---------------------
    <http://www.gnu.org/software/easejs/whyfreejs.html>
    
    See the FSF's Free JavaScript Campaign at
      <https://fsf.org/campaigns/freejs>.
    
    Are you a JavaScript developer? Consider joining the campaign's JavaScript
    Developers Task Force mailing list at
      <https://lists.gnu.org/mailman/listinfo/js-devs-task-force>.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
  • 0.2.1
    1ca7e359 · Version bump 0.2.1 ·
    GNU ease.js 0.2.1 released [stable]
    
    This is a maintenance release for the 0.2.0 series, including performance
    enhancements and copyright assignment to the FSF. The copyright assignment
    will allow the Free Software Foundation to enforce the project licenses and
    ensures that GNU ease.js will always remain free (as in freedom).
    
    Changes between 0.2.0 and 0.2.1:
      * [copyright] Copyright assigned to the Free Software Foundation
      * Private methods are no longer wrapped by ease.js
        - There is no longer a small performance hit for using private methods;
          they act as normal function calls on the prototype chain.
        - Will not thwart tail call optimization attempts (when implemented by
          engines).
      - Various v8 optimizations to resolve instances of unoptimized code in JIT
        engine
      - Removal of unnecessary proxy fallback code for a buggy proprietary web
        browser
      - Performance test cases now output data in a generic format
        - Began HTML report generation; nothing special yet.
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.1.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.1.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.1.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
    Thank GNUs
    ----------
    Thanks to Donald Robertson III for his help and guidance during the
    copyright assignment process.
    
  • 0.2.0
    Announcing GNU ease.js v0.2.0 and the Importance of Free JavaScript
    
    I am pleased to announce version 0.2.0 of GNU ease.js, the first of many
    releases as part of the GNU project. This release contains exciting new
    features, a couple bug fixes, and extensive test case cleanup. The project
    has also been relicensed under the GNU GPLv3+ to help in the fight against
    non-free JavaScript (detailed below).
    
    Changes between 0.1.1 and 0.2.0:
      * [license] Relicensed under the GPLv3+ (previously LGPLv3+)
      * [bug fix] this.__super now mirrors stack rather than being clobbered
          after return from an ease.js method call
      * [bug fix] Protected member overrides of super-supertypes are now
          properly handled
      * [preview] Support for traits as mixins
        - This is an initial development preview of trait/mixin support
          (motivated heavily by Scala) and is currently undocumented in the
          manual.
        - Complete documentation will be available once remaining trait TODOs
          are addressed; until that time, see test/Trait/*Test.js for
          comprehensive examples and rationale. Performance tests are available
          in the test/perf directory for comparison with non-trait usage.
        - The implementation is stable, but not yet complete; see README.traits
          for more information.
      - Proxy methods and the associated `proxy' keyword are now documented
          (proxies were introduced in v0.1.1)
      + All older non-performance JS test cases are now part of the new suite
        - Extensive test cleanup and consistent formatting
        - All tests now contain rationale (as part of preceding comment block)
      - Now uses autotools; see README for instructions
      * v0.1 (LGPL'd) series is now unmaintained; users are encouraged to
          upgrade to 0.2.0 and be mindful of the terms of the new license
    
    The project's new home is now at <https://www.gnu.org/software/easejs>;
    easejs.org now redirects to the appropriate page, and so you should not need
    to update your bookmarks.
    
    Getting GNU ease.js
    -------------------
    Here are the compressed sources and a GPG detached signature[*]:
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.0.tar.gz
      https://ftp.gnu.org/gnu/easejs/easejs-0.2.0.tar.gz.sig
    
    Alternative download options are available at:
      http://www.gnu.org/software/easejs/download.html
    
    [*] Use a .sig file to verify that the corresponding file (without the
    .sig suffix) is intact.  First, be sure to download both the .sig file
    and the corresponding tarball.  Then, run a command like this:
    
      gpg --verify easejs-0.2.0.tar.gz.sig
    
    If that command fails because you don't have the required public key,
    then run this command to import it:
    
      gpg --keyserver keys.gnupg.net --recv-keys 8EE30EAB
    
    and rerun the 'gpg --verify' command.
    
    About GNU ease.js
    -----------------
    GNU ease.js is a classical object-oriented framework for JavaScript,
    intended to eliminate boilerplate code and "ease" the transition into
    JavaScript from other object-oriented languages. Features include simple and
    intuitive class definitions; classical inheritance; abstract classes and
    methods; traits as mixins; interfaces; public, protected, and private access
    modifiers; static and constant members; and more. Please see the
    comprehensive documentation at
    <https://www.gnu.org/software/easejs/manual.html> for more information,
    examples, and implementation details.
    
    The Importance of Making JavaScript Code Free
    ---------------------------------------------
    [For more information on the FSF's Free JavaScript campaign, please see
    <http://www.gnu.org/philosophy/javascript-trap.html>.]
    
    Web pages increasingly include JavaScript code, which raises the same
    ethical concerns as software written in any other language: Non-free
    JavaScript can rob you of your right to study, modify, and share the
    software that you are running.  Unlike traditional software, JavaScript
    usually enters your machine without prompting and often without your
    knowledge---the simple act of visiting a web page may install and execute
    a non-free program within your web browser.
    
    JavaScript provides an often frictionless cross-platform distribution
    mechanism that can be exploited without your permission; this amplifies
    the effects of some of the most insidious anti-features, such as spying
    on your activities and tracking your movements.  If a web page executes
    non-free code, how are you able to audit it (or have someone else do so
    on your behalf) to ensure that it is not malicious?  Further, how are
    you or others able to modify the software to remove the malicious code?
    (Unfortunately, the latter can be complicated even with free JavaScript,
    but it can be done.)
    
    But non-malicious programs sometimes need changes too.  You deserve
    control over all software that runs on your computer; why should you
    sacrifice this freedom simply because JavaScript creates the illusion
    of remote execution?
    
    How many web sites have you visited today that download JavaScript
    onto your computer?  How many of them respect your freedoms?  I chose
    to license ease.js under the GPLv3+ because I believe that non-free
    JavaScript should be eliminated, not enabled.  Please help to spread
    the word and join me in writing free JavaScript; without it, we will
    have an Internet that is locked away from free software users; this is
    not the spirit in which the Internet was created.
    
    More information on the JavaScript trap is available here:
      <http://www.gnu.org/philosophy/javascript-trap.html>.
    
    To join in on the FSF's Free JavaScript campaign:
      <https://fsf.org/campaigns/freejs>
    
    More information on free software and its freedoms:
      <http://www.gnu.org/philosophy/free-sw.html>
    
    Thank GNUs
    ----------
    Special thanks to Brandon Invergo for his help during the GNU submission
    process and for his auto{conf,make} advice and patches; RMS for extensive
    proofreading and advice on "The Importance of Making JavaScript Code Free";
    and the many others at the FSF and GNU Project that were involved in this
    process.
    
  • 0.1.1
    1b7a4881 · Version bump: 0.1.1 ·
    Version 0.1.1 release
    
    This release primarily addresses a fix (partial implementation) for
    ES5 getter/setter 'this' bindings, but does sneak in a couple other things.
    
      - [bugfix] Getter/setter 'this' binding now properly binds to the private
        visibility object (just as methosd do)
      - [bugfix] Documentation typo correction regarding class dfn keywords
      - [bugfix] Corrected warning console output (invocation was incorrect)
      - [bugfix] Corrected exception handling in XUnit-style tests
    
      - Project is now hosted on Savannah; copyright notices, etc have been
        added/corrected in order to comply with the project hosting guidelines.
      - Preliminary 'proxy' keyword support. Incomplete and undocumented; see commit
        d84b86 for more details.
      - Added chk-linelen tool
      - Added doc-html target
      - It is an ongoing effort to convert old test cases over to the new style
    
    As mentioned in 79cbc7, the getter/setter implementation will be completed with
    regards to overrides, the abstract keyword, proxies and method hiding at a later
    (hopefully soon) date; this bug fix should be sufficient for the majority of
    uses and corrects a major flaw. (Please note that the bug only affected ES5
    getters/setters.)
    
    Please see the commit messages between this tag and the last for more detailed
    information.
    
  • 0.1.0
    First release
    
    Happy holidays and happy new year from ease.js
    
    This project has been a wonderfully rewarding experience. It has allowed me to
    explore (in agonizing detail) the depths of JavaScript's prototype model and
    gain a much greater understanding of the language itself. ease.js evolved from a
    simple script to make the life of myself and my coworkers simpler ("ease" us
    into Classical OO in JS) into a full-scale project that is now just over a year
    old. While the initial design was fairly simple, I now find that I'm left with
    more implementation ideas than I am actual implemented features.
    
    ease.js is still very young. v0.1.0 represents an initial step in the life of
    the project - getting it out there for people to use and observe; allowing
    others to test the waters. There is a long road ahead and many exciting features
    planned for the project. Thus far, it has far exceeded my goals and expectations,
    but there is much work to be done.
    
    I hope that this project is well-received among developers in the JavaScript
    community. It touches upon what many consider to be a sensitive subject. Some
    firmly believe that Classical OOP should be left out of JavaScript and that one
    should instead stick to its prototypal model. While I fully respect the model,
    and it does certainly have powerful applications, there are also situations
    where the Classical OOP paradigm is also appropriate (some would argue more
    appropriate). I have found ease.js to be invaluable during the development of
    the project for which it was designed (software for my current employer). It has
    allowed both myself and my coworkers to continue using a development model we
    are familiar with, while exploring and making use of other paradigms where they
    are appropriate. We have been able to do so without having to explore other
    languages that support Classical OOP (for example, GWT, which compiles Java into
    JavaScript).
    
    It is important to understand that ease.js simply opens up, with greater
    flexibility and simplicity, another paradigm which is closely related to the
    Prototypal model (they are both Object-Oriented). One does not have to make use
    of it should they prefer a different paradigm, even if the libraries they use
    are written using ease.js. Ultimately, ease.js has to work with the restrictions
    provided by the language. As such, one can think of ease.js as a prototype
    builder. Each "class" created with ease.js is simply a prototype and can be used
    in conjunction with any other JavaScript code. The reverse is also true - you
    can use your existing code with ease.js and ease.js is capable of extending from
    existing prototypes as if they were classes. Think of ease.js like a tool, /not/
    a restriction. In fact, it would be bad practice to limit yourself to what
    ease.js provides. JavaScript provides powerful features of its own. Therefore,
    if you are using ease.js to aid in transition to JavaScript, be sure that you
    continue to explore JavaScript itself.
    
    One should also keep in mind that ease.js, while trying to maintain a Classical
    Object-Oriented model that developers from common languages like Java, PHP, C++,
    etc will be used to, did have to make certain design decisions that make sense
    when working with JavaScript. Certain additional decisions were also made, after
    great research (the majority of the time spent on this project was on paper, not
    at the keyboard), that may set ease.js aside from other languages when getting
    into finer details. While any Classical Object-Oriented developer should be able
    to jump in with little effort and even little understanding of JavaScript, you
    are still encouraged to take a look at the manual (http://easejs.org) and ensure
    that you have a firm understanding of both what ease.js is doing and what it is
    capable of doing. It also helps to take a look at the developer portion of the
    documentation (Appendix B - Implementation Details / Rationale) to get a better
    grasp on what ease.js is doing behind the scenes to better structure and
    optimize your code. Even better, feel free to browse through ease.js's source
    code and maybe even hack at ease.js yourself. See README.hacking for more
    information on contributing to the project.
    
    As was already mentioned, ease.js is under active development. Feel free to
    check out the bugs/issues/feature requests on the website (http://easejs.org) to
    see what is outstanding. If you find that you want a feature that isn't listed,
    feel free to request it (it will, of course, have to be given careful
    consideration to ensure it fits in line with the goals of the project). Since
    the project will be changing so rapidly, I encourage you to keep checking back,
    or keep a local copy of the Git repository to pull on occasion. Keep your eye
    out for a mailing list as well.
    
    As one can see by reading over this tag message, the Git repository itself is
    used in place of a blog (perhaps some script will be developed in the future to
    put all important commit/tag messages conveniently online much like a blog). One
    can easily see long commit messages (shorter messages are unlikely to be
    entries) by using `git log --log-size`. Tag messages can be shown with `git tag
    -nN`, where N is the number of lines to be displayed.
    
    One final mention is in order as to why this is the first release of the
    project, over a year after it began. An inspection of the git repository will
    yield, at this point, but one tag - this one. Although the repository has been
    public during the entire course of its development (ease.js can be considered to
    follow the Bazaar development model), ease.js has not been advertised to anyone.
    I wished for the project to remain mostly under wraps until the first release.
    This was for a very important reason - I did not want sudden API changes and any
    potential incomplete features or bugs to stifle adoption or perception of the
    project. With the release of v0.1.0, I can confidently say that the API has been
    solidified and that backwards compatibility will be maintained throughout all
    future releases, unless slowly deprecated over a number of major or minor
    releases.
    
    With that said, more information can be found in the manual, which has become a
    project of its own. If you've read this far, thank you for your interest in the
    project. I hope you find it useful in bringing the benefits of Classical OOP to
    JavaScript.