7 ms·
Udash – Scala and Scala.js Reactive Web Framework
- __erik 9y agoThis actually looks really cool. I really like the idea of RPC over websockets built into the framework, I don't do much webdev anymore but I dont think I've seen that before. Looks like a really solid project
- rusbus 9y agoThis is awesome. Clojure has had similar frameworks for a while, but Clojure has a fairly steep learning curve. Really excited to try this in Scala. Wonder if this will be a new trend away from the totally separate webapp + rest API model...
- alextheparrot 9y agoI use Scala daily and have never used Clojure - what creates the steep learning curve? Scala also has a lot of features between “Beginner” and “Advanced” which can really add to the learning curve (Implicits being a good example).
- briankelly 9y agoI haven't tried Clojure yet, but compared to Common Lisp, Scala let's you ease into the advanced features but lisps demand an immediate shift in thinking. You can basically write Java with Scala without much friction.
- alextheparrot 9y agoIt lets you ease into it insofar as you don’t use libraries that heavily rely on more advanced features. Trying to understand how Circe is actually serialiazing your case classes (Or why it is failing) can be quite difficult without understanding Shapeless.
- threeseed 9y agoIt took me weeks to get Circe working on my project. But this compiler plugin makes it infinitely easier: https://github.com/tek/splain https://github.com/tek/splain
- alextheparrot 9y agoWow going to plug this into a project and try it out tonight, might be worth adding as a default plugin to projects - looks good on the surface.
- briankelly 9y agoFair enough but I still think avoiding those libraries is very doable. Personally I used play-json without the rest of the play framework and it is robust and easy to grok.
- dominotw 9y agoOh man I had the misfortune of starting scala with a framework( akka http) that used magnet pattern. Turned me off from scala forever till I rediscovered it again.
- threeseed 9y agoI am very much in the minority but I can't stand most of Akka. It's overly engineered with too much clever magic and hence is very reminiscent of frameworks like J2EE Spring which is why people left Java to begin with.
- deleted 9y ago[deleted]
- vijaykiran 9y agoFrom my non-substantial experience in Clojure and Scala, I'd say that Clojure is simpler and faster to learn and get productive quickly than Scala. Scala has lot more syntax and concepts that you need to grok compared to simplicity of Clojure. I'm curious why you say Clojure has a steep learning curve.
- threeseed 9y agoClojure has a steep learning curve because it's purely functional. Most programmers grow up with learning OOP and so throwing all of that out and asking you brain to do everything in reverse is challenging. I know having worked with a dozen J2EE developers in their transition to Clojure. It took at least 3 months to just be productive. Scala for many people is just Java with a sprinkling of functional and they never really bother to learn the internals or the more complex areas like generic programming e.g. Shapeless/Cats.
- deleted 9y ago[deleted]
- jrs95 9y agoIMO it's just the syntax that comes across as really bizarre. Scala is much more complex than Clojure aside from the initial hurdle of getting used to that syntax. Personally I think it's less about FP vs OOP -- even if the OO parts of Scala are familiar, you're going to encounter FP code in Scala, and in general there is a lot more to learn with Scala as a language just to be able to read other people's code effectively.
- dustingetz 9y agoClojure has the easiest learning curve I've ever experienced, it took 3 days to bring my co-founder (a Scala dev) up to speed. I am also a former scala dev, I flatMapped that shit, etc. That Scala coolaid tasted far better going down as a starry eyed 20-something than it did on the way back up ... Scala's own source code is incomprehensible, let alone the emergent monstrosities built by well meaning humans that aren't in the top 1000 scala experts on the planet... Scala, fundamentally, simply doesn't make any sense at all, it was a bad idea, you can't fuse OOP and FP without violent and polarized flamewars and fracturing the community into incompatible sects. The experiment failed.
- dsabanin 9y agoI think what has failed is in fact Clojure's experiment of doing FP without a type system, now that they have to bolt it on with runtime type checking. OOP + FP is actually doing quite well, look at Swift, ReasonML (essentially OCaml, which is also doing fine by itself).
- grzm 9y ago> "now that they have to bolt it on with runtime type checking." I think that's definitely in the eye of the beholder. The overwhelming opinion I've heard from those in the community is that they greatly prefer having the option, but wouldn't want it required. And that's exactly what spec provides. The language isn't perfect (and honestly, what language is, for every purpose?) but calling it a failure is quite hyperbolic.
- virtualwhys 9y ago> but calling it a failure is quite hyperbolic. as is claiming that Scala is a failure. If adoption and widespread use across industries (big data, hardware, server, web, etc.) is any indicator of success, Scala is just that. The reality is that both languages are excellent; if you work in either for the day job you're fortunate -- there are far worse languages out there.
- 9y ago
- danellis 9y agoThe problem with these things is that I can't give my web developer a bunch of Scala files to edit instead of HTML. Does it support binding in HTML templates too?
- KajMagnus 9y agoIs there a runtime lib? That includes e.g. Scala collections for the browser for example? How many kilobytes?
- gmartres 9y ago> Is there a runtime lib? That includes e.g. Scala collections for the browser for example? Pretty much all Scala code compiles with Scala.js, that includes the Scala standard library, as well as part of the Java standard library that has been reimplemented in Scala. > How many kilobytes? Scala.js does whole program optimization and dead code elimination, so there's not a single number that can be given here, you pay for what you use.
- virtualwhys 9y ago> so there's not a single number that can be given here, you pay for what you use. While true, in practice as soon as you use, for example, `List`, `Map`, and `Option`, along with various basic collection operations (`flatMap`, `map`, `zip`, ...) you've pulled in basically the entire standard lib* Wind up paying about a 160KB baseline "tax" to use Scala in the browser, which is well worth it considering that you can ditch jQuery and related plugins (DataTables, Validation, etc.), shedding far more weight than Scala.js in the process. I find it to be a huge win, wish I could use it in current bloated Angular 5 + TypeScript project :\ * This is due in part to existing collections library that is not so amenable to dead code elimination (or at least google closure compiler can't track the full reach of CanBuildFrom's tentacles :)) Maybe this will change in Scala 2.13 collections overhaul, have my doubts, doesn't sound like the new design is radically different than the current one.
- justinhj 9y agoI did a couple of blog posts about UDash recently, one of which was to view this very site using functional programming library Fetch (similar to Facebook's HAXL) http://justinhj.github.io/2017/10/11/hacker-news-api-3.html http://justinhj.github.io/2017/10/11/hacker-news-api-3.html The other was a simple roman numeral converter http://justinhj.github.io/2017/08/27/roman-numeral-tool-with-udash.html http://justinhj.github.io/2017/08/27/roman-numeral-tool-with... For me the advantage of UDash is for people that want a type safe Scala "all the way down" web application. One of the downsides is that is difficult to avoid runtime errors, at least to the extent that Elm does (by design). Another drawback is not being able to simple share a template with designers; they would have to be proficient in Scala at least to the extent they can fix compile errors in the page code. Some plus sides are that it plays well with Twitter Bootstrap and type safe CSS.
- jeremyjh 9y agoCan you expand on why it is difficult to avoid runtime errors when everything is typesafe?
- justinhj 9y agoThis was from personal experience where code that would compile correctly would give a runtime error in the browser. Could be that I didn't know enough about UDash to fix it, but the error was unhelpful so I worked around it.
- threeseed 9y agoIf people don't want the entire UDash experience there are smaller libraries: Binding.Scala https://github.com/ThoughtWorksInc/Binding.scala https://github.com/ThoughtWorksInc/Binding.scala React https://github.com/japgolly/scalajs-react https://github.com/japgolly/scalajs-react RPC https://github.com/shogowada/scala-json-rpc https://github.com/shogowada/scala-json-rpc
- continuational 9y agoShameless plug: I found the complex type/macro/implicits mixture in scalajs-react hard to work with and made a wrapper that’s simpler to use: https://github.com/Ahnfelt/react4s https://github.com/Ahnfelt/react4s
- adav 9y agoThis looks fantastic, nice work! Does it work with React Native?
- continuational 9y agoThank you :) I have not tried to use it with React Native. There's no fundamental reason why it wouldn't work, but it hasn't been tested. If you try it out, I'll do my best to help you make it work.
- fknop 9y agoIt looks really verbose only to render simple html. I had one really bad experience with Scala.js. When I used it, I noticed Scala was just not designed for the web (front end) and it just didn't work well for things really simple in JS.
- threeseed 9y agoScala.js is not really designed for simple websites. It's designed for bigger ones especially in which you want to share models and validations between front and back end.
- realusername 9y agoI'm going to go against the HN current opinion but I hate Scala. I worked for a few months on some Scala projects, the language is way too complex (the opposite of Go, they add whatever feature they think is cool) is poorly documented and readability is difficult as well. It looks like a mix of Perl and functional languages.
- fknop 9y agoI hate it as well. I think it's a poorly designed language. The syntax is a mess (underscore...), the operator overloading make people overload silly operators which make code unreadable from an outside programmer. I could go on... I prefer Kotlin which imho fix almost every bad design decisions from Scala.
- mbo 9y agoIf underscores and operator overloading are the biggest criticisms you have of Scala, then we're doing pretty well. For what it's worth, I think Scala has quite a large grammar that means it takes a while to learn, but once that's over it's not particularly difficult to read or to write. Can you elaborate as to what Kotlin fixes compared to Scala?
- th1nkdifferent 9y agoCould you cite an example of how Scala is unsuitable for the web? Between Scala and JavaScript, I would pick Scala in a heartbeat for one reason alone - it's strongly typed. Both of them offer OO & FP.
- deleted 9y ago[deleted]
- th1nkdifferent 9y agoThis is just great. This is the web framework I have been hoping someone would make!