Douglas Crockford Envisions A Post-JavaScript World (infoworld.com)
JavaScript developer (and JSON proponent) Douglas Crockford recently described "a theoretical post-JavaScript World," according to InfoWorld. Crockford "believes the web development staple needs a successor that can fix multiple programming nuances." An anonymous reader summarizes their report:
Despite its status as the world's most popular language, Crockford told an audience at the Oracle Code conference, "It would be sad if JavaScript turns out to be the last language." He complained that JavaScript has two different ways of declaring variables -- let and var -- as well as two different "bottom variables" with no value -- both null and undefined. "There's an argument among language designers, should we have bottom values at all? But there's nobody who thinks you should have two of them."
According to InfoWorld, Crockford "also presented a scenario with JavaScript being turned into a purely functional programming language by getting rid of 'impurities' like date, the delete operation, math.random and object.assign. Afterward, he stressed replacing JavaScript rather than adding functional capabilities to it... The next language also should be better able to deal with multiple cores. Most languages have followed the sequential model of Fortran, executing one operation after another, he said. 'That's not how the world works anymore. We now have lots of cores available to us, which all want to be running at the same time.'"
In other news, Crockford also proposed ending the "spaces vs. tabs" debate by simply eliminating tabs altogether.
According to InfoWorld, Crockford "also presented a scenario with JavaScript being turned into a purely functional programming language by getting rid of 'impurities' like date, the delete operation, math.random and object.assign. Afterward, he stressed replacing JavaScript rather than adding functional capabilities to it... The next language also should be better able to deal with multiple cores. Most languages have followed the sequential model of Fortran, executing one operation after another, he said. 'That's not how the world works anymore. We now have lots of cores available to us, which all want to be running at the same time.'"
In other news, Crockford also proposed ending the "spaces vs. tabs" debate by simply eliminating tabs altogether.
You go to hell and you die.
Who in his right mind wants to use spaces for indentation. That's just bs.
I really don't care which one someone prefers, what I can't stand is not having a standard translation between the two. I wish IDE's, programming languages, and text editors would just pick an arbitrary value like 4 spaces = 1 tab and stick to it. Then, we could let people use whichever they choose.
>also presented a scenario with JavaScript being turned into a purely functional programming language by getting rid of 'impurities' like date, the delete operation, math.random and object.assign.
Getting rid of those things does not make JS a functional programming language.
Also, writing in purely functional languages just fucking sucks, they aren't and won't ever be a multi-core-coding panacea, and if highly-parallel-performance computing is your concern for the future, being ignorant to how parallel processing environments work by "letting the compiler decide" isn't going to make things better.
usage with JavaScript. You can track the hashChange event, but that means you have to use the anchor # hack. The design of the language and features is just a disaster.
Make it easy to use all cores? The last thing I want is for a web page to be able to hog all the cores on my machine.
Tabs for indentation, spaces for alignment, unless you will conform to my preference for indentation width, which I am not going to tell you.
for the kinds of simple data driven apps JavaScript is used for. The current single threaded model + callbacks works just fine for the most part, and promises solve most of the syntax nightmares (e.g. the Pyramid of Doom). I don't need to play Quake 5 written in JavaScript. That's what C's for.
As for the rest of his complaints, well, it's mostly there for backwards compat. Don't use it if you don't want to.
Hi! I make Firefox Plug-ins. Check 'em out @ https://addons.mozilla.org/en-US/firefox/addon/youtube-mp3-podcaster/
We need a standardised virtual machine that languages can be compiled to run on, that way the language of choice is more free to change. And Web browsers developers can deal with a simpler virtual machine language to translate.
Isn't Elm a purely functional language that is used for web development?
yaml uses 2 spaces for indents.
Maybe tab should be 1 space, then everyone would be happy.
lucm, indeed.
I may be wrong but I thought I saw a talk years ago where ECMAScript was going to go down a similar path as Racket to allow multiple languages running on a sort of javascript byte code.
why don't you go 20 years in the past and fix it?
lucm, indeed.
Lets let websites spin every single CPU core, access USB devices and store files and shit on our systems. Lets let sites give carte blanch access to helplessly complex and insecure GPUs and driver stacks. A few bitcoin mining shaders while you browse never hurt anyone. This is in addition to websites now getting to open random sockets to wherever the fuck they want and know yer physical location and keep hot Mic open forever if you ever allowed it in the past.
This all sounds really great. People can't even fucking secure the browser stacks they have now but fuck it MORE MORE.. MORE..... Internet users are not fucked enough as it is.
The best way to handle programming for multicore is to have all operations be blocking and let the app do other things while waiting for the blocking call to complete.
With this model of programming you don't have to worry about nested call backs and callback hell.
It's going to take brains and fore thought on the part of language designers, but the concept is super simple when you think about it. You just need to have a graph of the program flow and while waiting on a blocking operation to complete, you jump to a new non-state dependent entrance point in the graph and begin execution of all non-blocking calls from there until you reach another blocking point.
Once a blocking call completes another thread picks up from there and runs the remainder of that code path.
All you have to do is make it seamless from the perspective of the programmer. The language would be executing something non stop and each independent code path could be running on its own thread and the programmer wouldn't even need to know or think about it.
We have garbage collected languages now, I think the next big step will be non-blocking thread collected languages.
1) "Impurities" like date and math.random are what let's people do useful stuff with Javascript.
2) Javascript is difficult to use due to it's haphazard "design" but that doesn't mean that we need to get rid of it... Google and Microsoft will just start forking the successor too and recreate the same mess we have today.
3) People that code with spaces are either a bit out of their gourd or people that use tabs in an IDE written by people that think that they have to convert tabs to spaces because they are out of their gourd. Real programmers use 1 tab per indent level and use the setting in their text editor to set the width to be what is comfortable to them. And all those people out their that think that spaces are the one true religion need to cleanup a few million lines of respaced by an IDE spew to help them readjust to mainstream society.
I already live in this world thanks to uMatrix.
Yeah a lot of shitty websites break, if a site won't run without globally enabling js, then I don't need it.
I'd like to have some of the same medication that Douglas Crockford is on, but in a smaller dose.
Just cruising through this digital world at 33 1/3 rpm...
In the last 40 years I've used lots of languages from BASIC to Z80 assembly, 8080 assembly, 8086 assembly, 68k, C, awk, sed, sh, perl, C++, TCL/Tk, ADA, Python, Java, Javascript. Some I really liked (assembly, C), some I used with trepidation (C++, perl), some I actively hated (TCL/Tk, ADA).
But the one and only language that I felt was actually working against me was javascript. Damned script would pass all my tests, then fail on someone else's machine because they chose different options when installing, or had a different version, or just reasons. Note my scripts wouldn't actually fail, as in an error message. No, they just gave the wrong damned results.
I fucking hate Javascript with a passion and wish it would die by the end of the year.
We have been living in the PostScript world for quite some time.
Since PHP has started supporting encryption out of the box, what about advancing that until a better language comes along?
Tabs should be completely eliminated. They are a obsolete vestige left over from mechanical teletypes.
"Completely" is a strong word. I can understand using spaces for indentation, but if you "completely" eliminate tabs, you break compatibility with POSIX Make. Furthermore, if you "completely" eliminate tabs, then what format for delimited flat files? In my experience, tab-separated values format is more efficient than comma-separated values format because a value is far more likely to need escaping because it contains a comma than because it contains a tab.
ONLY apps can app apps, and the appiest apps are apped in AppScript, NOT LUDDITE programming languages!
Apps!
I don't understand why the Web browser can't use whatever scripting languages I have installed. If I don't have installed the website tells me to install. There is no reason this has to be security concerns, the browser should not have all privileges to read and write or execute, essentially it sandboxes any code. Even if the website wants to compile code with GCC, it shouldn't matter so long as it sandboxes code, limits privileges.
It follows the Unix and plan9 philosophies, piping data around, reusing code.
Multicore is a real issue. There are things that aren't feasible with single core performance. The other stuff really doesn't matter.
It will be a unified platform, we'll call it "flash". It will be awesome.
I'm in the tabs but not spaces camp.
“Common sense is not so common.” — Voltaire
I absolutely am in favor of having both null and undefined as "bottom variables," at least in the manner in which JavaScript tends to use them. null is a user-set "nothing" while "undefined" is a default for an unpopulated argument, unset variable or a function which returns nothing - distinct from the "nothing" of "null" a programmer might use in a return statement. I can think of several occasions offhand where having some combination of "undefined", "null", "false", "0" and "" makes sense to speed things up. If you want to pick at the type system pick at the type system, lack of strongly-typed variables absolutely has efficiency issues during execution, but realistically a couple extra bits for "null" and "undefined" on ANY variable type are well worth it.
Many programming people are aware of Richard Gabriel's essays on why C and related languages became the dominant programming paradigm (
https://www.jwz.org/doc/worse-...). In essence, sometimes those ugly compromises are just what people really want (or even need).
Many have argued that JavaScript is a excellent example of this phenomenon, but there's one big difference. Everybody is trying to replace JavaScript. Some are bolting on new keywords to the language, others are pushing features and some have just started using TypeScript. Here's the thing. The history of C, the "worse" language in the article, had a long history of usage (still does), and C++, for better and worse, sought only to argument, not replace C. In the end, JavaScript is not worse, it is broken.
We know that strictly typed object oriented languages do really well for UI based systems. The notion of hierarchy of control classes works. The Document Object Model even acknowledges that by suggesting it too fits that model (but really doesn't do that). If they really want to make an UI ecosystem, they will either continue to hack it together at an increasing expense, or they will get an ecosystem that does it better. Personally, I think the hacks will go on for a long time, because cross platform UI markup, programming frameworks and a new language for that all? Very difficult to do, and there is too much invested in the "Web way" to just steal what works from Microsoft, Apple, Android and so on.
And, the thick client model is making inroads and maybe that will continue. Mobile apps are a thing, maybe desktop apps will gain traction as people realize you can still gain similar levels of control and data collection with those as web pages (sad, but that's how we pay for things now).
In the end, language design is very hard. It's actually not hard to hack up a bad version of Scheme or Lisp (that's what JavaScript is). It is very hard to fix all the problems if your language is a success. A proper set of fundamental types matter. Lexical scoping matters. Proper typing and a effective type model matters. And that's not even talking about the core frameworks that a good language needs, because that's a whole new set of challenges. I just hope that if there is a JavaScript replacement, that they follow in the fine programming language tradition of just stealing what works and carefully replacing what doesn't. C++ stole from C, Java stole from C++, C# stole from Java (and Delphi). F# stole from Haskell, Haskell stole from OCaml which stole from ML and everybody steals from Scheme and Common LISP now. Just do it and don't be too clever about it.
I propose a new character encoding called UTF-PEACE which simply treats 4 spaces as the same thing as a tab.
After over 2 decades of programming I'm sick of "functional", "OO", "parallel", "strongly typed", "loosely typed", "actor based", etc languages. Every single esoteric or pseudo-esoteric language out there is fucking dumb (this includes c++ and c#.) Nearly every type of programming has one thing or a very small subset of things which it excels at, while sucking or being at best cumbersome at everything else. The computer is a tool, programming languages are tools to use a tool. The language shouldn't force the programmer to do jack, if a programmer is bad they are going to be bad in any model or paradigm, the programming language should let someone write however they please at any moment. If that means they want to use actors, great, if it means they want strongly typed variables great (the linker will love that,) if that means they want weakly typed or untyped variabled great, if it means async or sync logic great. Every mainstream language out there takes a handful of concepts at best and settles for "well you can do that other way in our language with several dozen pages of bullshit wiring" when English is becoming the dominant natural language for a reason (and not because it is pretty.) Tools for people should allow for any style, they should encompass all styles, and they should be infinitely adaptable. Trying to use a language with a hundred or less keywords is just archaic, I want at least as many meaningful keywords as a toddler has to speak with.
Stop with the "language" thinking and let people code in what they want. BTW, Javascript is loose enough to do that... you can code in Ruby via Opal, Scala , you can even BOOT FRIGGIN' LINUX in a browser... you could not easily do these things if javascript was not so "loose".
Agreed. Flash was mostly coordinate based and thus far more consistent and predictable across browser brands, OS settings, etc., something the HTML stack fails at badly.
Designers loved Flash for that reason. Now they are stuck back at client-side auto-flow positioning, which makes UI and graphic designers prematurely grey.
Table-ized A.I.
Okay, so this might be a bit of a ramble. Hi, I'm one of the developers of Monte https://monte.rtfd.org/, a new programming language based on E. E http://erights.org/ is a language from the 90s. Crockford worked on E. E's TermL mini-language became JSON. Another person who worked on E was Mark Miller. Miller's thesis project was formalizing and describing systems built with E. Crockford and Miller both are part of the committees that steer JS.
Now, to bring it all together: Object capability security is a security discipline based on the principle of least authority and perfect encapsulation. It allows us to build secure distributed computations with pretty good security properties; wf-stringe can prove that certain data cannot be exfiltrated, that certain I/O cannot happen, and that certain computations are arbitrarily safe to evaluate. It's not perfect, but it's a massive improvement on the state of things.
E and Monte, as well as a few other languages like Caja, Pony, and Waterken, are object-capability languages. Just like languages without manual memory management cannot misbehave in certain ways, these languages also promise that they cannot fail in certain desirable security-related ways.
Crockford, Miller, and others have been deliberately steering JS towards more capability-safe constructions. The object model has been tightened up, and tools like weakmaps, promises, and "template strings" (we call them quasiliterals in the literature) have been added. However, JS is still defined by its weak points, and those points are weak indeed.
Obviously, my bias is towards Monte. It's my preferred language and I want it to be popular. But, more importantly, I want the ideas that went into Monte to be popular. So, in that spirit, I'm going to give you a short list of questions. I want you to think, "How can I do that in my favorite language? Why would I want it?" Monte is meant to be the next Blub http://wiki.c2.com/?BlubParadox, the next language that is mediocre but built on a good foundation, and part of that is trying to see how Monte answers questions like:
~ C.
So...he doesn't like it that there are two ways to declare variables? He doesn't like tabs? He doesn't get out much, does he!
Between languages like CoffeeScript and TypeScript and runtimes like WebAssembly, it looks like we have some pretty good ways of evolving gradually into a post-JavaScript world and are on our way there. No need to articulate grand visions.
I've read all comments as of this time and nobody seems to have taken note of his suggestion about bottom vars:
"There's an argument among language designers, should we have bottom values at all? But there's nobody who thinks you should have two of them."
I would like to _strongly_ disagree, you _do_ need two different kinds:
undefined (Not a Number/Not a Result) which traps if you try to use it, and none which means empty/ignore!
In the Mill cpu architecture (http://millcomputing.com/) we have those two different kinds and they make coding both easier/more elegant/more compact, and at the same time faster and more secure!
Another example:
I am currently on the group that works on the 2018 revision of the IEEE 754 (i.e. floating point) standard. In the original '754 version the "Not a Number" (NaN) type was defined as a way to create a "sticky" error marker in a numeric calculation. I.e. if you accidentally try to calculate 0/0 or Inf/Inf the result will be undefined, the operation might trap or not depending upon how your language runtime is setup, but the result will always be a NaN. There are two kinds of NaNs, Signaling NaN and Quiet NaN, the only difference is that the next time a SNaN is taken as input to an operation it will trap and then be converted to the equivalent QNaN while a QNaN as input will just propagate to the output.
It should be obvious that if your runtime initializes all FP variables to NaN, then any accidental use-before-load should be detected, right?
The problem is that for the 2008 (current) revision of the standard, enough people wanted a totally different behavior when searching for the maximum value in an array, typically used to scale a matrix: They managed to define minNum(a,NaN)/maxNum(NaN,b) so as to ignore any quiet NaN val
ues, always returning the other value. I.e. in those functions they got NaN to behave as None!
The real problem, and the main reason these functions are going away is how the definition above interact with the SNaN/QNaN rules:
maxNum(1.0, QNaN) -> 1.0
maxNum(QNaN, 1.0) -> 1.0
maxNum(1.0, SNaN) -> QNaN
maxNum(SNaN, 1.0) -> QNaN
So if you look for the maximum of 4 values, one of them a SNaN, the result will depend on the order of comparisons, i.e. if you do them pairwise you get this result:
max(1.0, SNaN, 2.0, 3.0) -> maxNum(maxNum(1.0, SNaN), maxNum(2.0, 3.0)) -> maxNum(QNaN, 3.0) -> 3.0
while taking alternate inputs results in
maxNum(maxNum(1.0, 2.0), maxNum(SNaN, 3.0)) -> maxNum(2.0, QNaN) -> 2.0
I.e. we would have been much better off here with a single bit pattern meaning None which would never propagate.
"almost all programming can be viewed as an exercise in caching"
code in your fav lang --> AST --> LLVM representation --> WASM src --> |(interwebs) --> |(browser) --> WASM binary
Diversity means freedom. And if we push it a little further, we could even end the "spaces vs tabs" and the "curlies vs. indentation blocks" and all the other endless AST representation discussions to rest:
code in your fav lang syntax flavor --> code in your fav lang --> AST ...
All it takes is Editors which support "syntax styles" to present the AST of a language, just like css presents HTML. Hell, in Atom you could probably even do this with an actual css. Oh, and it would take developers who understand that we actually code an AST, not spaces and tabs and curlies and stuff.
P.S.: plz do not reply if you don't know what AST means :-)
What? CTRL-Left Arrow/Right Arrow doesn't work in your editor?
Ignorant liberals who propose using both approaches are clueless cockwombles who should be banned from Earth.
Emacs is a pile of crap!
Most languages have followed the sequential model of Fortran, executing one operation after another, he said. 'That's not how the world works anymore. We now have lots of cores available to us, which all want to be running at the same time.'"
That's pretty ironic, considering Fortran (at least F90 and up) has native parallel programming features. Namely vector/matrix math syntax, which decent compilers can turn into hardware-level parallelism.
Escher was the first MC and Giger invented the HR department.
Sounds like a slightly reworked version of the "x86 architecture is sooooo archaic! It needs to be replaced with something much more efficient and modern!" argument.
Yes, JS/x86 are wart fests that many of us, including me, have howled about over the years. But good luck trying to replace them in the real world.
No Script and Ad Blocker Plus are on all the time on my system. Why aren't they on for yours?
Necessity is the plea for every infringement of human freedom. It is the argument of tyrants; it is the creed of slaves.
I am a java programmer since the nineties, started to use javascript professionaly for the last 2 years. First: I like the concept of adding external DSL to javascript like Jsx from react.js for UI templating. Second: with the babel transpiler I can code against the latest ES standard and still run my code in completely outdated js runtimes. Third: typescript. It adds strong typing to javascript. It also gives you a nice conceptual solution for the undefined maddness in javascript with union types. Unfortunately typescript has its own transpiler iso using babel. IMO typescript should be remade in babel and put into the next ES standard.
Guy might know Javascript; but, he doesn't know Fortran very well. Fortran 90 or 95 added a lot of modern programming features, including pointers and dynamic data structures. Fortran 2003 added object oriented programming structures. It also improved interoperability with C and the like. Fortran 2008 explicitly added parallelism and multiprocessing capability. Fortran is not a dead language, is not the FORTRAN 77 people use as a reference when they try to make a point about "old languages". It is still used widely in engineering and science applications. That code running the simulation on the big supercomputer: good chance it's Fortran.
Javascript can't die soon enough for my taste.
He is a bunch of senseless babble. The nul and undefined nonsense is basically what color to paint the shed nonsense, that has more to do with just changing something for the sake of change or for some spurious reason. They have some convoluted reason but its some highly obfuscated answer using complicated convoluted argumentation to hide its trite baselessness. Functional programming tends to turn into a mess and is not itself a "feature" because many procedural languages have a full set of functional features, functional languages do not offer something other languages do not, its more about what they do not have to fit some puristic idea of the functional cult zealots. the comments about let and define are more nitpicking rather than a real substantial issue. So there are two ways to define a variable. So what? The sky is not falling.
Attempting to go functional leads to horrendous obfuscation and bizzarre code when you try to interact with the external environment. Thanks, but no thanks.
There is no need to replace javascript and this itself is a waste of time and resources, because everyone who knows javascript would have to learn a completely new language, and they will waste time doing so rather than just getting stuff done. People like Crockford are talkers rather than doers who sit around talking about how they are going to make life difficult for others and coming up with crazy schemes to waste peoples time. They are like beauracrats who come up with senseless regulations, they contribute nothing but they enjoy the feeling of power of being able to obstruct productive people.
the best thing we can do is ignore nonsense from these kinds of people.
Ephemeral, trust-before-first-render, load-from-goshdarn-anywhere is a fine security model (almost) if all the application can do is move coloured pixels around on your screen (1% of these will still pretend to be your favourite financial institution).
With the "native" applications (which could well be 100% portable flavour-of-the-day) I can audit my installation log to determine at all past points in time which applications could potentially have accessed or manipulated key system resources (such as my GPU, but this list could in theory be very long and fine grained), where they were obtained from (including the original authentication handshake), and other potentially incriminating metadata.
So, yeah, there are many cases where I like the "native" security model 10,000% better than any hot-loaded trojan.js.
Even if all computers ever built were 100.000,000% compatible, I would still prefer the "native" security model 99.99% of the time when real resources become involved.
To put this in Tversky / Kahneman terms: the web security model is System 1 lizard brain, while the "native" security model is painful enough to (mostly) be System 2 belt-and-suspenders brain (or at least tighty-whitey and fungus-proof shower-sandal brain).
Did not know know of this implied criteria for language design which by extension means any new language must not confuse JAVA programmers.
And the language certainly can't be functional ... because _that_ confuses Java programmers.
Conclusion: we should all just use JAVA. ... no thank you.
"Consensus" in science is _always_ a political construct.
How about we eliminate client-side scripting entirely?
Seriously. Right now I have a high-end 3-year-old gaming machine running Firefox with NoScript. I have a dozen windows minimized with maybe a hundred tabs I'm saving to look at later. Some are reference material, some are webcomics, some just interesting articles. My machine is otherwise idle, yet somehow one core is completely pegged even as I type. Some dumb-ass script is soaking a virtual CPU doing... nothing. Nothing at all. It's minimized and idle.
Meanwhile, I have a FIFTEEN-year-old iMac next to me. It is running TenFourFox (G4 build of Firefox) with the setting "javascript.enabled" set to "false". I have maybe a dozen windows open with a hundred or so tabs. It is also serving as a router/NAT for all my other machines. It is sitting at only a couple percent CPU usage. I use THAT machine for my normal web surfing, not my gaming machine.
Think about that. 12 years more advanced, running roughly the same load, the only difference is client-side scripting. Why the fuck did I spent thousands of dollars just so some marketing shithead can run arbitrary code on MY computer? I am constantly running into pages on my iMac where an article will fully render, but no images appear inline. Why? Some idiot thought it was a good idea to replace a simple image tag with a fancy client-side script that dynamically re-writes the page as it loads to insert the image tags after it has loaded. What the fuck do they need to run code on my machine just to make the page less functional for? And very recently I've come upon several pages that just show a blank white screen on my iMac. When I check out the source, the only thing it does is download a shit-ton of scripts, which I presume would dynamically render the page after the fact. I suspect this is the hyped "Angular", but I really don't care enough to find out.
Fuck you, everybody who thinks they NEED to run code on MY machine. I sent an HTTP request to your server expecting an HTML page with static content in it. I did not sign up for running an entire fucking application on my computer, written by the lowest-denominator web monkey who only cares about himself, not my own safety and well-being. Give me back my HTML/CSS Web! I have never, ever seen any use of client-side scripting I actually needed. I've seen lots of fancy uses of it, but I could always think of a way to do the same thing with static HTML and a server request. Meanwhile, there are virtually no browser security exploits that work without client-side scripting. My iMac has been running for well over a decade without ever being compromised, I know from both the CPU monitor and the network monitor. Amazing how much safer the Web is when you refuse to run random code on your own machine.
Web developers: Fuck you. Learn how to use the existing tools. You do not need to re-invent entire applications in JavaScript. You really can do your job with HTML and CSS. Yes, you can. You really can. Stop being lazy stupid asses and do it. I do not need a fancy-ass dynamic portal just to view a few articles or shop online. I don't need an entire software suite to browse cruises or air fares. I do not need ten megabytes of script just to look up an NPC in a game. I do not need three plug-ins and scripts from half a dozen places just to see a silly cat video, I was viewing video online back in 2001 just by clicking a link to an *.mpg file. And I sure as hell do not need to run a God damn carousel of rotating products in a page I opened in the background and have not even made visible yet.
You are hurting us. Stop it. Just stop it.
I don't need to play Quake 5 written in JavaScript. That's what C's for.
Until you find that a program written in C was compiled for an instruction set and operating system other than that of your computer.
Recompile?
Good luck recompiling if all you received from the application's publisher was a binary compiled from source code that the application's publisher considers a trade secret. I figured that would be obvious because Quake is the title of a video game series. Or are you referring to Id Software's historic process of distributing its older engines as free software years later after engine licenses dry up?
The language doesn't matter. Developers will find a way to fuck things up. A shitty developer is a shitty developer no matter what language they use. People just get thrown into a project and may or may not really know the language they are writing the code in. They just hack along as they go without really understanding the language. It is like a first year Spanish student trying to act as interpreter at a UN event. Results will vary.
Sell yourself as a pure HTML/CSS page developer and convince your buyers that the increased security and throughput is worthwhile.
Personally, I find the difference so stark that the lack of portability is a price I'm willing to pay.
A Mac with a Windows license is the only kind of computer that can (legally) run all current applications for popular desktop operating systems, particularly proprietary applications that are Mac-exclusive or Windows-exclusive. Yet if we were to recommend switching to a Mac as the universal workaround to the lack of portability of desktop computer applications, this would give Apple a monopoly on the desktop computer market. Can I put you on record as believing that granting Apple such a monopoly "is a price I'm willing to pay"? If not, what did I misunderstand?
Various Basic implementations had DIM and VAR, arrays could be undimensioned or contain zeros or even be dimensioned but undefined. This made no difference as the developers always stuck to the same conventions, this changeist author seems to have nothing better to write about.
Long live Javascript.
I hope that anyone who uses spaces gets their hands chopped off, and never codes again.
Especially people who say that we should completely remove tabs.
Also there is nothing wrong with JavaScript, it is perfectly fine as is.