0.218 2023-06-03
  [Requirement Changes]
    * Require SPVM::Sys 0.520.
0.217 2023-06-01
  [New Features]
    * Add IO::Socket#sendto method.
    * Add IO::Socket#recvfrom method.
  [Test Improvement]
    * Add tests for IO::Select using a test HTTP server.
  [Incompatible Changes]
    * Remove an argument of IO::Socket#shutdown method.
      [Before]
      method shutdown : void ($sockfd : int, $how : int);
      
      [After]
      method shutdown : void ($how : int);
    * IO::Socket#close method throw an excetpion if the socket is not opened.
    * Remove IO::Socket#peername field. The return value of peername method is not cached.
    * Remove the argument $to of IO::Socket#send method.
      [Before]
      method send : int ($buffer : string, $flags : int = 0, $to : Sys::Socket::Sockaddr = undef, $length : int = -1, $buf_offset : int = 0);
      [After]
      method send : int ($buffer : string, $flags : int = 0, $length : int = -1, $buf_offset : int = 0);
  [Changes]
    * The following method in IO::Socket class becomes public.
      
      socket
      connect
      listen
      bind
      accept
  [Requirement Changes]
    * Require SPVM::Sys 0.517.

0.216 2023-05-29
  [Requirement Changes]
    * Require SPVM::Sys 0.516.
  [New Features]
    * Add IO::Poll class.
0.215 2023-05-24
  [New Features]
    * Add IO::Dir class.
  [Requirement Changes]
    * Require SPVM::Sys 0.515.
    
0.214 2023-05-21
  [Imcompatible Changes]
    * handles field in IO::Select is renamed to fds_list.
    * The type of add method in IO::Select is changed from int to void.
    * The type of remove method in IO::Select is changed from int to void.
    * handles method in IO::Select is renamed to fds.
  [New Features]
    * Add count method to IO::Select class.
    * An argument in IO::Select#can_read method becomes an optional argument. Negative value means block indefinitely.
      [Before]
      method can_read : int[] ($timeout : double);
      
      [After]
      method can_read : int[] ($timeout : double = -1);
      
    * An argument in IO::Select#can_write method becomes an optional argument. Negative value means block indefinitely.
      [Before]
      method can_write : int[] ($timeout : double);
      
      [After]
      method can_write : int[] ($timeout : double = -1);
      
    * An argument in IO::Select#can_has_exception method becomes an optional argument. Negative value means block indefinitely.
      [Before]
      method can_has_exception : int[] ($timeout : double);
      
      [After]
      method can_has_exception : int[] ($timeout : double = -1);
      
0.213 2023-05-20
  [Imcompatible Changes]
    * stream field in IO::File is renamed to FileStream.
    * input_file_nubmer field in IO::File is renamed to InputLineNumber.
    * close method in IO::File set FD field to -1, instead of setting FileStream to undef.
    * Change the following methods in the IO::File.

      -  static method new : IO::File ($file_name : string = undef, $open_mode : object of string|Int = undef, $perm : int = -1);
      +  static method new : IO::File ($file_name : string = undef, $open_mode : string = undef);

      -  static method new_from_fd : IO::Handle ($fd : int, $open_mode : string = undef);
      +  static method new_from_fd : IO::Handle ($fd : int, $open_mode : string);

      -  method open : void ($file_name : string, $open_mode : object of string|Int, $perm : int = -1);
      +  method open : void ($file_name : string, $open_mode : string);
    * Remove printflush method from IO::File.
    * Remove set_input_line_number from IO::File.
  [Bug Fix]
    * Fix the bug that AutoFlush option does not work .
0.212 2023-05-17
  [Buf Fix]
    * Fix the bug that IO::Socket::INET uses IPv6 addrinfo.
  [New Features]
    * Add the IO::Socket::INET6 class.
  [Imcompatible Changes]
    * The default value of Listen option is changed from 5 to -1.
    * "Blocking" option is removed from IO::Socket because socket is always non-blocking to work with goroutine.
    * Remove socketpair method in IO::Socket class.
    * socket method in IO::Socket become protected, and the doc is removed.
    * connect, listen, bind, accept methods in IO::Socket become protected, and the docs are removed.
    * Remove new_from_instance from IO::Socket, IO::Socket::IP, IO::Socket::Unix.
    * fd field in IO::Handle is renamed to FD.
    * autoflush field in IO::Handle is renamed to AutoFlush.
    * Blocking field is moved from IO::Socket to IO::Handle.
    * Remove sysread and sysread method from IO::Handle and IO::Socket.
    * trancate method in IO::Handle class throws excetpion. This implementation is moved to IO::File.
    * sync method in IO::Handle class throws excetpion. This implementation is moved to IO::File.
