programmer_humor

This magazine is from a federated server and may be incomplete. Browse more on the original instance.

zqwzzle, (edited ) in The Holy Trinity of JavaScript

=== is just == with extra steps

kamenlady,
@kamenlady@lemmy.world avatar

It’s to be REALLY sure

thanks_shakey_snake,

It’s actually the other way around. == has to perform type coercions as part of its equality algorithm, whereas === does not, so == has more steps.

ilovesatan, in The Holy Trinity of JavaScript
@ilovesatan@lemmy.world avatar

Gonna show this to my Discrete math professor

Bye, in The Holy Trinity of JavaScript

I don’t work with web stuff, why is js so weird? Can you write a website in other languages, like c# or python?

fiah,
@fiah@discuss.tchncs.de avatar

Can you write a website in other languages, like c# or python?

sure, as long as it compiles to javascript

Bye,

But the browser can’t handle other languages? That seems a bit silly

Anafabula,
@Anafabula@discuss.tchncs.de avatar

If they could, JavaScript wouldn’t be nearly a popular

pankkake,
@pankkake@lemmy.world avatar

There’s a push towards WebAssembly. Officially it’s not supported yet, but most browsers can handle it. I don’t know how mature the project is though.

But yeah, essentially everything on the web is JS.

Static_Rocket,
@Static_Rocket@lemmy.world avatar

Even webassembly needs a JS stub loader right now. I still can’t believe that’s a requirement.

Ephera,

Sure, but you can get frameworks that generate that for you. I’ve written whole webpages in WASM without writing any JS.

You don’t get around reading JS documentation, though. Especially the DOM API is just documented as JS, and you basically hope that your framework makes it obvious enough how to write that in your non-JS language of choice.

Static_Rocket,
@Static_Rocket@lemmy.world avatar

This is exactly the reason why I can’t believe that was ever a requirement. I would have crazy respect for webassembly if it could stand on it’s own as it would allow people to completely move away from JS, but if JS is still in the stack in any way it will introduce a (even if it is minimal) compatibility and maintenance cost in the long run.

Ephera,

I used to think so, too, but on the one hand, the DOM API is absolutely massive. Going through the standardization, implementation and documentation process another time would take decades.

And on the other hand, a language-agnostic API in WebAssembly would mean specifying it WebAssembly itself. And well, it’s Assembly-like, so what’s currently a single line for calling a JS function would turn into tens of lines of low-level code.

Ultimately, you’d want code from some other high-level language to give you a summary of how you may need to call your language-specific wrapper. In practice, that’s likely even worse than translating it from JS, because the high-level call isn’t standardized.

lseif,

i believe they plan to remove that requirement? at least i know they are trying to use a native wasm<->dom api instead of wasm<->js<->dom, which is slow

Static_Rocket,
@Static_Rocket@lemmy.world avatar

Big if true, do you have a link to follow that development? I’ve been curious about some languages that compile to JS+WASM but I’ve been waiting for something like this to finally cut out the middle man and give me an excuse to learn WASM directly.

lseif,

its just what i have heard.

Stumblinbear,
@Stumblinbear@pawb.social avatar

:)

mindbleach,

When you see the entire world agree to one standard about anything, leave it the fuck alone.

Ephera,

There’s actually in theory all the pieces in place to use a different scripting language, because in the early days, there really were multiple. But yeah, the massive DOM API is only really standardized+implemented+documented for JS, so you don’t get around it in the end.

As the others said, though, WebAssembly is starting to become a thing and the JS boilerplate for calling the DOM API can be generated for you.

thanks_shakey_snake,

Most of the weirdness comes from being designed for the web, and specifically for working with forms. The value of a form field will always be a string, which is a simple and straightforward idea, but then the trouble showed up when we tried to make it more convenient to work that way.

cmdrkeen,

Actually, most of the weirdness comes from having been originally designed in a matter of 10 days by a single engineer working to accommodate a tight release schedule.

thanks_shakey_snake,

