Lawrence D'Oliveiro
2024-02-06 03:04:10 UTC
Fortran (in free-form mode) is now the third language I’ve come across
that allows semicolons to terminate statements, but makes them
optional (letting a newline do the job instead).
The other two are JavaScript and Python. JavaScript has the most
complex-seeming rule, but once you understand how it works, being able
to write something like
f(a, b, c)
as
f
(
a,
b,
c
)
(where a, b and c might be quite complex expressions) is quite useful.
Python has I think the most straightforward rule: you need to end a
line with “\” to do explicit continuation, but continuation can be
implicit if there is an unpaired opening parenthesis, bracket or
brace. So complex expressions can be written with minimal clutter:
section_verts = \
[
start + vec(0, - rail_width / 2, 0),
start + vec(0, rail_width / 2, 0),
start + vec(0, - rail_width / 2, rail_thickness * slope_adjust),
start + vec(0, rail_width / 2, rail_thickness * slope_adjust),
]
Free-form Fortran, on the other hand, requires an explicit “&” to
continue a line in all cases:
character(len = 9), dimension(3, 4), parameter :: month_names = &
reshape &
( &
(/ ' January ', ' February', ' March ', ' April ', &
' May ', ' June ', ' July ', ' August ', &
'September', ' October ', ' November', ' December' /), &
(/3, 4/) &
)
Wouldn’t it be useful if it had a smarter, Python-style rule?
that allows semicolons to terminate statements, but makes them
optional (letting a newline do the job instead).
The other two are JavaScript and Python. JavaScript has the most
complex-seeming rule, but once you understand how it works, being able
to write something like
f(a, b, c)
as
f
(
a,
b,
c
)
(where a, b and c might be quite complex expressions) is quite useful.
Python has I think the most straightforward rule: you need to end a
line with “\” to do explicit continuation, but continuation can be
implicit if there is an unpaired opening parenthesis, bracket or
brace. So complex expressions can be written with minimal clutter:
section_verts = \
[
start + vec(0, - rail_width / 2, 0),
start + vec(0, rail_width / 2, 0),
start + vec(0, - rail_width / 2, rail_thickness * slope_adjust),
start + vec(0, rail_width / 2, rail_thickness * slope_adjust),
]
Free-form Fortran, on the other hand, requires an explicit “&” to
continue a line in all cases:
character(len = 9), dimension(3, 4), parameter :: month_names = &
reshape &
( &
(/ ' January ', ' February', ' March ', ' April ', &
' May ', ' June ', ' July ', ' August ', &
'September', ' October ', ' November', ' December' /), &
(/3, 4/) &
)
Wouldn’t it be useful if it had a smarter, Python-style rule?