0.211002 2023-12-07
  [Prerequirement Changes]
    * Require SPVM::Sys 0.510.
0.211001 2023-11-18
  [Internal Changes]
    * Do not use Sys->select for the future breaking backword compatible.
0.211 2023-11-18
  [Incompatible Changes]
    * The return types of the following methods becomes void.
      [IO::Handle]
        sync
        print
        printf
        say
        close
        truncate
      [IO::File]
        close
        flush
        printflush
        open
        fdopen
      [IO::Socket]
        close
        setsockopt
        connect
        listen
        bind
        shutdown
        socket
        
    * Remove the set_sockopt method from the IO::Socket class.
    * Remove the getsockopt method from the IO::Socket class.
    * The type of Timeout field in the IO::Socket becomes double.
  [Changes]
    * The write method in the IO::File returns written length.
0.210 2023-11-18
  [Prerequirement Changes]
    * Require SPVM::Go 0.005.
0.209 2023-11-16
  [Prerequirement Changes]
    * Require SPVM::Sys 0.497.
    * Require SPVM::Go 0.003.
  [New Features]
    * Add $lengtht and $buf_offset argument to the send method in the IO::Socket class.
      
      method send : int ($buffer : string, $flags : int = 0, $to : Sys::Socket::Sockaddr = undef, $length : int = -1, $buf_offset : int = 0);
      
    * Add $buf_offset argument to the recv method in the IO::Socket class.
      
      method recv : int ($buffer : mutable string, $length : int = -1, $flags : int = 0, $buf_offset : int = 0);
      
  [Internal Changes]
    * The the read method in the IO::Socket calls revc method.
    * The the write method in the IO::Socket calls send method.
    * The the sysread method in the IO::Socket calls revc method.
    * The the syswrite method in the IO::Socket calls send method.
  [New Features and Incompatible Changes]
    * The socket of IO::Socket is set to non-blocking mode.
    * IO::Socket supports goroutine of Go.
0.208 2023-09-11
  [Prerequirement Changes]
    * Require SPVM::Sys 0.490.
  [Incompatibe Changes]
    * The following methods are moved from the IO::File class to the IO::Handle class.
      
      method sync : int ();
      method stat : Sys::IO::Stat ();
      method truncate : int ($legnth : long);
    
    * The sync method in the IO::Handle class is changed. If succedd, returns 1.
    
    * The following methods in IO::File class are changed.
    
      -  static method new : IO::File ($file_name : string = undef, $open_mode : string = undef);
      +  static method new : IO::File ($file_name : string = undef, $open_mode : object of string|Int = undef, $perm : int = 0);
      
      -  method open : void ($file_name : string, $open_mode : string);
      +  method open : int ($file_name : string, $open_mode : object of string|Int, $perm : int = 0);
    
    * The write method in the IO::Handle return if succedd.
    
    * The following methods in the IO::Socket class are changed.
    
      +  method sockopt : int ($level : int, $optname : int);
      
      +  method set_sockopt : int ($level : int, $optname : int, $optval : int);
      
0.207 2023-09-04
  [Prerequirement Changes]
    * Require SPVM::Sys 0.486.
    * Require SPVM 0.989040.
  [New Features]
    * The IO::Socket::UNIX class is added.
  [Changes]
    * The implementation of fileno method is improved.
    
  [Incompatibe Changes]
    * input_output_number is incremented.
    * The following fields and methods in the IO::Socket class are added, deleted, or changed.
      
      -  has timeout : protected ro int;
      +  has Timeout : protected int;
      +  method timeout : int ();
      
      -  has sockdomain : protected ro int;
      +  has Domain : protected int;
      +  method sockdomain : int ();
      
      -  has socktype : protected ro int;
      +  has Type : protected int;
      +  method socktype : int ();
      
      -  has protocol : protected ro int;
      +  has Proto : protected ro int;
      +  method protocol : int ();
      
      -  has listen_backlog : protected int;
      +  has Listen : protected int;
      
      -  method peerport : int ();
      -  method peerhost : string ();
      
      -  has peername : protected ro Sys::Socket::Sockaddr;
      +  has peername : protected Sys::Socket::Sockaddr;
      +  method peername : Sys::Socket::Sockaddr ();
    
    * The following fields and methods in the IO::File class are added, deleted, or changed.
    
      + method input_line_number : long ();
      
      + method set_input_line_number : void ($input_line_number : long);
      + method truncate : int ($legnth : long);
      + method stat : Sys::IO::Stat ();
      + method sync : int ();
      - method opened : int ();
      
    * The following fields and methods in the IO::Handle class are added, deleted, or changed.
      
      -  method blocking : void ($blocking : int);
      +  method blocking : int ();
      +  method set_blocking : void ($blocking : int);
      
      -  has blocking_flag : rw protected int;
      +  has nonblocking : protected int;
      
      -  has opened : ro protected int;
      +  method opened : int ();
      
      method truncate : int ($legnth : long) throws an exception.
      
      method sync : int () throws an exception.
      
      -  method stat : int ($stat : Sys::IO::Stat);
      +  method stat : Sys::IO::Stat ();
      
    * fd field in IO::Socket class is moved to IO::Handle class.
    
    * write method in IO::Socket class call syswrite method.
    * read method in IO::Socket class call sysread method.
    * print method calls write method.
    
