Hacker News new | ask | show | jobs
by BinaryIdiot 3651 days ago
> Javascript isn't python or c. It's more like Lua: It's meant to be embedded inside an application, and the application provides all the interfaces you need.

I couldn't disagree more. JavaScript started out that way but today (really the past 6+ years) it's used in identical use cases as Python in addition to being embedded into web browsers.

> If you start trying to include things like file i/o in the base language, you're never going to satisfy all the very different requirements of code running in a browser vs. running on a server.

You don't need to. Provide the basic capabilities that all languages provide, restrict what isn't possible when it's embedded into an environment. Keep it simple.

> If file I/O had been standardised years ago, with API designed by server programmers the browser would be saddled with lousy synchronous stuff that hangs the browser UI, opens up a thousand security issues, and bloats the language with stuff that's pointless for purposes that aren't web browsers or servers.

This is very unfair. What's "years ago"? The asynchronous patterns used in JavaScript date back to well over a decade ago and JavaScript wasn't really used elsewhere until node.js. I'm not sure I would consider any standard APIs as "bloat" either. This just looks like a baseless attack.

> Finally the biggest and best reason to not do this is that, once you put something in javascript (or a web browser for that matter), you can never ever take it out no matter how badly designed it is, without breaking something.

Same goes for all programming languages and their standard libraries. This is why you target specific versions. This is a solved problem.

> Javascript and the web is an open platform. not a closed platform.

So is Python. C++. C#. etc.

2 comments

> You don't need to. Provide the basic capabilities that all languages provide, restrict what isn't possible when it's embedded into an environment. Keep it simple.

Well, that makes sense but wouldn't it make more sense that the environments supply what's meaningful on top of a very light base? Like window.document.querySelectorAll in browser and require("fs") in node.js?

I, although, also think that stuff like what underscore/lodash provides could very well be in that light base, before we start discussing a standard for observables.

> wouldn't it make more sense that the environments supply what's meaningful on top of a very light base

I certainly don't think so. JavaScript is a language that works in more places now; commonized libraries would be a huge benefit. As an example you wouldn't use Python with different io libraries depending on the operating system it's running on and yet this is what node is evolving into.

> Like window.document.querySelectorAll in browser and require("fs") in node.js?

querySelector / querySelectorAll are specific to a browser platform but a way to conduct io could be pretty universal, in my opinion.

That would seem sensible: just a native `range` function would be nice, and more declarative methods available natively would be great (zip would be very useful). Having primitives to build upon is pretty important though: I don't know of the Observable proposal is the best to pick on, given its general usefulness for UI
You're confusing a language with a platform. The language specs of the languages you mentioned do not have file system semantics included
I'm not confusing anything here. Unless a language has a platform specific API it typically gets bundled into the language specifications itself to ensure consistent interfaces and to force implementations to match a set standard.

C++'s STL is part of its specification. Python has a library reference outlining the interfaces their standard libraries must include.

You're still thinking in browser world. In a browser world a browser is a platform and has to provide APIs to allow JavaScript to interact with its elements. Today this isn't always true. Today you have node.js and several other execution engines that allow JavaScript to run anywhere much like other languages. It's time the standard reflects that new reality, in my opinion.