HN user

Uncompetative

48 karma

Language Designer

Posts0
Comments64
View on HN
No posts found.

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:

  Newton-Raphson Runge-Kutta Fast-Fourier-Transform

  Class-ID IO-Channel MIDI-port 

  Freudian-Id Io-Channel
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.

Something is wrong if most programs don't run instantaneously

Agreed. BBC BASIC V on my Archimedes had zero startup penalties, unlike modern JIT languages.

Highly optimizing compilers aren't worth the risk

Agreed. The problem here is unforseen overflow resulting from machine representation of ints.

Design applications as small executables that communicate

Agreed. Both UNIX and Erlang have demonstrated the efficacy of this approach.

Don't write temporary files to disk, ever

Agreed. WANG wordprocessors routinely outperformed MS Word 6.0 due to their RAMDISCs.

Everything is so complex that you need to isolate yourself from as many libraries and APIs as possible

Agreed. BBC BASIC V did everything I needed without need of external graphics libraries.

C still doesn't have a module system

Agreed. Indeed, do we actually even need the complexity of C++ to remedy C's deficiencies?

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.

The Meaning of Life 12 years ago

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.

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.

Will you drown? 12 years ago

Wow. I didn't think this would be possible, but Notch has managed to top Minecraft.

This is even duller than that borefest.

Well, I've written about thirty million words on the subject, but I don't think it will take me 12 years to implement an initial prototype, more like two and then several years for all the tools that I want to make with it which will come to define its API, it should evolve over time with only me using it - I don't want to find myself in the same situation as Dennis Ritchie and Bjarne Stroustrup when a redesign was impeded by their early versions being adopted by comparatively few users and want the total freedom to change the design of my language if absolutely necessary with it only breaking code that I have written with it myself. Indeed, the likelihood of me making my language public is quite small as I know how every new language gets a hostile reception on here, Reddit and Slashdot. Really, I'm only doing it to help solve my own problems like Larry Wall did with his Perl scripting language.

If I had started implementation sooner I would have made something naive and half-baked. I did not have the benefit of a formal education in Computer Science and I probably wouldn't have attempted a project of this size if I had known all of the work that was involved. Walter Bright wrote a compiler by himself and Paul Woakes wrote Mercenary unaided and Elite was made by just two people, with David Braben on graphics and Ian Bell doing the trading (okay, three if you count the novel included in the box by Robert Holdstock), but that is still just 1% of the staff of a Ubisoft game like Assassin's Creed employing a whole bunch of artists, animators, scriptwriters, voice actors and composers for an estimated thousand man-years to create its content-rich high production values - all of which can be circumvented with procedural content generation as in No Man's Sky (initially, just four developers), and supplementary user-generated content such as or the seven million user-created levels in Little Big Planet, or about seven thousand competitive Halo 3 maps on the Forgehub community website.

Rather than waste mine and everyone else's time "doing the sensible thing" and writing another Tetris clone, I've gone and jumped straight to what I wanted to do, mindful that I will need productivity boosting tools in order to make it and that to write those all by myself I will need a highly productive exploratory programming language and that in order to make THAT it would help if I knew what the hell I was doing and did PLENTY of preparatory reading so that I didn't go in to it uninformed.

I just needed a hobby to keep me from getting bored and depressed. I had adapted a screenplay and made plans to write a novel, but my interest in programming had been sparked by an early exposure to Super Star Trek and the profound realisation that this illusion was being created by a magical recipe.

I wanted to learn these arcane incantations so that I could fill this black void with my own Universe. Whether it be CRT, LCD, LED, or Plasma, I have been trying to find a way to bring worlds of light to the darkness of a computer display ever since. Yet, as the scale of my endeavour dawned on me I realised that it would be better to spend a couple of years creating tools that I was comfortable using than rely on C++ as others recommended.

Unfortunately, my estimate was out by an order of magnitude.