0.206 2023-09-04
  [Prerequirement Changes]
    * SPVM::Sys 0.485 is required.
0.205 2023-09-04
  [Prerequirement Changes]
    * SPVM::Sys 0.484 is required.
0.204003 2023-08-22
  [Changes]
    * Type comments of the ioctl method in the IO::Handle are changed.
      -  method ioctl : int ($request : int, $request_arg : object = undef of Byte|Short|Int|Long|Float|Double|object);
      +  static method ioctl : int ($fd : int, $request : int, $request_arg_ref : object of byte[]|short[]|int[]|long[]|float[]|double[]|object = undef);
  [Bug Fix]
    * A bug is fixed: The blocking method in the IO::Handle has not work well in Windows.
0.204002 2023-08-22
  [Bug Fix]
    * A bug is fixed. FIONBIO has not been defined.
    
0.204001 2023-08-22
  [Prerequirement Changes]
    * SPVM::Sys 0.482 is required.
0.204  2023-08-18
  [New Features]
  
    The following methods are added to IO::Socket.
      +  method write : int ($string : string, $length : int = -1, $offset : int = 0);
      
      +  method read : int ($string : mutable string, $length : int = -1, $offset : int = 0);
      
  [Incompatibe Changes]
    The following methods are removed from IO::File and IO::Handle.
    
      method syswrite : int ($buffer : string, $length : int, $offset : int = 0);
      
      method sysread : int ($buffer : mutable string, $length : int, $offset : int = 0);
  [Changes]
  
    The following methods in IO::File and IO::Handle are changed.
      
      -  method write : int ($buffer : string, $length : int, $offset : int = 0);
      +  method write : int ($string : string, $length : int = -1, $offset : int = 0);
      
      -  method read : int ($buffer : mutable string, $length : int, $offset : int = 0);
      +  method read : int ($string : mutable string, $length : int = -1, $offset : int = 0);
      
0.203  2023-08-15
  [New Features]
    The following method is added to IO::Socket.
    
      method peerport : int ();
      
      method peerhost : string ();
    
0.202001  2023-05-29
  [Prerequirement Changes]
    * SPVM 0.986+ is required.
0.202  2023-05-23
  [Incompatibe Changes]
    * The definition of the following methods in the IO::Handle class are changed.
      [Before]
      method printf : int ($format : string, $args : object[]...);
      [After]
      method printf : int ($format : string, $args : object[]);
      
0.201  2023-05-23
  [License Change]
    * The license is changed to MIT License.
  [Prerequirement Changes]
    * SPVM 0.981+ is required.
  [New Features]
    * The version string can be got.
0.20  2023-03-20
  [Internal Compatible Changes]
    * Use SPVM::ExchangeAPI method instead of SPVM functions.
0.19 2023-03-15
  [Prerequirement Changes]
    * SPVM::Sys 0.43+ is needed.
0.18 2023-03-06
  [Prerequirement Changes]
    * SPVM 0.9695+ is needed.
  [Changes]
    * Removed the unused IO::Util class.
  [Incompatible Changes]
    * Removed IO::Handle::Interface.
    * Removed IO::Socket::Interface.
    * Removed the has_interfaces method in the IO::Handle.
0.17 2023-03-06
  [Changes]
    * The definition of the init method in the IO::File is changed.
      [Before]
      protected method init : void ();
      [After]
      protected method init : void ($options = undef : object[]);
      
0.16 2023-02-14
  [Bug Fix]
    * Fixed the bug that the close method in the IO::File doesn't set the stream undef.
0.15 2023-02-08
  [Prerequirement Changes]
    * SPVM 0.9691+ is needed.
