Thanks for writing up the summary, but you have picked a very narrow 
subset of new languages. One might even say a biased subset. How about 
these new languages?

Elixir, Elm, TypeScript, Hack, Julia, Perl6, Ring, LiveScript, 
Ballerina, Crystal, Opa, Red, Ceylon

TL;DR

At least 10 out of these 13 include some form of assignment 
expressions. If we include the five you selected, 13 out of 18, or 
72% of the sample, include some form of assignment expression.



Details follow below.


Even in the limited set of five languages you chose, 3 out of the 5 
allow some form of assignment expressions:

- Go allows assignment expressions in "if" statements, but not "while";

- Rust allows assignment expressions in both "if" and "while";

- as does Swift;

- Swift also allows assignment in arbitrary expressions, but it returns
  Void (equivalent to returning None).


As for the other languages I found:


Elixir (2011):
- everything is an expression, including assignment

  if current_user = Plug.Conn.get_session(conn, :current_user) do
    Logger.info "User #{current_user.id} logged out"
  end

https://stackoverflow.com/questions/42682961/assign-variable-and-test-in-if-statement-possible


Elm (2012)
- has "let expressions"

http://elm-lang.org/docs/syntax#let-expressions


TypeScript (2012)
- a strict superset of Javascript, including assignment expressions


Hack (2014)
- a (not quite full) superset of PHP, including assignment expressions


Julia (2012)
- includes assignment expressions


julia> x = 1
1
julia> y = (x = 2) + 1
3
julia> x
2



Perl 6 a.k.a. Rakudo (2015)

- assignment is an expression:

steve@orac ~ $ perl6 -e "say (my \$x = 32)+100; say \$x"
132
32

(the backslashes are escaping the dollar signs from the shell, they're 
not part of the Perl syntax)

- also allows any(?) statement to be used as an expression
  with the `do` prefix


Ring (2016)

Documentation seems fairly poor, more concerned with singing the praises 
of the language than explaining the behaviour in detail, but maybe 
that's just me. But I *think* assignment is not an expression. Using the 
Ring interpreter here:

http://ring-lang.net/

I tried running this:

    x = 55
    x = (x=99)
    see x

and got the output 0. My interpretation of this is that the x=99 
expression is being interpreted as equals, not assignment.


LiveScript (2011)

- assignment is an expression which returns the value assigned

http://livescript.net/#assignment



Ballerina (2017)

- as far as I can tell, assignment is purely a statement

https://ballerina.io/res/Ballerina-Language-Specification-WD-2015-05-01.pdf



Crystal (2014)

- assignment is an expression which returns the value assigned

I don't know if this link will work:

https://play.crystal-lang.org/#/r/43fq

but if not, try running this:

x = 99;
y = (x = 33) + 1;
print x;
print y;

and the output ought to be 3334.


Opa (2011)

- assignment is an expression; the following two declarations
  are equivalent:


  two = {
    one = 1 // semicolon and newline are equivalent
    one + one
  }

  two = {
    one = 1; one + one // the exact same thing as above
  }

https://github.com/MLstate/opalang/wiki/The-core-language


Red (2011)

(not to be confused with the US DOD "RED" language from 1979).

I can't get the documentation to Red to display in a readable form in my 
browser, but it claims to be nearly identical to Rebol.

Wikipedia describes Rebol (and presumably Red) as not having either 
expressions or statements in usual sense. Based on my reading, it is 
kinda-sorta like Forth except without the stack or the postfix syntax. 
The creator of Red describes it:

"About the syntax and semantics, in a nutshell, it's a Lisp without 
parentheses and with infix operator support."

which suggests that assignment could be an expression. There's also a 
"set" function which can assign values, but frankly the Rebol 
programming model confuses me and so I'll count this as a "Possibly, but 
I can't tell for sure so let's say No" for the question of assignment 
expressions.



Ceylon (2011)

- Ceylon has "let" assignment expressions.

https://ceylon-lang.org/documentation/1.3/tour/attributes-control-structures/#tip_let_expressions

- while loops support assignment

https://ceylon-lang.org/documentation/1.3/tour/attributes-control-structures/#while_loops

- and switch statements also support a named assignment

https://ceylon-lang.org/documentation/1.3/tour/attributes-control-structures/#switch_conditionals



-- 
Steve
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to