I mean, do you think that has more explanatory power though? The type coercion rules are actually more elaborate with == than necessary for equality checking, because it was intended as a clever convenience for working with strings. If it was really all about the short timeline, wouldn’t you just skip that and do a more straightforward equality comparison, like the algorithm that === implements?

Besides, it’s not like everything in the language was conceived and implemented in those 10 days. The language has been evolving steadily since then. I’m not even sure if the modern == comparison algorithm worked that way in the first iteration.

Personally, I find it more useful to understand the context that lets me say “that’s a quirky consequence of a sensible principle,” rather than blaming it on the “ten days” legend generically.

BatmanAoD,

I think the “ten days” explanation has the merit of being charitable, because it implies that Brendan Eich wouldn’t have made such short-sighted design choices under more favorable circumstances.

(I do not believe that it’s a “sensible principle” to treat text as such a fundamental form of data that a basic language feature like the equality operator should be entirely shaped around it. Surely the consequences of building an entire language around text manipulation should be apparent by considering how awkward Posix-style shells are for any nontrivial scripts.)

thanks_shakey_snake,

Well… The circumstances were that he was asked to whip up a little scripting language, that felt a little like Java and a little like Scheme, which could be used to add simple manipulations and interactions to web pages. Specifically to web pages. Not webservers, mobile apps, databases, banking systems, physics simulations, robotics… Only web pages. And nobody had even conceived yet of something like Google Sheets-- It was simple HTML forms and DOM manipulation.

IMO in that context, it makes alot of sense. I think it was probably still the wrong decision-- definitely with the benefit of hindsight, and quite possibly even at the time, even in that narrow context. Way more trouble than it’s worth.

But it’s beneficial to know that there was a principled (if misguided) reason behind it, that ties into the nature and history of the language-- It’s not simply “dude was in a hurry and not thinking.” Both are kinda true, but the former perspective helps us understand something useful, whereas the latter doesn’t get us anywhere interesting.

cmdrkeen,

TBF he probably had know way of knowing that the language he was creating would one day end up being as popular as it is now.

I guess the moral of the story is that you can never really predict what long term consequences your decisions might have down the road.

Vent,

What software isn’t?

nintendiator,

Can you write a website in other languages, like c# or python?

Yeah, anything that outputs HTML and CSS can do so. There’s a module for Apache to write webpages in Python (libapache-mod-python) and I’m p sure someone somewhere made a module to do it in Rust already except they’re infighting over whether tag parsing in it should be marked unsafe.

For that matter you do can write web pages in your shell eg.: bash, that’s what CGI is all about.

wabafee, (edited )

I guess why it’s weird because of the loose rules it follows, like what is mentioned about === and ==. There is WebAssembly which kinda acts like Javabyte code or CIL there used to be huge hype that it’s going to replace JavaScript, though it’s not used that much today. I think why there is low adoption is mainly because JavaScript is good enough, it’s widespread and easy to learn.

kpw, in no.. just no

The most offensive thing here is the amount={5} attribute. What is it? It's not XML.

MostlyHarmless,

It’s JSX. It’s used to embed markup into javascript

sndrtj,

It’s to embed Javascript into embedded markup in Javascript

ABC123itsEASY,

It’s a react component and that would be the proper way to give a numerical value in jsx

Huschke,

JSX has grown beyond react, so without further context it doesn’t have to be react.

TrickDacy, in The Holy Trinity of JavaScript
@TrickDacy@lemmy.world avatar

Are people really not using the strict equality operator?

BatmanAoD,

It’s still pretty bad that the normal equality operator is as bad as it is.

TrickDacy,
@TrickDacy@lemmy.world avatar

If you’re provided a tool that solves a problem, I don’t really get ignoring that and continuing to focus on that solved problem as if it weren’t solved because you think all the tools should solve it on principle

bitcrafter,

That’s a little bit like saying, “I don’t understand why people continue to complain about the landmine sitting right there on the ground. We’ve painted it red so you can easily walk around it, so how has the problem not been solved?”

TrickDacy,
@TrickDacy@lemmy.world avatar