0.14 2022-12-03
  [Prerequrement Changes]
    * SPVM::IO needs SPVM 0.9664+.
    * SPVM::IO needs SPVM::Sys 0.28+.
  [Incompatible Document Changes]
    * Removed the is_io_handlable method in the IO::Handle class in the doc.
      This was removed in the past.
  [Document Improvement]
    * Added the doc of the IO::Handle.
    * Added the doc of the IO::Handle::Interface.
  [Incompatible Changes]
    * Removed the autoflush method in the IO::File class.
    * Removed the get_autoflush in the IO::Handle class.
    * Changed the definitions of the following fields in the IO::Handle class.
      [Before]
      has autoflush : wo byte;
      [After]
      has autoflush : rw byte;
0.13 2022-11-22
  [New Features]
    * Added many methods and some classes.
  [Document Improvement]
    * Documents of many methods and some classes are added.
0.12 2022-11-16
  [Prerequirement Changes]
    * SPVM::IO needs SPVM::Math 0.11.
0.12 2022-11-16
  [Incompatible Changes]
    * The methods in the IO::Socket::INET is moved to the IO::Socket class.
    * Removed IO::Socket::INET. This module will be added in the nearly future.
  [Prerequirement Changes]
    * SPVM::IO needs SPVM 0.9662+.
0.11 2022-11-07
  [Prerequirement Changes]
    * SPVM::IO needs SPVM 0.9661+.
    * SPVM::IO needs SPVM::Sys 0.26+.
  [New Features]
    * Added the IO::Handle::Interface class.
    * Added many methods to IO::File and IO::Handle.
0.10 2022-09-16
  [New Features]
    * Add the IO::Socket::Interface interface.
    * The IO::Socket class has the IO::Socket::Interface interface.
  [Bug Fix]
    * Fix the bug that IO::Socket::INET doesn't work in SPVM 0.9648+.
  [Prerequirement Changes]
    * SPVM 0.9652+ is needed.
0.09 2022-08-01
  [Internal Ineffective Changes]
    * Use get_field_object_by_name_v2 in SPVM/IO/File.c
    * Use set_field_object_by_name_v2 in SPVM/IO/File.c
  [Pre Requirement Changes]
    * SPVM 0.9632 is needed.
0.08 2022-07-30
  [Test Fix]
    * Fix testing bug that occur upgrading to SPVM 0.9630.
  [Improve Exception Messages]
    * Improve IO::FileHandle exception messages.
  [Incompatible Changes]
    * Remove undocumented Fn->unlink method.
    * Remove undocumented Fn->rename method,
    * Changed the undocumented definition of fh field of IO::File
      [Before]
      has fh : private ro IO::FileHandle;
      [After]
      has fh : private IO::FileHandle;
    * Changed the undocumented definition read method of IO::File
      [Before]
      method read : int ($bufer : byte[]);
      [After]
      method read : int ($bufer : mutable string);
    * Remove the undocumented following class variables
      our $SEEK_SET : ro int;
      our $SEEK_CUR : ro int;
      our $SEEK_END : ro int;
    * Change the undocumented following definitions
      [Before]
      our $STDIN : ro int;
      our $STDOUT : ro int;
      our $STDERR : ro int;
      [After]
      native static method STDERR : int ();
      native static method STDIN : int ();
      native static method STDOUT : int ();

0.07 2022-06-30
  [New Features]
    * Add SPVM::IO::Handle module
    * Add SPVM::IO::Socket module
    * Add SPVM::IO::Socket::Fn module
    * SPVM::IO::Socket::INET extends SPVM::IO::Socket
  [Bug Fix]
    * Fix the bug that SPVM::IO don't work on Windows.
    * Fix broken tests.
  [Changes]
    * SPVM::IO::Socket extends SPVM::IO::Handle
    * SPVM::File extends SPVM::IO::File
    * Need SPVM 0.9614
  [Incompatible Changes]
    * Removed SPVM::IO::Handlable
    * Removed SPVM::IO::Socketable

0.06  2022-06-22
  * Catch up with SPVM 0.96
0.05  2022-06-20
  * Catch up with SPVM 0.9609
0.04  2022-06-14
  [CHANGES]
  * Fix tests
  * Add IO::Handlable class.
  * Rename IO::Socket to IO::Socketable
  * IO::File has IO::Handlable interface.
  * IO::Socket::INET has IO::Handlable interface.

0.03  2022-06-13
  [CHANGES]
  * Catch up with latest SPVM.
        
0.02  2022-05-26
  [CHANGES]
  * Catch up with latest SPVM.

0.01  2022-05-23
  [CHANGES]
  * First development release