<
Next version of Ox>
<
Previous version of Ox>
Ox 7.1: new features and fixes
New features and enhancements in version 7.1
Fixed problems in version 7.1
New features and enhancements in version 7.1
- OS X
- command line version of Ox Professional now is 64-bit and multi-threaded, so supporting parallel loops.
Note that the Ox version called from OxMetrics
and OxRun is still 32-bit, because the GUI is still 32-bit.
- OxMetrics now disables AppNapp for OxModel, OxPack and OxRun at start-up.
- Handling of computations involving empty matrices improved to be more intuitive.
(Some of these changes may impact existing code.)
- x*y' returns <> if y is empty (to conform to x*z when z is empty),
previously it gave a run-time error;
- outer(<>,y) returns <> (rather than give a run-time error)
- determinant(<>) returns 0
- logdet(<>) returns -.Inf with signdet 0
- logdet(singular matrix) returns -.Inf with signdet 0 (was 1 with signdet 0)
- shape(x, y, r, c) and reshape(x, y, r, c) return an r x c matrix of zeros when x or y is empty or r,c is zero.
- nullspace(<>) returns <>, nullspace(full rank m x m) returns zeros(m,0), nullspace(zeros(m,0)) returns
an identity matrix.
- Linux:
- Removed linux GLIBC dependencies on version 2.14 and 2.17 (Debian Wheezy is
still on 2.13 while RHEL 6 is on 2.12).
- Removed dependency on GLIBCXX_3.4.14.
- OxMetrics was using the user locale, instead of the C locale.
For many languages, this meant using the , as decimal separator instead of the .
This in turn messed up display and saving of floating point numbers.
Now using the C locale, as the console versions already did.
- Producing some debian packages for installation now as well.
- Now can use lambda function in callback (FOxRunCallBack)
- `Warning: assignment in test expression' now not given if assignment is in parenthesis:
if (a = b) gives warning
if ((a = b)) and if ((a = c) >= 0) do not give warnings anymore.
- MaxSQP/MaxSQPF: hi,lo parameters can be scalar: in that case same value is used for all parameters.
- Improved decisions when to do A*B and A'B in parallel.
- rank() could create run-time error when matrix has missing values.
Now a warning, returning rank 0.
- New responsive html help (using iframes instead of frames).
Fixed problems in version 7.1:
- OSX OxEdit Add/Remove Modules/Load From: crash.
- foreach loops on arrays were accessing the items by reference rather
than value. This could lead to errors when the array item is changed in the loop, such as:
decl amres_hs = {1,unit(2),unit(3)}, h, i, j;
foreach (h in amres_hs[i])
{
amres_hs[i] = h + i * 10;
h += 1;
println(">>h?", h);
}
println(amres_hs);
This is now safe.
- foreach was not allowed on variables that were const or serial. The following
resulted in compilation error: 'amH' cannot take reference of constant:
decl jac_alphabeta = [=](const amH)
{
decl mj = <>, h, i;
foreach (h in amH[i])
{
}
};
- MaxSQP/MaxSQPF if error in argument, would just print function name
rather than the full run-time error message before stopping
- j = sscan("AA:5", "%*t", ":", "%d", &i); should have j=1 (not j=2)
%* means skip the assignment, and such fields should not be counted. They were,
however, for %t,%v,%C.
- If a data member of an object holds a function reference, this would be called
with the wrong number of arguments, leading to a runtime error.
- find when searching for a string inside an array: defaulted to
reverse search and ignored mode argument. When searching for a string inside a string
it was always using reverse search, regardless of the mode.
- Base class in class declaration did not handle namespace correctly.
Now in
class A : B { ... }
B defaults to the namespace in which it resides (or ::B for the global namespace,
or N::B for namespace N if in the global namespace).
- clone was not preserving the pubic flag when copying an array (making it by value).
If a member was an object, clone would lose its public or static property
after copying the object.
- Database::FindSelection should not give an error message when a variable is not found
- Problem with println("S\xF8ren"); and println("Søren");
- On the Windows console: depends on the active code page (chcp).
- in OxEdit: skips quite a bit of output after that.
Can make the Windows console UTF-8 by using chcp 65001 and the Lucinda Console font, then correct in both.
So best solution is for OxEdit/OxMetrics to treat all files with upper ASCII as UTF-8, not just
files with characters > 0xFF.
- A do {...} while loop as the very first executable code in a function can go wrong
because an invalid optimization makes the returning jump statement out by one
position in the code. Example:
#include
test(a, c)
{
decl b;//;=0;
do { b = a; ++c; } while (c < 0);
println(b);
}
main()
{
test(10, -2);
}
prints 1 instead of 10.
If the first statement is decl b = 0;, then there is executable
code before the do statement, and the issue does not arise.
- An indexation error in a function call argument would be reported at the wrong location.
- OS X OxEdit packaging error: has RunOnce with both files.
- If the number of arguments of a function declaration does not match a previous
declaration, it could crash Ox, rather than give a compilation error.
- replace("%", "", "_"); gets stuck in infinite loop
- static member variables could lead to a crash when an object was used in a
parallel loop (solved by creating a new global lock).
- Refactoring of gamma function code, small change in DGammaRatio_22.
- Autometrics: Backward elimination did not consider the empty model.
Ox version 7.10.
©
JA Doornik
This file last changed .