[HN Gopher] Swift on the Server (2020)
       ___________________________________________________________________
        
       Swift on the Server (2020)
        
       Author : gozzoo
       Score  : 74 points
       Date   : 2021-04-25 18:22 UTC (4 hours ago)
        
 (HTM) web link (theswiftdev.com)
 (TXT) w3m dump (theswiftdev.com)
        
       | AndrewZM wrote:
       | I just finished implementing a small service that talks to the
       | stamps.com API and I have to say that its been really easy to
       | implement. Deployment via Docker is really easy, for small
       | services Vapor is just great. The Vapor Discord community is
       | absolutely fenomenal.
        
       | rnantes wrote:
       | If you look on the Swift GitHub page you will see tremendous
       | effort going into async/await. It will change the game for server
       | side swift later this year.
        
         | k_bx wrote:
         | I don't know how Swift works, but from my Haskell experience,
         | if your language needs async/await --- it's already failing.
         | Everything is async in Haskell, so you don't need to think
         | about it, and cannot accidentally make a mistake by blocking
         | your async thread by calling sync code from it.
        
           | nextaccountic wrote:
           | > Everything is async in Haskell, so you don't need to think
           | about it,
           | 
           | Then why does https://hackage.haskell.org/package/async
           | exist?
        
             | eecc wrote:
             | I think what he means is that everything in Haskell is
             | "async" because the language runtime is lazy and types can
             | encode parallelism: monads and functors fro sequential,
             | blocking code, while applicatives for independent code.
             | 
             | Not sure if it's actually correct though.
        
         | elpakal wrote:
         | this! lack of proper async support has been a big deterrent for
         | me when considering Swift on my server or even Docker/CLI
         | project. I worried that things like SwiftNIO/Vapor would change
         | significantly when async landed and would require a lot of
         | upkeep... I look forward to async landing.
        
       | sentinel wrote:
       | I've used Swift as the backend language for a side-project
       | website around 2018-2019. I may be out of date, but I wouldn't
       | recommend it. My main reasons:
       | 
       | 1. The server-side frameworks are nascent and still changing -
       | you will really be on the cutting edge if you use them, so be
       | ready to deal with bugs and to change your project structure when
       | the devs drop support for the old framework version.
       | 
       | 2. Related to the above - not having a community around the
       | frameworks means you'll have to figure a lot of stuff yourself -
       | DB connection not working and throwing a weird error? You might
       | not find that answer in SO.
       | 
       | 3. It's a compiled language - so once you deploy, it can take up
       | to 5+ minutes until the code is live; Swift (in iOS at least)
       | doesn't have a good story around build times, so you're at the
       | mercy of improvements in Swift development, probably coming from
       | Apple (unless you get in the weeds and start setting up your own
       | build chain)
       | 
       | 4. Deployment - when I was working on the project, Heroku was the
       | only platform that offered a stack for Swift, which they have
       | since deprecated. I didn't feel like expending the effort to
       | update to the new stack, and will probably re-write the backend.
       | It's been a minute since last I worked with Swift, so maybe more
       | platforms now offer (quick) Swift deployment.
       | 
       | It's a beautiful language and it has a lot of things going for
       | it, but as far as server-side, I recommend sticking with boring
       | technologies: RoR, Django, Node (which is what I'm using
       | currently).
        
         | gjs278 wrote:
         | this is a list of all the shittiest backend languages in one
         | post
        
         | pixel_tracing wrote:
         | A lot has changed and Vapor Swift community is alive and has
         | made significant improvements. The Swift build pack for Heroku
         | works fine. I've deployed a cluster of Swift services in
         | Kubernetes. No issues so far for side projects.
        
           | sentinel wrote:
           | Glad to hear about the improvements! Swift is a great
           | language, I hope to someday get back to using it.
        
       | singularity2001 wrote:
       | It's such a shame Swift has such abysmal support outside Apple,
       | because it is a thousand times more beautiful and pleasing than
       | Rust (while offering _some_ of the safeguard mechanisms).
        
         | oscargrouch wrote:
         | For me there's a sweet spot that is meant for languages like
         | Java, C# and now Swift. For me at least Swift is the natural
         | successor of this family of language for a bunch of reasons.
         | 
         | I would'nt create a program in C++ or Rust if i can do it in
         | Swift, because its much more pleasant, productive and safer
         | (while i love the level of control and speed C++ and Rust gives
         | you).
         | 
         | I would just go for C++ or Rust if the domain i'm solving
         | require this. Even because for some problem domains there are
         | very few languages you can use. And i'm glad that now we have
         | more options on this space like Rust and Zig.
         | 
         | But for business kind of languages, applications with common
         | business logic, for me at least there's nothing better than
         | Swift.
         | 
         | Script languages can be even better at ergonomics and
         | productivity, but they tend to have a price that its only
         | perceived later in regards to efficiency and the lack of a
         | proper type system.
         | 
         | On the server side unfortunately, Swift is too late to the
         | party and Go is already eating the Java cake. But i see a
         | tremendous potential in Swift for user facing applications.
        
           | The_rationalist wrote:
           | The sweet spot you're looking for is Kotlin.
        
             | liuliu wrote:
             | Both are in the same sweet spot. But both are big languages
             | with a lot of features and requires a lot of support.
             | Luckily, so far, they are supported by big companies
             | (JetBrain is no Apple, but has a good track record of
             | supporting this kind of things).
             | 
             | More interesting things are Elixir and Julia, which
             | arguably are in the similar sweet spot (Elixir may be
             | closer to that than Julia).
        
       | neilv wrote:
       | Swift on the server might make sense for an Apple-only full-stack
       | developer, who wants to remain Apple-only, who is happy with the
       | Swift development experience on the frontend, and who is willing
       | to bet their backend on Apple's developer support.
       | 
       | (I'd use Rust, Flask, Node, Go, Scheme, or a variety of other
       | platforms/approaches first.)
        
       | cutler wrote:
       | This guy is in denial. Swift has been dropped by IBM and by
       | Google for Tensorflow and Apple doesn't appear to be doing much
       | to promote Swift outside of iOS and MacOS.
        
         | elpakal wrote:
         | to be fair, Swift for Tensorflow was dropped (Feb 21) way after
         | this article was written (Aug 20)
         | https://github.com/tensorflow/swift
        
         | slver wrote:
         | What does Swift have to do with Tensorflow. It's like comparing
         | apples and oranges.
        
           | programmarchy wrote:
           | There was a port in the works at one point.
        
           | agsnu wrote:
           | After leaving Apple, Chris Lattner (designer of Swift) ended
           | up at Google for a while and there was an attempt to make
           | Swift a first class language for Tensorflow. An interesting
           | podcast on the topic from 2019:
           | https://www.swiftbysundell.com/podcast/58/
           | 
           | Since then he has moved on to SiFive and S4TF has been
           | shutdown. See HN discussion
           | https://news.ycombinator.com/item?id=26117453
        
             | qaq wrote:
             | He is still very active in Swift community though. The
             | level of accessibility of key Swift contributors I can only
             | compare to Elixir.
        
       | GoOnThenDoTell wrote:
       | Does Apple use Swift (on Linux) for their own backend services?
        
         | slver wrote:
         | They use a lot of Java and Scala. But I'm sure it's inevitable
         | some teams are dogfooding Swift on the server as well. Swift is
         | a very nice language.
        
         | danappelxx wrote:
         | Depends on the team, it's a big company. There are definitely
         | swift services internally.
        
         | yakkityyak wrote:
         | Not really. It's mostly Java and Go.
        
           | djxfade wrote:
           | Doesn't the iTunes and App Store backend still run on
           | WebOjbects?
        
             | alblue wrote:
             | Yes, but while web objects was a first class thing in the
             | objective c world back in 1995 the direction swung due Java
             | from about 1997 onwards -- I doubt there's any non-Java WOA
             | any more. For example, it was developed when 32 bit PowerPC
             | was a thing and I don't think it ever made it to 64 bit
             | Intel.
        
           | Longhanks wrote:
           | How can you tell?
        
             | alblue wrote:
             | I worked there, and yes, most of the server side stuff is
             | in Java and Go.
        
               | qaq wrote:
               | Do you need both or would just Go do :) ? Hate Java
        
               | alblue wrote:
               | If you were starting from scratch, you probably would
               | start with a different system. However web objects was
               | their web framework at the time which was ported from
               | objective c to java decades ago and shifting legacy from
               | any technology to another is practically impossible
               | especially if that technology is a cost rather than a
               | product.
        
               | bartvk wrote:
               | Disappointing but perhaps not surprising. Your experience
               | is reasonably recent?
        
             | saagarjha wrote:
             | Either you ask someone who worked there, or you can trawl
             | job postings.
        
         | qbasic_forever wrote:
         | How's GRPC support for Swift? That to me is more of a tell if
         | anyone is using it for internal infrastructure and services in
         | big companies.
        
       | spideymans wrote:
       | I love Swift. It's my favourite language for application
       | development. It's terrible that it's effectively restricted to
       | Apple platforms.
        
       | mark_l_watson wrote:
       | Nice, thanks for writing that up!
       | 
       | Swift is a great all purpose language. Before Google dropped the
       | Swift TensorFlow project, I had started writing a "Swift AI"
       | book. I bailed on the book, and instead have a live-book GitHub
       | repo with code and README files for the various non-TensorFlow
       | projects (which I tossed out to /dev/null). The live book is at
       | https://github.com/mark-watson/Swift-AI-live-book-and-code
        
         | liuliu wrote:
         | Do you want to take a look at https://github.com/liuliu/s4nnc/
         | ? Nothing to serious though.
        
       | qalmakka wrote:
       | It's 2021 and Swift is still nowhere to be found in the
       | repositories of any of the Linux distributions I usually use.
       | It's a big PITA to install, with nothing comparable to `rustup`
       | or even truly universal prepackaged binaries - the official
       | website only offers plain .tar.gzs for either Ubuntu LTS or
       | CentOS, or source code. It's nowhere to be found on FreeBSD
       | either, but there's a .exe for Windows.
       | 
       | Until they expect a novice to download and unpack random archives
       | and set up environments without any kind of support they really
       | can't expect to get any kind of growth on Linux. There's
       | definitely no shortage of new, interesting languages, and too
       | often Swift's support for non-Apple platforms feels more like an
       | afterthought than anything.
        
         | harikb wrote:
         | +1. For non-apple usage, I would want to see lot more GitHub
         | repos with open source support for Swift. Right now even
         | Kotlin/Rust and others beat Swift in that respect.
         | 
         | I really like the language, but I don't know what is holding it
         | back. I wish it solved concurrency without async/await keywords
         | - that would have been a killer feature to compete with Go
        
           | saghm wrote:
           | > I really like the language, but I don't know what is
           | holding it back
           | 
           | From my limited outsider perspective, it seems like Apple's
           | unwillingness to go out of their way to support Linux is
           | what's holding it back. There seem to be a large number of
           | people interested in using Swift on the server, but without
           | first-party support, Swift on Linux will always be playing
           | catch up, as new features will always land on MacOS first and
           | often not be designed with any regard to how they'll work on
           | Linux.
        
         | pjmlp wrote:
         | Just like Objective-C, it is a language for Apple platforms and
         | that is about it.
         | 
         | Try to use GNUStep to see how much an Apple language has
         | managed to thrive outside of the ecosystem.
        
           | Apocryphon wrote:
           | Objective-C at least has Oolite as a cross-platform killer
           | app to show off.
        
           | raydev wrote:
           | Did Apple ever support GNUStep or make an attempt for ObjC to
           | work on Linux in this millenium?
           | 
           | Because they do have people focused on maintaining Swift
           | support for Linux. So it's a bit different.
        
           | slezyr wrote:
           | I'm not sure that you can call this "thrive"
           | 
           | https://en.wikipedia.org/wiki/Category:Software_that_uses_GN.
           | ..
        
             | codetrotter wrote:
             | That's what they are saying, it's not thriving.
        
         | _-david-_ wrote:
         | I am not sure which distros you use, but Swift is available in
         | Fedora and EPEL (CentOS/RHEL) 8. The package name is swift-
         | lang.
        
         | eecc wrote:
         | To be fair, the instructions on
         | https://swift.org/download/#using-downloads are fairly
         | straightforward and copy-pastable.
         | 
         | Indeed the prominence given to pgp signature verification is a
         | breath of fresh air compared to the current wave of pipe-shell
         | intros: it's not gatekeeping to ask a would-be programmer to
         | exercise some reading skills and internalize the idea of
         | signature verification.
         | 
         | :)
        
         | xbar wrote:
         | I had similar troubles trying to find the Swift ecosystem. The
         | author's opening statement that Swift is everywhere rang
         | hollow, even if it might be technically not strictly false when
         | viewed from a certain angle under the right lighting
         | conditions.
         | 
         | So, I'm playing with Rust.
        
           | skohan wrote:
           | Same. I love programming in Swift, but deploying it is a
           | PITA. I got tired of waiting around for the cross-platform
           | story to improve, so I moved on to Rust. It's refreshing to
           | use tools which feel like they're made by someone who
           | actually wants you to use them.
        
         | heavyset_go wrote:
         | Swift had a chance 6-7 years ago when it first came out to
         | capture mindshare on platforms other than iOS and macOS, but
         | that chance was squandered. There's absolutely no reason
         | someone would choose Swift over even .NET Core on other
         | platforms these days. Thankfully, other languages have excelled
         | during that timeframe.
        
         | whatatita wrote:
         | I would hapily give it a try with a `brew install swift` but
         | any involved install process is off putting.
        
           | NobodyNada wrote:
           | Homebrew requires the Xcode command-line tools, which
           | includes the Swift toolchain. If you have `brew`, you already
           | have Swift.
        
             | iddan wrote:
             | Brew exists for Linux too
        
               | jolux wrote:
               | It does, but I'm not quite sure why you'd use it instead
               | of apt or dnf or pacman...
        
               | [deleted]
        
               | alrs wrote:
               | if you're running brew on Linux, throw in the towel, it's
               | over.
        
         | H_L wrote:
         | Swift is absolutely an afterthought on non-Apple platforms.
         | 
         | Apple doesn't even provide ARM slices for the official Swift
         | Docker images (https://hub.docker.com/_/swift?tab=tags) which
         | makes server-side development on their own cutting-edge M1
         | (ARM) machines basically impossible.
        
       | tracer4201 wrote:
       | I was looking for a language to dive deeper into, and I was going
       | to pick between Swift or Rust. I ended up going with Rust. Why? I
       | wanted something to replace C++ that I can write once and re use
       | on Android or iOS. Also, I found lots of interesting projects
       | where other people were using Rust. I don't just jump the
       | bandwagon, but I just didn't see that much excitement for Swift
       | or really understand it's future as a general purpose language
       | outside of Apple development.
       | 
       | And I love Objective C, but again, I only ever saw it being used
       | for Mac and iOS.
        
       | jonplackett wrote:
       | I love Swift. Especially the newer versions (swift 1 and 2 were
       | so awful I gave up on it completely but 3+ are great).
       | 
       | But... I wouldn't personally use it for anything other than
       | iOS/Mac development because it's always so hard to find examples
       | / tutorials / help on stackoverflow for less-used languages and I
       | imagine that's what will be in store for me if I go this way.
        
         | cvwright wrote:
         | This is unfortunately true. I just wrote a very simple little
         | web service in Vapor.
         | 
         | Vapor itself is fantastic, but for documentation and examples,
         | you're pretty much limited to (1) the Vapor docs (2) the Vapor
         | API docs buried on GitHub and (3) the source code. Fortunately
         | the source itself is pretty well organized and easy to follow.
        
           | jonplackett wrote:
           | How did you find it? Was it worth the extra effort VS using
           | some other language?
        
             | cvwright wrote:
             | Overall I found it pretty nice.
             | 
             | It's hard for me to compare to other languages in this
             | space, like Go or Rust, because I have basically no
             | experience with them beyond the very most basic
             | introductory toy projects. My choices came down to Python
             | (with Flask or aiohttp) or Swift with Vapor.
             | 
             | There were a couple of weeks where I wished I had just gone
             | with Flask and been done with it.
             | 
             | But beyond the short term, now that I have it working, I'm
             | glad I went with Swift. One big plus is that I can reuse a
             | bunch of Swift Codable types between my iOS app and the web
             | app. Another is that I feel like I have a better
             | performance/concurrency story than I'd get with Flask.
             | 
             | Edit to add: I don't think getting started with Vapor was
             | any harder than with aiohttp. And for me, it was a lot
             | easier than learning a whole new language like Rust.
        
         | [deleted]
        
       ___________________________________________________________________
       (page generated 2021-04-25 23:00 UTC)