tor, 13 05 2010 kl. 23:09 +0200, skrev Alois Schlögl:
> Oct2mat has significantly improved. Most notable, support for the
> following language elements as been added:
>
> - support for standalone ++, --,
> - support of +=, -= etc operators,
> - support of [blah](ix), fun(a)(ix)
> - do...until,
> - multiple assignments like a=b=c=d
> - variable names starting with "_" (underscore)
>
> This means, that many more functions can be converted without manual
> editing. The patch that corrects known issues in about 100 files have
> reduced to about 22 files (from over 3000 lines to less than 700 lines).
> This revised patch is attached.
>
> Some comments on the patch:
> ===========================
> (i) n(k)+=1; is preferred over n(k)++ for two reasons
> ------------------------------------------------
> 1) the former is faster
> octave:36> N=1e6;
> octave:37> tic;n=0;for k=1:N, n++;end;toc;
> Elapsed time is 0.48 seconds.
> octave:38> tic;n=0;for k=1:N, n+=1;end;toc;
> Elapsed time is 0.26 seconds.
Odd. This looks like something that should be improved in Octave. Would
you care to file a bug?
> 2) for indexed variables, n(k)+=1 is correctly converted by oct2mat
> while conversion of n(k)++ is not supported.
>
> (ii) a+=b|c, a-=b+c etc. would be incorrectly resolved to a = a+b|c, and
> a = a-b+c. For this reason, it is sometimes necessary to add paranthesis
> a+=(b|c). [Remark: there is a solution to introduce always (RHS), but
> this breaks another example. You can test oct2mat with this commands:
> mkdir /tmp/oct2mat
> cd ~/octave-forge/extra/oct2mat/inst
> ./oct2mat test_oct2mat.m
> cat /tmp/oct2mat/test_oct2mat.m
>
> 3) increment ++ and decrement -- operators within another expression can
> not be correctly converted. Therefore, manual editing is necessary.
Sounds to me like something that should be fixed in 'oct2mat'.
> As far as I understand the various comments, only Olaf is against the
> patch.
Personally, I am not against the patch, but I wouldn't say that I am for
the patch either. I am not a fan of rewriting perfectly functional code
in order to help an automated Matlab converter.
As to the suggested patches, then I few things caught my attention:
> --- main/image/devel/__conditional_mark_patterns_lut_fun__.m (revision 7295)
> +++ main/image/devel/__conditional_mark_patterns_lut_fun__.m (working copy)
I will not accept these changes to this function as this is not a
function the user should call, but rather a function that used to
generate code in the 'image' package. This function, thus, more has a
value as documentation to developers rather than to users.
> --- main/image/inst/imhist.m (revision 7295)
> +++ main/image/inst/imhist.m (working copy)
> @@ -62,8 +62,11 @@
>
> if (nargout == 2)
> [nn,xx] = hist (I(:), bins);
> - vr_val_cnt = 1; varargout{vr_val_cnt++} = nn;
> - varargout{vr_val_cnt++} = xx;
> + vr_val_cnt = 1;
> + varargout{vr_val_cnt} = nn;
> + vr_val_cnt += 1;
> + varargout{vr_val_cnt} = xx;
> + vr_val_cnt += 1;
I will not accept these changes as I feel it makes the code harder to
read. It also seems to me like it would be better to fix 'oct2mat' to
handle this coding style.
> --- main/image/inst/imsmooth.m (revision 7295)
> +++ main/image/inst/imsmooth.m (working copy)
> @@ -479,7 +479,8 @@
> %for i = 1:10
> i = 0;
> while (true)
> - disp(++i)
> + i+=1;
> + disp(i);
> ms(ms) = ms;
> #new_ms = ms(ms);
> if (i >200), break; endif
This piece of code is part of an algorithm that is not yet fully
implemented. As such, I don't want changes like this in here. I have now
commented out this part of the code, so I don't think it should cause
you problems any more.
> --- main/optim/inst/de_min.m (revision 7295)
> +++ main/optim/inst/de_min.m (working copy)
> @@ -147,7 +147,8 @@
> if nargin > 2,
> ctl = struct (varargin{:});
> else
> - ctl = nth (varargin, va_arg_cnt++);
> + ctl = nth (varargin, va_arg_cnt);
> + va_arg_cnt += 1;
Two comments:
1. 'oct2mat' really should be improved to deal with this coding style.
2. This has to be rewritten anyway ('nth' is no longer part of
Octave), so I find it somewhat silly to make this change.
Similar comments can be made for other patches.
> --- main/time/inst/thirdwednesday.m (revision 7295)
> +++ main/time/inst/thirdwednesday.m (working copy)
> @@ -49,7 +49,7 @@
> wednesdays = nweekdate (3, 4, year, month);
> dates = datevec (wednesdays);
> ## adjust the year when the date will wrap
> - dates(:,1) += dates (:,2) > 9;
> + dates(:,1) += (dates (:,2) > 9);
Why can't 'oct2mat' insert this parenthesis automatically? It can just
always do it.
> --- main/nnet/inst/__calcjacobian.m (revision 7295)
> +++ main/nnet/inst/__calcjacobian.m (working copy)
> @@ -124,7 +124,7 @@
> ## tildeSx = -dFx(n_x^x)
> ## use mIdentity to calculate the number of targets correctly
> ## for all other layers, use instead:
> - ## tildeSx(-1) = dF1(n_x^(x-1)))(W^x)' * tildeSx;
> + ## tildeSx(-1) = dF1(n_x^(x-1))(W^x)' * tildeSx;
Huh? You need to make changes to the comments?
Søren
------------------------------------------------------------------------------
_______________________________________________
Octave-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/octave-dev