[Haskell-cafe] Re: binding to C libraries on Windoww
andrewcoppin at btinternet.com
Mon Dec 7 16:37:28 EST 2009
Jeffrey Scofield wrote:
> I think the real cultural difference is that you aren't a user, you're
> a prospective Haskell developer, as others have said. Developers
> pretty much have to install tools (like compilers and preprocessors)
> and have to work with source code.
And I have no problem with needing to install a Haskell compiler. If I
had to install a seperate C compiler to make FFI to C work, that
wouldn't seem unreasonable either. (As it happens, GHC has a C backend,
so the C compiler just happens to be there already.) What does seem very
weird is having to turn my Windows box into a psuedo-Unix system in
order to write native Windows programs.
> Traditionally, Unix *comes with* thousands of tools that are useful
> to developers. Windows traditionally came with none, at least
> none that I was ever able to find.
True. By default, Windows assumes you are a clueless user, not an expert
> Since many of the traditional Unix tools are available free, it
> makes sense that somebody would want to port them to Windows
> *for doing development*. It's not so much a Unix emulation as
> a solution to the lack of native Windows tools. Of course this
> makes sense especially to somebody who has gotten used to
> the Unix tools (such as myself). I would never try to *develop*
> seriously under Windows using just what comes preinstalled.
You can't develop anything with just what's preinstalled. (Well, unless
you could writing batch scripts...)
Generally, if you want to develop C or C++ applications on Windows, you
install MS Visual Studio. It gives you the compiler, linker, dependency
management, and a whole bunch of other stuff. You typically wouldn't
install gcc, ld and Automake. (Unless of course you were specifically
trying to port existing Unix code, obviously.)
The thing is, if you're a C programmer on Windows, and you want to write
(say) a program that talks to an Oracle database, typically what you'd
do is install Visual Studio, download the Net8 client DLLs and header
files, compile your application against the Net8 client header files,
link everything, and when your program runs, it dynamically loads the
Net8 DLLs and does its work. But it seems that if I want to talk to
Oracle from Haskell, I'm expected to find the *source code* to the Net8
client and *compile it from source*. This is highly unusual for Windows.
(I wouldn't be surprised if Oracle haven't even released the source code
for their Net8 libraries...) It just isn't the way Windows usually works.
Even without VS, if I'm working in C, all I really need is a compiler
and a linker, and I can build an executable program that talks to
Oracle. But with Haskell, it seems I need to be able to actually build
the Net8 client from source - which, depending on how those sources are
written, is likely to require an entire build system (Automake, a VS
project, whatever). It's a much bigger undertaking than just compiling
the few source file I personally wrote and linking a few bits together.
> This is not to say that on a given day it isn't frustrating
> when you can't get something to compile, especially
> if it's just a tool you need to compile something else.
Oh, hey, I understand why things are like this. You make something work
properly on Linux, and with not that much effort you can make it also
work for BSD, Mac OS, Solaris, HP UX... even certain embedded devices
can potentially run it. You want to make something work on Windows? You
have to do everything totally differently. (No wonder people thought
that things like Cygwin and MinGW were a good idea.)
One of the things that has impressed me about GHC is that it takes
Windows seriously. The compiler and interpretter both work flawlessly on
Windows. They don't try to teraform Windows into just another Unix, they
actually try to do things The Windows Way. I like that. And it's not
like all of Hackage is useless to me; anything that's 100% Haskell
compiles and installs first time, almost every time. It's just
frastrating that all the cool multimedia stuff I'd like to be doing
requires access to C, and that's still currently very difficult. I
understand not many Haskell people use Windows, so it's not so easy for
people to test, and not so many people have a detailed knowledge of
Windows. And with this latest discussion, I'm beginning to understand
why binding to C is so hard.
But, yeah, it *is* still frustrating. ;-) And, unfortunately, I lack the
knowledge or skill to be able to improve the situation...
> But this is why developers are so wealthy, they have the
> fortitude to work through these problems. (Ha ha.)
Heh, good one. ;-)
More information about the Haskell-Cafe