Linters are standard practice in any decent shop. You want to change the language to destroy backward compatibility for one already-solved issue

bitcrafter,

Land mines are painted red in my shop. You want to change the language to remove a land mine that everyone competent already knows enough to step around. The problem has already been solved, so why are you continuing to complain about it?

Just to be clear, I’m not actually calling for JavaScript to change, I’m just pointing out that people are right to point out this as being a problem. Having said that, if everyone competent uses linters now so that this feature isn’t used in practice anymore, then getting rid of it shouldn’t even break anything, and arguably code which would break is already broken because it uses an operator that no one should be using, so you shouldn’t be using this code anyway.

TrickDacy,
@TrickDacy@lemmy.world avatar

I can sort of get down with what you’re saying, but on the other hand, we all have design constraints, inside and outside of programming, I think this is a very minor one

bitcrafter,

Sure, but it is also a very gratuitous and pointless design constraint.

masterspace, (edited )

Using linters in a professional setting is more like moving all your actual employees into a different office and letting them use robot avatars in the original office who can never step on that landmine.

The benefit of this is that millions of other robots continue to depend on the original office being exactly as it is and many of them will never change or update, nor is their any need for them to.

Breaking backwards compatibility on the web needs much better reasoning than ‘I don’t want to use a linter’.

riodoro1,

I think nobody said anything about wanting to fix this. We’re just making fun of how absolutely dumb this is.

namelivia, (edited ) in no.. just no

When you are assigned to write database queries at work and your academical background is that online react bootcamp

cupcakezealot, in no.. just no
@cupcakezealot@lemmy.blahaj.zone avatar

please kindly send all javascript into the sun and explode it

db2,

That’s XML though… not that I’m disagreeing.

huginn,

Not XML. JSX. It’s javascript’s answer to markup.

db2,

Gross.

dukk,

The worst of both worlds…

karmiclychee,

It’s like a weaponized grade of whatever they made CSS in JS out of

dan,
@dan@upvote.au avatar

deleted_by_author

  • Loading...
  • huginn,

    If you put it into an XML parser it will throw an error, so it’s no longer XML.

    Sure it was based on it, but it’s not xml.

    leftzero, in no.. just no

    Of course not… where’s the damn <From> tag…?

    mindbleach, in The Holy Trinity of JavaScript

    “The trinity makes as much sense as Javascript” is a vulgar condemnation of Christian dogma.

    Thcdenton, in no.. just no
    Thcdenton, in The Holy Trinity of JavaScript

    Fuck this language with a pineapple

    uid0gid0, in The Holy Trinity of JavaScript

    Violating the transitive property? Go home JavaScript, you’re drunk.

    gravitas_deficiency, in no.. just no

    I want to hate this. I really do. But the problem is… I think I like it.

    lorty,
    @lorty@lemmygrad.ml avatar

    This needs a bit of work but it could be interesting

    naonintendois,

    But how do I know if the WHERE clause is AND or OR?

    gravitas_deficiency, (edited )

    Fair. The constraint nodes should probably exist under an And or Or node.

    akash_rawal,

    We can say default is and and add an Or node for or. Similar to SoP notation, you only write +.

    victorz,

    How about an or boolean attribute.

    adhocfungus, in no.. just no
    expr, in no.. just no

    Not only is this really gross, it’s also straight up wrong. It’s missing a from clause, and it makes no sense for a where clause to be nested under the select. The select list selects columns from rows that have already been filtered by the where clause. Same for the limit.

    Also just gonna go ahead and assume the JSX parser will happily allow SQL injection attacks…

    nephs,

    Booooo

    CanadaPlus,

    I like the format, though.

    ReluctantMuskrat,

    Clearly you’ve not had to write and maintain much XML.

    CanadaPlus,

    I have not. I just thought it looks less goofy than a nested SQL statement split over multiple lines.

    What are the issues with XML?

  • All
  • Subscribed
  • Moderated
  • Favorites
  • programmer_humor@programming.dev
  • localhost
  • All magazines
  • Loading…
    Loading the web debug toolbar…
    Attempt #