[Haskell-iPhone] Haskell RTS on iOS
Stephen Blackheath [to GHC-iPhone]
likeliest.complexions.stephen at blacksapphire.com
Wed Jan 16 22:37:55 CET 2013
Peter,
On 17/01/13 09:51, Peter Jones wrote:
> I'm about to start a project that will target native applications on
> several platforms (Linux, Mac OS X, iOS, etc.) and Haskell being my new
> love, I'd like to use it if possible.
>
> From what I can tell the GHC-iOS project has a working ARM
> cross-compiler that integrates with Xcode for building iOS applications.
> I'm curious if anyone has an application running on an actual iOS device
> (not just the simulator) and would care to comment about the performance
> of the run time system.
The status is that we have a working GHC-iOS compiler, and various
attempts at Android but nothing easily useable - though I expect that to
change very soon. Work is underway at the moment by quite a few people
to finish off the rough edges of cross-compiling. So at this stage, if
you want to use Haskell on mobile devices, you will still have to get
your hands a bit dirty.
The performance of the runtime system should be very good now that we
have a "registerised" code generator using LLVM (GHC's generated code is
based entirely on gotos and doesn't use normal calls and call stacks,
and this necessitated specific changes to LLVM). I haven't done any
great measurements, though. Just remember that mobile device CPUs are
significantly slower than desktop PCs, though this gap is closing.
> I've come across some comments in #haskell that have led me to believe
> that the Haskell RTS won't operate in anything less than 128MB of RAM.
> I suppose that's not terrible since most iOS devices have at least 512MB
> but I've not experienced that (xmonad seems to be very happy in 60MB
> total vsize).
I did a lot of work using GHC on a second generation iPod Touch and
memory usage was far less than that. Memory usage was in the region of
10 to 30 MB for a fairly involved application (beginnings of a video
game). I kept a close eye on memory usage, and I never had crashes
because of it.
> The other possible myth that I've heard is that profiling a Haskell
> program and improving space usage needs to be done on each platform and
> tuning for one platform can induce space leaks on another. This doesn't
> seem reasonable to me so I wanted to see if anyone has profiled/tuned on
> Linux/Mac OS X and run into any issues on an iOS device.
That's definitely not true. Speaking as a professional programmer, space
leaks certainly are a problem in Haskell. Here's my opinion on them:
Haskell has many amazing features that work together to make Haskell
better than any other language (that I know of). Those features are
mostly huge net gains, with the exception of one - laziness - because it
comes at a significant price - space leaks.
Some people think laziness is a net gain, some think it's a net loss.
Some people have said "with experience, space leaks are not a problem"
and I generally agree.
Haskell is genuinely different, and that means a big learning curve, and
space leaks add to that learning curve. (In my opinion, for someone new
to programming, the learning curve of Haskell would be just a bit above
average compared to imperative languages.) This is one of the reasons
why Haskell hasn't become popular in spite of its merits.
Though maybe that's changing - it came up 9th in a survey of favourite
languages after the well-known languages.
http://blog.sudobits.com/2012/03/28/top-10-most-popular-programming-languages-of-2012/
Space leaks follow well-defined logic and the best defence against them
is to understand why they happen and factor that into program design.
That is, when you're writing a part of the program, you do need to think
about what the space behaviour of that part will be. Having said that,
space behaviour is, like everything else in Haskell, composable, so any
complexity in space behaviour doesn't compound. That will cure most
problems, but space leaks are sufficiently problematic that you do
actually need to do profiling to make sure they aren't causing a
problem. Profiling is relatively easy on a PC.
So contrary to the myth, space leaks aren't random, and won't pop up on
a new platform. You only need to test your program on one platform. Due
to difficulty of profiling on a cross-compiled platform, however, you
will need to write your program so it can be tested (and therefore
profiled) on a PC.
> Thanks in advance, and thanks for all the work on ghc-ios!
No worries, and I hope there's been something useful in this email!
Steve
More information about the iPhone
mailing list