I approve of case-sensitivity where an initial Capital letter indicates that Something is Publically accessible and it really doesn't matter what happens after that. Hence, we could have:
In contrast to this, I feel it makes sense to have lowercase mean that something is private. Hence, no camelCase:
x y z variable longer-variable-name
I've never been that comfortable about appending numerals to the end of identifiers to disambiguate them as I feel that this is a sign that they ideally ought to be subscripted and implemented as arrays. I much prefer hyphens to underscores but would ideally like to use individual words separated by spaces. This can only work if you have an IDE that hides all the underscores (which are incredibly ugly and serve no useful purpose in printed material these days) as you input them and outputs NBSPs instead and then uses similarly suppressed prefix sigils to style your raw input text into an output which conforms to traditional Mathematical notation. Hence, we could have:
/foo_bar + /bar_qux
become:
foo bar + bar qux
similarly, the following is not a problem if you take advantage of the syntax rule that requires at least one space either side of an operator. Hence, we could have:
/foo_bar / /bar-qux
become:
foo bar / bar-qux
i.e. the / sign isn't echoed when you initially type it as it is expecting a letter, but when the IDE receives whitespace it belatedly echoes it as the operator symbol as it is now sure that it isn't a suppressed sigil.
I don't have a problem with "x - y" and approve of hyphenated names if you can't support spaces within names.
I had initially jumped to the conclusion that your language would use a postfix notation and be more influenced by Forth than LISP. This is because I assumed it's name alluded to the way that Captain Jean Luc Picard would program his replicator.
Interesting research. Of course, you could always hack the Home button to act as a Command key and hold the device in landscape orientation without having to give up a piece of the screen.
That is so much shorter than what I posted on Derek Siver's site it is embarrassing:
Born at the end of the '60s just before Christmas I was named after a saint. Later I found out that Santa Claus was largely invented by Coca-Cola to sell sodas and all the unlikely, but commonly held, beliefs that he was omniscient and omnipresent for at least one night of the year was seriously undermined.
Then it was only a short jump to realise that Jesus was probably all made up too, that he wasn't the son of God and, by extension, there might well not be a God.
I became a devout atheist at the age of seven - by 'devout' I mean that were there to be a Rapture as some believe that there will be, I will consider the 'proof' of the second coming to be symptomatic of hallucination, possibly a spiked water supply, and refuse to believe in God because I prefer to live my life that way without one.
The question "What is the meaning of life?" had no easy answers in 'forgiveness', or 'love thy neighbour', or the promise of an afterlife for those who did good deeds as if we were on Santa's omniscient list of good children to recieve presents. So I used logic and logic alone to arrive at the definitive objective answer no matter how it may seem uncomfortable to my sensibilities to reveal it.
The truth is, that to ask this question objectively you have to necessarily be totally objective about life and to be objective about anything you have to be outside of it with a detached point of view. With 'life, the universe and everything' with a whole 'philosophical universe of discourse' included in the set of things being considered I had to immediately dismiss all instrinsic attempts at an answer as not definitively objective due to their lack of detachment and inescapable subjective bias.
Realising that I needed to be outside the 'universe of discourse' to properly pose the question I saw what the difficulty with answering this had been all this time...
...'meaning' is part of the 'universe of discourse' and it not available if outside of it.
Consequently, all claims to a definitive meaning of life are erroneous in logic as an objective answer cannot be found. It is not so much that life is meaningless and we should all be nihilistic atheists, but that we are free to live any way we please as there is no wrong answer - as there is no definitive objective ULTIMATE answer!
Every way you wish to give your life meaning is equally valid for your life, with the caveat that this is an ephemeral guideline you choose to adopt not an eternal truth - actually, I like the way this same argument was presented "in reverse" by Mr Sivers as whenever I have posted about this in various fora in the past I have felt that I've come across as overly alienating by hitting them with the cold truth first instead of pandering to their intimately held, but unfortunately subjective, beliefs. Putting it all the other way around encourages more people to read on and seems more life affirming - even if I know, in truth, that life is without extrinsic meaning.
Donald Knuth uses GOTO. It is perfectly safe if kept within a function: invoke a function, jump around like crazy inside it, exit to caller with return value. No problem.
C functions are really procedures, except when they have no side effects on global variables. Indeed, a C function can be regarded as pure even if it contains imperative state changing code provided that all the mutable variables involved are local temporaries that only exist for the duration of the function call. Provided that f(x) always returns the same result for the same value of x it shouldn't matter how it is implemented.
APL element-wise operators are pure functions in an imperative language that has destructive assignment. However, it is also well suited to being used to implement GPGPU parallelism with local temporaries inside imperative procedures that appear to be pure functions from the outside.
Another form of parallelism arises from pipelined dataflow where tasks can simultaneously work on different parts of the whole linear computation so that those waiting for the results (further down the 'conveyor belt') receive more data from a potentially unlimited input stream 'just in time' whilst they consume more new data from their supplier or the source.
Taking things in the opposite direction a purely functional program can be seen as being a frozen moment in time that is subject to extrinsically defined constraints. Much like a spreadsheet these values can transition between epochs so they become ordinary mutable variables in a high-frequency event loop. This is the basis of exploratory "live" programming as an interpreter 'reacts' to dynamic changes in its source. It is also a facility provided by Mathematica where it permits the user to manipulate a graph of some complex function through recalculations based on new values of some sliders.
Every technique has its proper place and the latency incurred by Erlang mailboxes in the pursuit of fault tolerance and convenient hot-swapping of distributed modules is less of a performance issue when there would be a delay anyway given that the code is running over a network of computers. Erlang solves every significant problem of concurrency and it is highly reliable, unlike C# or Visual BASIC for which he is responsible. He really isn't in a position to criticise.
Both FP and OOP are extremes. Really, you can get by with Prototypes and have something type-oriented rather than class-based like Barbara Liskov's CLU. These can be given the capability of operating like Actors to simply take advantage of multicore / multiprocessor / multicomputer architectures. It helps your clarity of purpose if your language encapsulates persistent state in these Prototypal Actors without silly workarounds like C++'s friend function to make it go faster. A lot of your global state can live 'outside' of the program only to be seen from within as a set of global constants that change every 1/60th of a second when the runtime is reborn as if run from scratch with a slightly edited source. This may mean that apart from the output pipe of your dataflow that you can only put stuff IN to the BLACK BOX and must trust it to create its own views as to its current epochal value, just as a videogame renders a new frame of animation. All of the proponents of FP and OOP and for that matter Actors seek to prove that all programs can be written just using only their newly hyped paradigm. This is typical of ivory tower academia unsullied by the necessary pragmatism of the workplace. If you admit that there is something good about Actors then you don't have to learn Monads. If you admit that 'cloning' is a cleaner solution than the often abused (for the sake of convenience) 'implementation inheritance' and come to realize you can easily recreate classes / interfaces as abstract prototypes (i.e. they are just a pattern) you can jettison a whole lot of distracting OOP terminology and inscrutable UML diagrams as the work of self-promoting "architecture astronauts". Yet, if you embrace symbolic programming as seen in Mathematica you get to optimise your algorithms whilst not losing an insight into how their individual terms are transformed in your super-accessible declarative 'executable specification', at which point you realise that a symbol with an unknown value (i.e. a conventional mathematical variable) which can only become attached to a value once (per epoch) can be viewed as awaiting dataflow from a pipeline without any extra syntax obscuring your intent - you just call a variadic function and let the receiver await a finite list of arguments and then if there are more in the stream waiting beyond those it has already taken it awaits the same number of parameters again.
Really, the whole is greater than the sum of its parts - especially when those parts (paradigms) are dovetailed nicely.
I've been working on my own multiparadigm programming language for many years and Erik Meijer just seems too damn bleak.
In contrast to this, I feel it makes sense to have lowercase mean that something is private. Hence, no camelCase:
I've never been that comfortable about appending numerals to the end of identifiers to disambiguate them as I feel that this is a sign that they ideally ought to be subscripted and implemented as arrays. I much prefer hyphens to underscores but would ideally like to use individual words separated by spaces. This can only work if you have an IDE that hides all the underscores (which are incredibly ugly and serve no useful purpose in printed material these days) as you input them and outputs NBSPs instead and then uses similarly suppressed prefix sigils to style your raw input text into an output which conforms to traditional Mathematical notation. Hence, we could have:
become:
foo bar + bar qux
similarly, the following is not a problem if you take advantage of the syntax rule that requires at least one space either side of an operator. Hence, we could have:
become:
foo bar / bar-qux
i.e. the / sign isn't echoed when you initially type it as it is expecting a letter, but when the IDE receives whitespace it belatedly echoes it as the operator symbol as it is now sure that it isn't a suppressed sigil.