On Tuesday, 3 May 2016 at 03:48:09 UTC, Joe Duarte wrote:
Hi all,

I'm a social scientist and I'm preparing some studies on the effects of programming language syntax on learning, motivation to pursue programming, as well as any disproportionate effects that PL syntax has on the appeal of programming to women (more on the latter in a separate post).

Ok, a lot has been said against the braceless version, I think it's time to defend it for a bit. For my background my 4 first languages had very different syntaxes, none of which comprised curly braces or commas so while I enjoy D and C very much I grew up without ever thinking of them as representative of "real programming".

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.

Curly braces are another thing... I hear valid point (cc Adam) saying that it can be hard to deal with huge functions when using only indentation. However one must remember that Python and Haskell aren't D or C. Those languages are meant to be more functionnal and all tools are given so that you can use concise code made of small functions instead of pushing you toward big structural oddities. An example of that is the difference in the definition of iterators: Python's generator syntax may have its flaws but it makes for short and easy to write code. D's ranges are in some ways more powerful but having to define a whole struct/class to do it makes it way more verbose. It could be done that way in Python too but it would never ever be the default because that's just not what the language is thought for.

That has direct consequences on our problem. The fact that Python's function become harder to work with when they become bigger is a tool, and a useful one. When your Python code becomes hard to work with it raises a flag : “Stop where you are there should be a better, simpler way to do it.” Python's only goal is to produce readable code so it has a lot of tools to help you reduce its size. Keyword arguments are a good example. There are a lot of functions in phobos that share a common prefix just because it was too hard to make them share the same name in a generic way where they would just be separated by a keyword argument in Python.

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.

tl;dr: syntactic oddities are tools and you can't judge different tools without understanding the context in which they are used and what problem they are meant to solve. D isn't really meant for the kind of code that benefits most of having no curly braces.

Reply via email to