Hacker News new | ask | show | jobs
by giancarlostoro 2720 days ago
Apple implementing a spec designed by Microsoft!?!?! Joking, I love that Microsoft came out with LangServ though, felt like something we all should of figured out years and years ago, good thing they wanted to make a cross platform text editor :) I gotta give Microsoft their props, they hire some really smart people who do some great things for the software industry.

Props to Apple for doing this too, I am looking forward towards the next stages for the LangServ v4 spec, not sure what more they could do to make it awesome, but I'm sure there's plenty that could happen in the future in this space.

9 comments

Yeah it seems so obvious in hindsight: of course a language should have ONE editor-optimized compiler/analyzer for IDE like features, which can be reused by all editors out there instead of building half-baked implementations for each IDE.

But many things seem obvious in hindsight.

IMO the reason this rather obvious idea took so long to be implemented was because on one hand the closed source vendors didn't really have a strong incentive to provide something like that (you support your own ecosystem and let the others deal with theirs) and on the other the open source community was spread across many compilers and interpreters which made standardizing difficult. The only project I can think of with enough clout to impose a system unilaterally was GCC, which was notoriously hard to extend and modularize (especially before LLVM started shaking things up a ~10 years ago).

So overall the effort to create a protocol and then getting everybody to accept it was rather huge and the chances of success rather slim. It's great that MS finally decided to do it and the huge popularity of VScode (especially with younger coders) seems to have helped a lot.

I recall the lack of extensibility in gcc being deliberate, according to RMS -- he wnated everything around gcc to be free, and plugins would allow for non-GPL or even closed source code.
Deliberately harming your users to own the corps. Jokes aside, open source is great, but RMS’s perspective is extreme. I don’t think it’s an exaggeration to say that the overall quantity and quality of open source software is much greater because of closed source software because companies fund open source initiatives with profits from closed source initiatives and then the second order effects of maintaining a huge pool of professional programmers, some of whom use their skills to contribute to OSS.
I think you have to put his principles in a historical perspective. Sure it sounds somewhat extreme today when OSS dominates many layers of our business stacks. But assuming that the industry would have naturally seen the OSS light is far from a given IMHO. I think copyleft licenses where a very important springboard to start the virtuous OSS cycle.
No one should make money selling software. Beg for donations or sell ads if you need to pay your bills. Or get a cushy university appointment like me, and spend your days polemicizing about freedom.
That's your moral view, but you missed my point which is that it's incompatible with a florishing ecosystem of open source software.
Open source software existed before closed-source software was even a thing. Software used to come in source-code and freely-redistributable form; it was basically funded as a loss leader for things like hardware and support, that could be billed for. Many companies today which fund FLOSS have very similar models, only with other sorts of value-added services being added to the toolset. Others have even managed to pay for FLOSS directly via crowd-funding.
To be clear, "OSS predates CSS" is not a refutation for "CSS makes the OSS ecosystem larger and more robust". Apologies if that's not the point you were trying to make.
the funny thing is that gcc was pretty easy to extend before the eggs split. unfortunately, it was also pretty stagnant and nowhere near as good of a compiler suite as it is today.
The key element was Andreas Heijlsberg work on the Roslyn C# compiler which exposed all stages as APIs (e.g. AST etc). He calls the dragon book as significant outdated when it comes to modern compilers (Channel9 video).

That then transferred to TypeScript, which again influenced VS Code. OmniSharp was then externalizing it. In VS Code I think Erich Gamma took it over and put it into standardized a protocol.

The Tiger book is a better reference nowadays.

Another good alternatives are "Compiling with Continuations" and "Lisp in Small Pieces".

I wish there was a book that teaches how to create a programming language based on the Roslyn idea.
Well that's great to know. I just bought the dragon book. Is there a better book out there?
It is still a pretty damm book to read about compilers, if not anything else, at least from historical perspective.

The Tiger book, "Compiling with Continuations" and "Lisp in Small Pieces" are some of my favourite ones.

Then if you want to learn about language semantics validation, "Formal Syntax and Semantics of Programming Languages: A Laboratory Based Approach".

> many things seem obvious in hindsight.

The best ideas seem obvious in hindsight. I've had the experience of reading some books that explain groundbreaking ideas so well that you feel "shit, that's obvious. I should have thought of that". I think Language Server protocol is similar.

It sounds pretty much like Steve Yegge's Grok project (now "Kythe") from over a decade ago. They just started at a different use case.
> something we should have figured out years ago

I actually blame Stallman for that. He insisted that GCC should not dump any AST or provide embeddable functionality so that actors like Apple wouldn't be able to build nonfree software on top of it. However, that meant you also can't build any free tools on top of it, so everyone was forced to make their own ad-hoc C++ parsers and analysers. Once clang appeared there were much higher quality tools available. There's rtags that's a sort of proto-langserv implementation for C++ from before Langserv was a thing.

I suspect Stallman's decision was right at the time, but it did hold back free tools.

