Researcher question – what's the point of semicolons and curly braces?
Joe Duarte via Digitalmars-d
digitalmars-d at puremagic.com
Sat May 14 16:01:51 PDT 2016
On Tuesday, 3 May 2016 at 22:17:18 UTC, cym13 wrote:
> In my opinion putting commas at the end of a line is useless:
> if it happens at the end of each line (not counting
> closing-braces ones) then the effective quantity of information
> brought is null, and in more than one case chaining
> instructions on the same line (the only utility of commas) ends
> up being a bad idea. But it's part of those things that have
> such an inertia that you just wouldn't ever had heard of D if
> it hadn't had it I think. Having commas was not decided by
> their intrinsic usefulness but by the choice to target the
> C/C++ market.
Good point that line-ending semicolons carry no information if
they're on every line (I assume you meant semicolons instead of
commas).
An important point that I think is undocumented: text editors
don't let you inhabit a new line unless you press Enter on the
line above. In other words, you can't have a new line by using
the down arrow or some other means. When I first learned
programming, I was stumped by how a compiler was line-aware, how
it knew when a line was truly ended, and what counted as line qua
line (I wrongly assumed you could down-arrow to a new line). It's
an invisible character by default, and they don't tell you how
text editors behave. This comes up a bit in Markdown and in how
people are inconsistently defining a "hard" vs "soft" line break.
> But Python sacrifices a *lot* of performances to do that. D has
> its own way and different goals. Being performance-friendly is
> one of them and that sometimes gets you with long functions and
> ugly hacks. When it comes to that having curly braces (well any
> kind of delitmiter really) is a great thing.
It's not clear how curly braces deliver better performance.
Anything expressed with curly braces can be expressed without
them -- i.e. you could design a language in which that were true.
Walter mentioned the issue of redundancy, which seems reasonable,
but that doesn't bear on the performance issue. A good example of
a non-curly brace compiled language is Crystal, at least last
time I checked. Python loses a lot for being a text-executing
interpreted language. What an interpreter does -- in comparison
to a JIT compiler -- is wildly underdocumented. The standard
answer to a lot of people on the web asking for an explanation is
that a JIT compiles down to native code or machine code, while an
interpret just interprets the code, or sometimes you'll see
"executes it directly". Big gaping hole on how it gets down to
machine code. But starting with text is crippling. I love
Walter's decision to have pre-compiled modules instead of text
headers -- I didn't realize that C compilers were literally
parsing all this text every time.
Python could get some big wins from a well-designed IR and
follow-on back-end code generator, or a JIT, or some combo. This
is obviously not a new idea, but no one seems willing to do it in
a professional, focused, and expensive way. Unladen Swallow was
weird in that you had a couple of kids, undergrad students who
had no experience trying to build it all. It's weird how casual
and half-assed a lot of software projects are. If I were trying
to do this, I'd want to assemble the Avengers -- I'd want a large
team of elite software developers, architects, and testers,
enough to do it in a year. That's a rare setup, but it's how I
would do it if I were Microsoft, Google, FB, et al -- if I were
willing to spend $20 million on it, say. Pyjion might become
something interesting, but right now it looks pretty casual and
might be the kind of thing where they'll a lot of outside
open-source developer help (https://github.com/Microsoft/Pyjion).
Pyston is only focused on Python 2, which is rearview mirror
thing.
By the way, anyone should be able to create a version of C, D, or
Go that doesn't use curly braces or semicolons, just by enforcing
some rules about indentation and maybe line length that are
already adhered to by virtue of common coding standards (e.g.
blocks are typically indented; and I realize Go doesn't require
semicolons). If we looked at typical code examples in almost any
language like C, C#, D, Java, Swift, and we systematically
encoded their meaning, reducing them down to a concise and
non-redundant form, we'd find lots of redundancy and a lot of
textual dead code, so to speak. This would be true even without
semicolons and braces. There's still a lot for a compiler or any
interpretive agent to go on.
More information about the Digitalmars-d
mailing list