7 ms·
ECMAScript for XML - Direct XML Syntax in ECMAScript
- flakiness 5y agoMartin Odersky once mentioned that he added XML literal to Scala because it was 2000s (citation needed). Although it's hard to refrain from ridiculing these, it's probably not fair to do it. 2000s had its own collective craziness and this was one of them. We'll have such ones for 2020s but we can only spot it years later. (Don't name it to show your smartness. Pointing a few is not hard, but pinpointing all is not possible unless you're a pure naysayer.)
- jchw 5y agoSome things were bad ideas but we never really figured out why they were actually bad. It’s easy to incredulously state “of course it’s bad because X” but it takes some deep analysis to really get closer to the core of things. Sometimes the results are not what you would’ve expected at all. Sometimes it feels obvious in retrospect. And then some ideas are actually great, but the execution of the idea was poor. This can really make it seem like the idea itself is bad or impractical even though it’s not. Personally, I liked E4X. Its probably better off gone, but I think the idea wasn’t so awful. It sounds bad in retrospect, but I used it and it was far from the worst way to interact with XML.
- MaxBarraclough 5y agoI'm out of the loop on this one - does Odersky regret it because JSON has largely supplanted XML, or does he regret it because it's not the sort of problem that is best solved with a language feature?
- esarbe 5y agoBecause it unnecessarily complicates the grammar and because there are better ways to accomplish the same thing.
- naranha 5y agoInteresting how the embedded XML syntax resembles today's JSX, I wonder if it took inspiration from it.
- Marazan 5y agoFor me the fore-bearer of JSX is Flex's MXML.
- deleted 5y ago[deleted]
- reaktivo 5y agoIt's listed as Prior Art on JSX's Github https://facebook.github.io/jsx/#prior-art https://facebook.github.io/jsx/#prior-art
- slver 5y agoThey're both XML-like. But they serve completely different purpose and have different semantics. E4X produces a standalone (pure markup) mutable XML node tree intended to encode data for cross-platform communication and data exchange. JSX produces an non-standalone (links to JS symbols, functions, etc.) node tree intended to encode DOM fragments for UI updates. E4X is not needed today, because we use JSON for data exchange. So E4X is now simply... JS objects.
- eyelidlessness 5y agoAnd JSX is renderer-agnostic (and even implementation-agnostic). You can use it to render anything from CLIs to smart TV interfaces.
- slver 5y agoI'm curious what I'd use JSX for in a CLI :)
- 5y ago
- jchw 5y agoGood ol’ E4X. It actually worked in Firefox, but I only ever used it in ActionScript. It was a little strange, but quite useful in some regards. There’s a bit more than just literals going on there.
- Aldipower 5y agoI've used E4X a lot in heavyweight AS3 applications. It was nice and readable to work with. Built a complete offline museum with it, containing more then 160 interactive media stations you could walk through. This is 10 years ago. TBH not sure, how I would build the museum today. There seems a lack of technology for this niche nowadays.
- Marazan 5y agoI loved E4X in Actionscript.
- codeulike 5y agoI've been using XML here and there for about 20 years now. It does have its uses. But I still don't have any idea what all that xmlns stuff is about, especially all the variations of it that involve colons. Like I know its something to do with namespaces or whatever. But to this day I open an XML file and in the first few lines there's a few xmlns pointing to some random complicated old urls and it just has this air of 'ignorable old overspecified thing because someone got too excited twenty years ago' (except sometimes its not ignorable and then things get messy) edit: yes I know what namespaces are for, and some of the simple uses are simple, but to try and understand xml namespaces and schemas in full is really complicated. 95% of the time this stuff just seems like fussy cruft.
- AndrewDucker 5y agoIf you're using Schemas for your XML then you need namespaces in case you've got two different elements from different schemas that have the same name. (We use schemas for all of our XML, because that way we can generate strongly-typed objects from them.)
- tonyedgecombe 5y ago>If you're using Schemas for your XML then you need namespaces in case you've got two different elements from different schemas that have the same name. Isn't that where the problems start, I'm willing to bet 99% of XML documents don't have more than one schema. We have ended up with a ton of complexity to support a minority of use cases. It's no wonder people embraced JSON.
- buzer 5y agoThese days I wouldn't be surprised if fairly large portion of XML documents that are still in use/produced did have multiple schemas. Most of the simple use cases have already moved to JSON or similar formats. One very common case where there are multiple schemas is SAML. SAML protocol responses have their own schema, SAML assertions have their own schema, assertions usually define their type with different schema (XML schema instance) & XML signatures have their own schema. https://www.samltool.com/generic_sso_res.php https://www.samltool.com/generic_sso_res.php for example
- benibela 5y agoI liked this syntax so much I now use XQuery for everything
- jansommer 5y agoI would really like to use JSONiq as well, XQuery for JSON. It's such a beautiful language. Eagerly following along the development of RumbleDB and hoping to extract JSONiq from that one day (there's also support for XQuery)
- benibela 5y agoXQuery 3.1 is also XQuery for JSON Having spend a lot of time to implement both XQuery and JSONiq, I rather wish there was only one such language
- jansommer 5y agoMay I ask why you wish there was only one? I'm researching JSONiq on a hobbybasis and am curious about all sorts of experiences with it
- bokchoi 5y agoHey, I worked on the specification for this as a fresh out of school test engineer! Ah, the memories. It didn't take over the world, and in hindsight it should have worked a little differently, but I still think it's pretty neat. I haven't used it in a few years now but it is really easy to transform or extract data from an xml doc using Rhino and E4X.
- trzeci 5y agoActionScript 3.0 was a great example of implementing E4X. I miss that language a lot. It has quite a few great concepts: XML, intuitive implementation of objects, where key can be anything. Statically typed. Prototypes. Typed vectors. for..each loop. Dictionary with weak keys (oh that I loved so much, it was so powerful to implement better memory management on top of this). I spent like 10 years developing in it, now it's my 6 year since I've touched it last time : (
- ludamad 5y agoI did a Masters on gradual typing for JavaScript/TypeScript. I definitely felt that a great practical implementation was lost in AS3. It made me first appreciate that dynamic typing is a godsend in truly dynamic cases, but otherwise types were my friend
- paulirwin 5y agoAnother example of language support for XML is VB.NET. I loved this feature when I last used it (over 10 years ago), especially the LINQ syntax for generating tags. https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/xml/xml-literals-overview https://docs.microsoft.com/en-us/dotnet/visual-basic/program...
- olliej 5y agoFun fact: e4x is part of why JS has for(of) instead of something more sensible
- WorldMaker 5y agoHuh? The current behavior of for(in) dates all the way back to the original JS standards (ES1). ES2015 had to use "of" to avoid breaking compatibility with existing ES1 for(in) usage. (Being able to replace/reuse for(in) would have kept JS more in line with Python which is also for/in.) It seems fairly sensible in comparison to some of the other proposed options. Unless you were hoping for an entirely new keyword such as foreach (like C#'s foreach(in)), and in that case yes they couldn't do that because ES3 settled on a Reserved Keyword list and they didn't want to break ES3 compatibility either. While ES3 attempted forward compatibility by including some keywords related to E4X (and ES4's type system), the list of keywords they came up with in ES3 wasn't "because" of E4X. (It was because of "strict mode" and defining what "strict" meant as rather, er, strictly as possible.)
- olliej 5y agoSigh. As the person who came up with for(of) I can say that's not the reason. for(in) existed in JS, and the semantics were never going to be changed, that wasn't something that was on the table or was ever considered. However other languages have syntaxes like: for each (...) foreach (...) for ( .. : .. ) All of which would be more consistent and wouldn't require a non-reserved word be reserved in one context. We couldn't use `foreach` or `for each` as they conflicted with e4x - one directly, the other by being sufficiently similar to not be plausible. More depressingly for(:) was killed because of the zombie "typed JS" proposal.