It may sound silly but one thing that's holding me back is the "end" keyword at the end of every construct which seems unnecessarily verbose (and seems inconsistent as it isn't paired with a corresponding "begin").
It's not so pretty, but what are the alternatives? Making indentation meaningful has downsides (copy-pasting can go very wrong) and using up ascii characters just for this means they can't do other things (like Vector{Int} type parameters) and still often takes up a line.
You can avoid it quite a bit, e.g. f(x,y) = (z=x+y; sqrt(z)) defines a function, with two statements separated by ;.
I think the C/C++ convention with curly braces is ok, and doesn't make the parser much more complicated. Any closing brace has an obvious matching opening brace. And the meaning of any opening brace can be easily deduced from context, I suppose.
While I like do...end for symmetry, most of the time the end will have the same indentation as whatever opened it, and everything in between will be one indentation ahead (especially if you're using an automatic formatter), so I can follow easily without reading the content. And whatever opened it will also explicitly tell the context (if it's a method definition, if/else, for...).
In the end my code ends up like python but with an extra end, which, while adding a possibly unnecessary line of code it at least makes it trivial to copy and paste something into the repl (or other part of the code) without worrying about indentation.
Other things are OK too. I quite like that if/elseif/else/end only needs one closing, no other openings.
I don't know whether using {} for both types & blocks would be hard to parse, maybe it's possible. I have heard & can believe that parsing <> as a 4th ascii bracket is pretty tricky.
There are many fine languages that have used `end` to delimit blocks, including: Pascal — an elegant, classic language (and my first, personally); Ruby — another gem (get it). And yes, also Matlab, which is hardly unique in this respect.
Initially I was wary of such as well, when I tried out Elixir, which is said to have similar syntax to Ruby.
In the end it is the question, what kind of delimiters for your expressions you want to use. Some languages use end keywords, others parenthesis of whatever kind and yet others use indentation and whitespace instead, which perhaps could also be considered to be a form of delimiters. Having visible and matching delimiters or support for recognizing what end delimiter matches which start delimiter is essential for editing code efficiently, in my opinion.
I use a lot of Python, but the whitespace usage and non-visible delimiters are one of the downsides of the language syntax for me. Editing code when everything is an expression and is clearly delimited by matching parens is so much more efficient and fun.