Some twenty years later I have only managed to wrangle the process of research and (re)design to a point where I am finally ready to write a comprehensive specification of my multiparadigm "live" programming language and its alternative document-centric graphical user interface only after a self-imposed deadline made at the beginning of last month - otherwise, I'm sure I would still be amusing myself exploring endless "rabbit holes".

Despite this delay, I feel that my project is stronger as a result. I really didn't know enough about computer science when I started and I have found that I need to grok OOP and FP to know that they aren't appropriate for my needs. I was denied the opportunity to study the subject at school and had to travel to Foyle's in London to buy obscure computer books for years before unlimited broadband became affordable. Admittedly, I was paranoid that I would find myself several years into programming my videogame only to discover that "high productivity", "spare me the details", programming language was weak in some respect and could not accomodate the retrofit of some unanticipated, but very necessary, feature. Hence, a lot of the work I have done has been defensive: trying to create a future roadmap that specifies how concurrency and parallelism would work even if I plan to leave the implementation of these features until much later.

Hopefully, it won't be too long before I am using an integrated suite of development tools (created with my own language), to build my own procedurally-generated intergalactic MMORTSFPSRPG (Massively-Multiplayer Real-Time Strategy First-Person Shooter Role-Playing Game), or "adventure" if you prefer. Without my language/tools I very much doubt I would be able to complete such a grandiose endeavour unaided, and I very much prefer working alone without social expectations or professional deadlines - despite how much of my disposable income it has cost.

Although it could be classed as procrastination. What I ought to be doing is so incredibly dry that I need to give myself a break most of the time and only work on it when I feel inspired. Case in point, I am supposed to be specifying notation and semantics for tensor operators in the multiparadigm programming language that I have been working on for many years, but yesterday I really didn't feel like it so chose instead to write about the problems Nintendo were having and how they should have built on the success of the Wii with a familiar interface based upon a pair of wireless Nunchuks, rather than alienate the casual market with a cumbersome touchscreen that they couldn't expressively gesticulate with. This led me to hunt for images and YouTube videos to support my argument. Doing this from time to time has improved my writing ability:

http://www.eurogamer.net/profiles/Uncompetative/comments/164...

I don't feel there is any merit in Facebook / Twitter, but then I haven't got any friends / social life. I suppose I should have a blog for what I write in various fora, but I'd have even more trouble believing that anyone was reading it and I may start making less of an effort with my writing as a result.

Really anything I do that distracts me from boredom stops me slipping into depression. Luckily, I have no work deadlines...

When I read one of these Lifehackery blogs with a section that is entitled 'The Nap Month' it makes me feel that the author was procrastinating and trying to justify behaviour they felt guilty about.

I have zero caffeine in my diet, try to sleep between 7 and 10 hours a night - the latter is preferred when I am learning new concepts as it gives my brain a chance to rewire. Walking will stop my sedentary work from leading to constipation more than high-fibre alone.

Really, the secret to productivity is understanding the nature of the problem you are working on. All too often you can think it is all about solving X when in fact it is more about Z. No one really sets aside sufficient time to take stock and review the trajectory of their work so that they smooth the path that lies ahead with proper insight into what constitutes the essential aspects of the solution. As a designer it is vital for me to list every feature I aspire to include and then rank them mercilessly in order of most essential constraining and ultimately eliminating subsequent dilemmas of choice further down the list towards those aspects that would be nice to have but are not essential should you run out of time.

Even if you don't know enough about a highly ranked feature in this list its position in the list should not be influenced by your ignorance of it. It merely represents an area of on the job training that you need to budget for (or realise that you have no time to learn about, in which case you should probably ditch the whole endeavour and pick a project more suited to your skill set, don't pretend that you can reshape your design without it as it will just remind you of its compromised state each time you test it and make you unhappy with your craft).

English pub food is paid for at the bar with your drinks, that you yourself walk away carrying. They often give you a number on a wooden spoon and if you hate the food, you just don't go there again.

[dead] 13 years ago

"One does not simply produce a console that everyone fears will be spying on them for the NSA"

- Ned Stark