4 ms·
I haven't really played much with Scala but I would say there are reasons why I will not and stick to F#: - JVM is less efficient for generics than the CIL (ca
by knocte 8y ago
I haven't really played much with Scala but I would say there are reasons why I will not and stick to F#:
- JVM is less efficient for generics than the CIL (casts happening at runtime underneath).
- I've read about horror stories about tailcalls in the JVM world.
- There's no way to build an iOS app with Scala (i.e.: https://stackoverflow.com/questions/13460780/any-way-to-use-some-scala-for-ios-coding https://stackoverflow.com/questions/13460780/any-way-to-use-... ), while you can do easily with F# thanks to Xamarin.
- pjmlp 8y agoThere is way for free with CodenameOne. And there is another way paying for GluonVM. EDIT: corrected my statements based on comment below.
- invalidname 8y agoCodename One has a free tier that allows you to do pretty much everything and allows you to use it commercially https://help.codenameone.com/en-us/article/is-codename-one-free-slkwhu/ https://help.codenameone.com/en-us/article/is-codename-one-f... You can grow the build quotas as well to support larger applications. Furthermore, you can use the open source pieces of Codename One for free without the build servers. There is no restriction on that.
- pjmlp 8y agoThanks for clarifying that up, I do not follow up on it that closely.
- azolotko 8y agoJVM knows nothing about generics. What kind of casts are you talking about? Trampolines are a common technique to implement tailcalls on platforms that don't support them natively. What are the horror stories then? Why would you bother with F# or Scala when iOS has Swift?
- knocte 8y ago> JVM knows nothing about generics. What kind of casts are you talking about? Precisely! because the bytecode doesn't know about generics (it's syntactic sugar in higher levels, i.e. Java), then casts need to be performed at runtime (e.g. when getting an item from a collection). > What are the horror stories then? https://stackoverflow.com/a/18196685/544947 https://stackoverflow.com/a/18196685/544947 > Why would you bother with F# or Scala when iOS has Swift? Haha, thanks for agreeing with me that Scala is not good in this regard. When I choose F# over Scala is because it can run in any platform. I'm not constrained.
- azolotko 8y agoI suppose you meant boxing/unboxing. If so, yes, that's necessary for primitive types. As for regular objects, no casts are needed. Regarding TCO, that's a well known limitation of the current Scala compiler. Hardly a "horror story". Let me assure you, there are plenty of platforms where F# is nowhere to be seen. Thus, "can run on any platform [I care about]", which is a different set for different people anyway. For example, F# does not run on JVM, does it?
- knocte 8y agoDude, JVM is not a platform but a runtime. Why is it relevant to run F# on JVM? The important thing is to run F# in any hardware/OS, that's my point. > As for regular objects, no casts are needed. Are you sure? See https://stackoverflow.com/a/10126425/544947 https://stackoverflow.com/a/10126425/544947 > Hardly a "horror story". F# doesn't have this limitation and F# does tailcalls by default instead of having to explicitly remember to decorate it with the @tailrec attribute.
- azolotko 8y agoYou have a pretty narrow definition of a platform. Consider https://en.m.wikipedia.org/wiki/Computing_platform https://en.m.wikipedia.org/wiki/Computing_platform Yes, you are right, I didn't consider the checkcast instruction. Yes, F# does not have this particular limitation, but has few of its own in different places. Most notably, it lacks HKT (arguably, because of CLR awareness of generics). BTW, alternative approaches to stack-safe recursion do exist in Scala. For example, https://github.com/slamdata/matryoshka https://github.com/slamdata/matryoshka
- invalidname 8y agoThe answers there aren't up to date, here's a new answer https://stackoverflow.com/a/53756826/756809 https://stackoverflow.com/a/53756826/756809