====== Tcl Math Syntax is Inferior to JavaScript/Python/Ruby/C/C++/Java/Perl/PHP Problem Tcl's mathematical expression & assignment syntax is unnecessarily verbose and thus inferior to many other programming languages (especially Ruby, JavaScript & Python). Every extra redundant character means: Potential typos/errors More information that needs to be read and processed by both people and computers More information that needs to be typed Tarnishing Tcl's clean, simple and beautiful space delimited syntax Proposed Solution Add more standard operators to tcl::mathop in Tcl 8.6, such as: = += -= *= /= %= **= &= |= ^= <<= >>= ++ -- And add the function pi() to tcl::mathfunc. Quick and dirty hack implementation for demonstration purposes: proc = {var args} { upvar 1 $var uvar set uvar [expr $args] } proc += {var args} { upvar 1 $var uvar set uvar [expr $uvar + ($args)] } proc ++ var { upvar 1 $var uvar incr uvar } Examples/Comparisons of Clarity & Line Lengths Assign Result of Single Operator Expression s = 60 * 60 * 24 # JavaScript, Python, Ruby s = 60 * 60 * 24; # Perl, PHP int s = 60 * 60 * 24; # C, C++, Java set s [expr 60 * 60 * 24] # Tcl set s [* 60 60 24] # Tcl 8.5 = s 60 * 60 * 24 # Proposed Tcl 8.6 Assign Result of Multiple Operator Expression (Long Version) y = m * x + b # JavaScript, Python, Ruby $y = $m * $x + $b; # Perl, PHP float y = m * x + b; # C, C++, Java set y [expr $m * $x + $b] # Tcl = y $m * $x + $b # Proposed Tcl 8.6 = y m * x + b # Future Fantasy Tcl: lookup # unrecognized tokens as variables/procedures Assign Result of Multiple Operator Expression (Short Version) y=m*x+b # JavaScript, Python, Ruby $y=$m*$x+$b; # Perl, PHP float y=m*x+b; # C, C++, Java set y [expr $m*$x+$b] # Tcl = y $m*$x+$b # Proposed Tcl 8.6 = y m*x+b # Future Fantasy Tcl: lookup # unrecognized tokens as variables/procedures Assign Result of Mixed Expression $x = sin( pi() / 2 ); # PHP x = Math.sin Math::PI / 2 # Ruby x = Math.sin( Math.PI / 2 ) # JavaScript x = math.sin( math.pi / 2 ) # Python double x = Math.sin( Math.PI / 2 ); # Java const double PI = acos( -1 ); # C, C++: do it yourself Pi double x = sin( PI / 2 ); use constant PI => atan2( 1, 1 ) * 4; # Perl: do it yourself Pi $x = sin( PI / 2 ); proc pi {} { expr acos( -1 ) } # Tcl: do it yourself Pi set x [expr sin( [pi] / 2 )] = x sin( pi() / 2 ) # Proposed Tcl 8.6 = x sin pi / 2 # Future Fantasy Tcl: optional parenthesis Accumulate s += 60 # JavaScript, Python, Ruby s += 60; # C, C++, Java, Perl, PHP incr s 60 # Tcl += s 60 # Proposed Tcl 8.6 Increment ++x # JavaScript ++x; # C, C++, Java, Perl, PHP x += 1 # Python, Ruby incr x 1 # Tcl incr x # Tcl 8.5 ++ x # Proposed Tcl 8.6 Post Script If this has been previously recommended/discussed then could someone provide a link? I know this wiki may not be the ideal place to propose this, but it is the quickest. ====== ---- !!!!!! %| tcl |% !!!!!!