The 601 release is a major release (5 to 6). In minor releases (503 to 504) we avoid changes which will break existing applications. In a major release we introduce incompatible changes if we feel there is sufficient long term benefit. If you have production code that you want to migrate to this release you will have to pay careful attention to these changes and may have to reprogram. See incompatibilities for a summary of incompatible changes.
Names x y m n u v are the arguments in user definitions in preference over the names x. y. m. n. u. v. used in previous releases. This release supports only the new spellings or both depending on a configuration setting. The old spellings will be decomitted in a future release. It will take a while for old scripts and documentation to catch up with this change. When you see the old form, translate to the new. Although x y m n u v are normal names, they do have special significance as arguments, and this should be kept in mind and they should not be used except in the context of arguments.
J uses UTF-8 (Unicode) encoding for 8 bit data. Previous releases used ANSI code pages. J character data (8 bits) is treated as UTF-8 encoding. This makes it relatively easy to have text input and output in any mix of languages in J applications. Previously character data was treated as ASCII or ANSI code page encodings. See Unicode for details.
Break (ctrl+c, ctrl+break, break, command+.) has changed completely. See Interrupt Execution for details.
See Release Notes for a summary of J Engine changes.
New random number generators, including Mersenne Twister as the default RNG. See Roll and Deal for details.
The new 8!:n family supports efficient formatting. See format for details.
The most visible new facility is the new Grid control. This control is implemented in open J code and is built on top of the isigraph control (as is Plot). This new grid control replaces the obsolete and decomitted grid control that was implemented in the J Front End. See Studio|Demos|grid for a demo and Grid Control for documentation.
Form editor has improved performance.
gl2 has changed significantly. It is simpler, faster, and more nearly the same across platforms. The changes were partly driven by requirements for the new grid control. The gl2 commands for the old grid control are decomitted. The gl2 documentation has been updated, but probably the best way to get familiar with the new gl2 is to work through the lab Graphics - gl2 commands.
isigraph control supports new events for the middle mouse button, mouse wheel, and focus (gained and lost). See isigraph events for details.
Box draw characters are used to draw boxes for J boxed data. The portable form of box drawing is with the ascii characters +-|. See Box Draw Characters for various options.
Calling DLLs (Windows dll and Unix so or dylib) is much improved. See Calling Procedures for details. Change summary: automatic data conversions, cd is rank 1, an open argument is treated as if <"0 was applied, option > returns just the scalar procedure result, and call overhead has been significantly reduced.
Jwdp (Java based J Front End) now uses the J Engine as a shared library. Previous versions communicated through sockets with jconsole running as a separate task. This makes the J system architecture more simliar across platforms and means that GUI interactions with the J code run by the J Engine are much faster. The performance improvement is summarized by:
Linux 601 is 6 times faster than 504
Mac 601 is 9 times faster than 504
Win jwdp 601 is 15 times faster than Win jwdp 504
The Win jwdp is now within a factor of two performance with jwdw and can be used for serious cross platform development.
wd wait command is now supported in both Jwdw and Jwdp. It is used to create modal dialog boxes similar to the mb... family of commands. See wd commands for more information.
wd msgs command allows processing of messages (such as repaints) and discards those that would cause wdhandler events. See wd commands for more information.
Jwdp (Java based J Front End) supports the es_password style.
OpenGL (3d graphics) API is supported by direct calls to the API with cd. Run lab OpenGL Introduction for an overview of OpenGL programming and see Studio|Demos|OpenGL and OpenGL Simple. The OpenGL support with 11!:3xxx foreigns in previous releases has been decomitted.
PCRE (Perl Compatible Regular Expression) shared library has been updated to the July 2006 6.7 version (previous version was September 2004 5.0). By default regex works with UTF-8. The default can be changed to be not UTF-8 with rxutf8_jregex_ 0 .
Jconsole startup runs script user\config\startup_console.ijs if it exists. Put Jconsole customization in this script. This is similar to startup.ijs used in Jwd startup in Edit|Configure.
New User Manual chapters:
Box Draw Characters
Binaries - Shared Libraries - Directories
Message Pump and Long-Running Sentences
J60x Engine incompatibilities with J504
J Engine is generally upward compatible. The exceptions are:
Names x y m n u v are used as the arguments in explicit definitions. The old spellings x. y. m. n. u. v. are still supported depending on a configuration setting (Edit|Configure). Conversion utilities are in system/extras/migrate/fixargs.ijs and are discussed at J wiki page Fixargs. 9!:48'' queries whether x. is allowed, 9!:49[0 disallows it, and 9!:48[1 allows it.
Global assignment (=:) in an explicit definition to a name that has a local definition signals domain error.
Floating point left arguments to ": are no longer supported (use 3j4 ": x rather than 3.4 ": x )
Binary representation 3!:1 and 3!:2 has changed. See Conversions for details.
Jfiles are affected by the change in binary representation. J601 can read/write Jfiles from previous releases, but previous releases can not read data written by J601.
?0 can not be 0, and is always strictly between 0 and 1. Previously it could be 0 and was a number greater than or equal to 0 and less than 1. The reason 0 is now excluded is that if 0 is a possible result some transformations and simulations have to use code to work around the fact even though 0 happened with a very low probability (2^_53).
(4!:56) (an undocumented form of erase) has been decomitted.
J60x Front End incompatibilities with J504
Unicode (UTF-8) support means that previous use that depended on code page encodings of character values greater than 127 or multibyte sequences have a completely different interpretation under the UTF-8 encoding.
Regex uses UTF-8 encoding and may give unexpected results for data that is in a different encoding. Verb rxutf8_jregex_ with an argument of 0 selects the old, non UTF-8 behavior and an argument of 1 selects the new UTF-8 behaviour.
gl2 commands changed significantly. See the comments in the section above.
Windows 95, 98, and ME support is decommitted (required by unicode support).
Linux J links with more recent glibc and won't run on older systems (e.g., Redhat 6.2) with older glibc versions.
Linux and Mac jconsole links with ncurses (previously termcap).
pmove command no longer treats _1 as special case to inherit old value.
wd DDE commands are decomitted.
The isipicture control is decommitted.