Readit News logoReadit News
rajangdavis · 9 years ago
I have been working with PHP steadily over the last year, and, coming from a Rails background (learned it at General Assembly), I used to hate the "ugly" syntax, weird method calls, and strictness of PHP (missing a semicolon can be damnable offense in the eyes of the compiler). Ruby to me seemed a lot more flexible, but over time, after hacking at PHP, I have come to appreciate it as a language that gets the job done.

My preference is still with Ruby on Rails; however, I have been thinking of using a more lightweight framework like Sinatra. I am still impressed with how flexible and expressive Ruby can be. Alongside bash, it has really become one of my favorite languages to work with particularly for scraping/writing automations.

Would love to get into Node, but the idea of javascript on the back-end hurts my head. All I have used Node for is for basic utilities like uglify-js and minifier. Been hacking on Angular and Mithril on the front end, I love javascript as a front end language, but still haven't wrapped my head around Node. Javascript isn't too far off syntax-wise from PHP, but my struggle with Node is how to organize the codebase as well as understanding a clean separation of concerns when it comes to front-end and back-end code.

Might be off topic, but I am really excited to see how the GraalVM is going to impact languages like Javascript and Ruby.

zingermc · 9 years ago
I haven't found a web server language to my liking yet. Maybe I'm too picky, but I'd like to satisfy all of these requirements:

- Static typing -- I want to eliminate as many runtime bugs as I can

- Type inference -- Like in SML and Haskell

- No JVM -- Personal preference, but I'd rather not pull in this monster if I don't have to.

- Good pre-made web framework -- I've briefly looked at OCaml but the web frameworks seem disappointing. Tell me if I'm wrong!

beefhash · 9 years ago
With .NET Core having recently hit 1.0[1], wouldn't C#/ASP.NET Core fit the bill now?

[1] https://blogs.msdn.microsoft.com/dotnet/2016/06/27/announcin...

wtetzner · 9 years ago
It sounds like they might prefer F# over C#. Also, if they're not willing to pull in the JVM, it seems unlikely they'd be happy about pulling in the CLR.
electrotype · 9 years ago
Modern JVM based frameworks are far from being "monsters", and you have a lot, lot of choices! Many of them have an embedded HTTP server so they are very easy to develop and deploy.

In case you want to investigate some:

- https://grails.org

- http://sparkjava.com

- https://www.playframework.com

- http://projects.spring.io/spring-boot

- https://www.spincast.org

- http://jooby.org

- http://www.ninjaframework.org/

- http://www.dropwizard.io/0.9.3/docs/

outworlder · 9 years ago
What about Rust?

It has static typing, limited type inference (function parameters need their types declared - by design - will infer otherwise), no JVM, and has several web frameworks. Not sure if any of them would be considered "good" by your definition, but check it out: https://github.com/flosse/rust-web-framework-comparison

Cshelton · 9 years ago
Rust is exactly the language I want for the web. Unfortunately, the ecosystem is still a little too immature. In time...someday...

I've already decided my next service/api will be in Rust.

frankpf · 9 years ago
Check out Ur/Web[1].

It's a functional, pure and statically typed language inspired by Haskell. It claims that programs that compile successfully cannot:

- Suffer from any kinds of code-injection attacks

- Return invalid HTML

- Contain dead intra-application links

- Have mismatches between HTML forms and the fields expected by their handlers

- Include client-side code that makes incorrect assumptions about the "AJAX"-style services that the remote web server provides

- Attempt invalid SQL queries

- Use improper marshaling or unmarshaling in communication with SQL databases or between

[1]: http://www.impredicative.com/ur/

montyedwards · 9 years ago
Rust has:

- Static typing

- Type inference (and pattern matching)

- No dependency on JVM, .NET, or BEAM

But the number of web frameworks, etc. for Rust sucks compared to that of older languages like Go. Go 1.0 was released in early 2012 and Rust 1.0 in May 2015.

Rust is more verbose than Go, but Go's FFI to functions written in C isn't as efficient and since "cgo isn't go", I'm not sure cgo covered by Go 1.0 compatibility guarantee.