Do you have a link to such a proposal being put down by rms? Curious about this.
For me the takeaway is that Apple is _really_ serious about supporting the use of Swift outside their own ecosystem. After all XCode won't be using this, at least for a while, so clearly it's aimed at making it easier to use Swift outside their own tool chain.
Nah, Swift still does not support Windows on their official builds.
Fair point, but nobody’s writing backend software to support iOS apps on Windows servers so not something Apple cares about.

But then backends for iOS apps are part of Apples ecosystem, if peripherally, so I stand corrected.

Nor anyone is writing anything big in Swift on GNU/Linux, which even with builds available, is still pretty much WIP.

Vapor, Perfect, and Kitura are no match for the offerings in Java, .NET, Go, OCaml, Haskell, Erlang.

Of course, but then comparatively few people are writing iOS apps in Swift either. It's still a very young and still evolving language ecosystem, so building out the tooling around it is incredibly important in order to support it's growth.
It seems to be a very un-Apple thing to do. Do you know why they would want to push it?
Get more people using Swift serverside perhaps?

I can imagine that having a swift backend for your swift mobile app would be a lot nicer to work with than converting back and forth from a bunch of stringly-typed JSON.

Yes, this is it precisely. Swift already has decent momentum for serverside usage with Vapor, Perfect, and Kitura among others. By adding LSP support, Apple is adding to that momentum and pushing it closer to critical mass.
I'd love to use Swift on the backend, but I don't want to use XCode.

I only develop part-time, as my main job is financial in nature, but god, it is really hard to find good learning material for serverside without depending on XCode. In particular, learning the server frameworks is almost not worth it. By using one language, I can keep my productivity acceptable.

If anyone has any references, I'd be super thankful!

> stringly-typed JSON

Off topic but I love this, definitely stealing it. Did you coin this?

I learned this term from a 2012 blog post, which summarized a (now deleted) Stack Overflow question:

https://blog.codinghorror.com/new-programming-jargon/

My other favorite from that list is "baklava code" -- code that has too many layers.

This is great, thanks!
As the bald guy said: "Developers, developers, developers"
Now if they'd only let me compile my iOS app on Linux ;)
What if this is because a lot of internal Apple developers are using VSCode instead of XCode, and they wanted better support?
Not impossible, but unlikely. For Mac, iOS, tvOS, and watchOS projects at Apple, Objective-C is still the dominant language due to all pre-existing projects being written in it. Swift is used in a few places — most notably the macOS Dock has been written in Swift for at least a couple of iterations now — but bulk adoption won’t come about until Swift achieves ABI stability with version 5.
> the macOS Dock has been written in Swift for at least a couple of iterations now

Dock is only partially written in Swift. A significant portion is still Objective-C.

That isn't what they announced at WWDC 2017, during the state of the union.
When did they mention this? I can't find this in the video.
> Apple implementing a spec designed by Microsoft!?!?!

Not new at all. They support AJAX in Safari. Macs use SMB for file sharing.

I did say I was joking, but yeah, I love that AJAX was basically reverse engineered from IE.
And they support MS Office files formats in Pages and Numbers...
We did figure it out years ago; it's called Swank (for SLIME). While it was intended for Lisp dialects, there's also an implementation for JavaScript.

LSP is Swank for other kinds of languages, and is certainly welcome, but neither the idea nor successful implementations of that idea is new.

Kinda like Google dropping an in-house language to use TypeScript -- designed by Microsoft -- as the language for building their JavaScript UI framework. :-)
That's one thing I always find a bit funny. There's swarms of developers who love TypeScript over regular JS. Personally I rather use whatever is default first, but that's just me. If you wanna pay me to do TypeScript cool I'll use it.
I am guessing OmniSharp [0] is based on this LangServ protocol? I tried OmniSharp last year and a few years prior to that, since I wanted to develop in C# using SublimeText. I can only say that both times it's been a depressing experiment. It seemed the OmniSharp server was really buggy and kept crashing.

---

[0]: http://www.omnisharp.net

I think it’s the other way around: LSP was based on ideas prototyped by omnisharp.

I used it years before LSP was announced.

>Apple implementing a spec designed by Microsoft!?!?!

Mind you, the current recommended file sharing protocol on macOS is SMB. (since Apple have deprecated AFP)

Really? Then why doesn’t it work?
They’ve added some Apple-specific extensions to SMB, which can result in suboptimal performance when browsing non-Apple hosts.

https://lists.samba.org/archive/samba-technical/2014-Septemb...

Clojure community pretty much had it solved for clj & cljs with nRepl & cider-nrepl & co.
Did that help someone who wanted to work on clj or cljs inside Vim for instance? It's not really a comparable solution until it's multi-language, multi-editor, cross-platform, and supported by many different teams and communities.
> Did that help someone who wanted to work on clj or cljs inside Vim for instance?

Yes, it did.

from https://github.com/clojure-emacs/cider-nrepl#editor-agnostic

> Projects like vim-fireplace and vim-replant are making use of cider-nrepl already.