On the other hand, Go has tons of "batteries included" plus web frameworks so that is pretty awesome to have on stable platforms (I don't consider Windows a stable platform for Go and got burned several times, but Go works great on FreeBSD & Ubuntu.)

I suspect Go & Swift won't have robust reliability on Windows (compared to other platforms) but they'll be rock solid on the ones they favor. Rust may have better prospects regarding this, but Rust still too new this year for web server language -- wait until MIR is integrated and a couple more releases after that.

eatonphil · 9 years ago
I will be revisiting OCaml sometime in the near future to write a more solid web framework for it (compared to OWebl). This time it will be based on FastCGI rather than doing the networking itself I think.

In the meantime, I'm more actively working on Ponyo for Standard ML right now. Take a look at the ponyo.org server[0] for a brief glance at what it can do today.

Check out the /r/sml wiki if you are trying to get started. And please join #sml on Freenode if you have any questions!

[0] https://github.com/eatonphil/ponyo/blob/master/site/server/s...

cel1ne · 9 years ago
The nice thing about the JVM is that it's contained and has excellent monitoring and profiling tools.

Anyway: What about kotlin [0]?

* 100% java compatible * can compile to the JVM and javascript, so you should be able to run it with node.

[0]: https://kotlinlang.org/

Googling found this: https://jonninja.github.io/node.kt/

softawre · 9 years ago
We use Kotlin. Their JS transpiler stuff is still pretty new, though they are back to working on it post 1.0.

If you use Kotlin, use the JVM - at least for now.

b3b0p · 9 years ago
Doesn't Spring Boot support Kotlin?

https://start.spring.io

supster · 9 years ago
I have very similar requirements, and I think within the next few years, Swift will fill this niche very well.
AsyncAwait · 9 years ago
Agreed, Vapor[1] is coming along nicely.

1 - https://github.com/qutheory/vapor

yozhik · 9 years ago
I've just started using D for this sort of thing. It has web framework called Vibe.d (http://vibed.org/). I'm pretty happy with it, and it seems to satisfy all of your requirements. Note that I've only just started to use it, so I don't know how well it will hold up over time, but I'm enjoying it so far.
rzhikharevich · 9 years ago
Doesn't Go fit these requirements?
AsyncAwait · 9 years ago
Go has a relatively weak, unsafe type system despite being statically typed. Also, lack of generics, optionals or tagged unions is kind of a bummer.

Deleted Comment

orclev · 9 years ago
There are a couple Haskell frameworks that might fit the bill. Yesod is a big one, although some take issue with its excessive use of Template Haskell. Others to look at would include Servant, and the very confusingly named rest framework.
gshulegaard · 9 years ago
With type hints in Python 3.5+, does Python fit your list? Genuinely curious.
gshulegaard · 9 years ago
Just to add some details:

- Static typing -- Type hints enable restriction of the dynamic typing behavior of default Python to mimic static types

- Type inference -- Not familiar with the particular behavior of type inference of Haskell, but yes.

- No JVM -- Definitely no JVM, but not particularly high performance so...there is that.

- Good pre-made web framework -- Lots of good ones, Python ecosystem is fairly rich in general, but ones I have used: Django, Pyramid, Flask, etc.

zingermc · 9 years ago
That's a really good point! I have used the CherryPy framework before, but I've never used Python type hints before.
WayneBro · 9 years ago
Maybe Typescript? (On Node.js obviously for server side).
ShirsenduK · 9 years ago
You need Elixir with the Phoenix framework!
lkitching · 9 years ago
Isn't Elixir dynamically typed?
zelon88 · 9 years ago
PHP. It may be old, tricky to debug, and cumbersome to write long projects with but the ability to bounce in and out of logic on a simple, proven, well adopted stack that has plenty of knowledge-base and ready machines everywhere has it's advantages. Plus, I've heard a lot of developers knock PHP but I've yet to see a problem solved with Ruby or Python that couldn't have been solved with PHP.
VeejayRampay · 9 years ago
That last sentence is pretty true of any combination of languages and it feels defensive.
irrational · 9 years ago
Its pretty much the definition of Turing complete.
JustSomeNobody · 9 years ago
It is and it is.
Joeri · 9 years ago
After about a decade programming PHP, I'm now mostly using java 8 (play framework), with some node.js thrown in on the side. I've found that PHP's benefits are also its downsides. The simplistic concurrency model where every request starts from a blank slate and has no asynchronicity is easy to understand, but difficult to optimize for performance. The large knowledge base is great for getting a solution, not so great for getting the right solution. The "just keep going" error handling philosophy is excellent for newbie programmers, but terrible for guaranteeing correct operation. The interpreted zero-build dev model is excellent for quick edit-reload cycles, not so great for large-scale refactorings where you want to know you've correctly adapted all uses of a core api.

Java has improved a lot from what I remember it used to be. Java 8's elimination of a lot of the boilerplate, coupled with the simplicity of the play framework, and activator's hot reloading of code for quick edit-reload cycles brings it on par with PHP as far as developer comfort is concerned, at least for me. In my experience java is nicer for large-scale web dev, while PHP is nicer for a quick side project. Node with javascript I would put more in the PHP camp than the Java camp. It is great for side projects, but scaling it up necessitates switching languages to something like typescript with a whole-project build, which takes away much of the "ease" that something like PHP or Node provides.

jimbokun · 9 years ago
"Plus, I've heard a lot of developers knock PHP but I've yet to see a problem solved with Ruby or Python that couldn't have been solved with PHP."

Of course. Since all of those languages are Turing-Complete, this is trivially true.

geofft · 9 years ago
Solving a problem and computing a function are almost entirely unrelated concepts. For instance, solving a problem usually takes the form of "write a system which can do X, within budget, on schedule, in a maintainable way, with integration with these services, with at least this much reliability." Out of that list, the only thing a function can compute there is to do X, once. And maybe not even that; functions can't even do I/O.

Unless you have developers who are super excited about writing web services via BPF filters, Turing-completeness is not a meaningful way to compare programming languages; that is, that's not the reason why we have multiple programming languages in the world and why different people or projects prefer different ones.

yulaow · 9 years ago
I still use PHP for a very simple reason: stable libraries and extremely well done documentation.

As a language and general features I prefer by far node.js... but i hate the total lack of decent-level documentation I found over the years.

simonw · 9 years ago
"I've yet to see a problem solved with Ruby or Python that couldn't have been solved with PHP"

Scientific computing is extremely strong in Python - numpy, scipy, scikit-learn etc - and a lot of it makes use of language features that aren't present in PHP (at least as-of a few years ago, my PHP experience is rusty at this point).

niroze · 9 years ago
Languages that are cool/hip/popular here will win.

Odd that Golang was left out with it fitting that criteria... but I still stand by the assertion :)

aws_ls · 9 years ago
I saw it just now, so by now its already added and stands 6th most used (not bad for a relatively new language) for server side web development.

I like it a lot, have been using it since 2013. I bet its going to rise in usage.

A minor point regarding its name usage. We should always call it Golang on HN & comments etc or in searches, as 'Go' is such a common word. I always try to to a ctrl-f for golang. And I am sure many other gophers do.

whatnotests · 9 years ago
"Go" is in the list. Perhaps you just missed it?

Edit: I see, based on other comments, that Go wasn't part of the original lineup.

luisehk · 9 years ago
Python. Django or Flask depending on the projects' needs
shadeless · 9 years ago
Elixir

Edit: I wrote this comment before Elixir was added to the poll.

Deleted Comment

supernintendo · 9 years ago
Elixir and Ruby at work (previously Go as well). I have also done backend development in JavaScript, PHP, Python and Clojure.

Elixir is certainly my favorite to work with, so far.

karmakaze · 9 years ago
Was Go phased out leaving Elixir/Ruby, or was that at a different company?
supernintendo · 9 years ago
Neither, still running Go for a standalone service in production just fine. There hasn't been a need to work on it for quite a while.