In my opinion, this is one of those features that if we really nail has the potential to massively drive adoption. As Stephan said no one else has this, and looking at how this is implemented, this is not something that you simply tack on. staged functions are going to be really huge and I think they represent the benefit of exposing parts of the compiler with a well defined interface. Looking forward to more instances of those, and to following to progress of this over the next couple of months.
Jake
As I have a huge and complex C++ code base, I was struggling to reconcile how to incrementally move to Julia. SWIG wasn't an option and writing c-shims wasn't going to cut it, so I had nearly given up. This gives me a whole new strategy for C++ to Julia migration.
It's not completely correct.
Cling is also used by the python bindings (pyroot) to access the c++ api.
-s
sent from my droid
It is not entirely true that no one else has this, Cling from CERN has an interactive C++ interpreter based on CLANG: http://root.cern.ch/drupal/content/clingMaybe some useful ideas can be taken from them? But I agree that no other language has this. Cling is *only* interactive C++, wheres this allows us to mainly use Julia and dip into C++ where necessary.
Yes.
-s
(Resend from the correct address)
sent from my droid
Pyroot always used what is called 'dictionaries' in the HEP community - these dictionaries provide reflection capabilities to C++ code.
Before ROOT-6, we relied on gccxml+reflex to generate them.
Now, with ROOT-6 (and CLing) the introspection code is talking to cling directly.I'll post some pointers when in front of a real keyboard.
-s
sent from my droid
The hard part isn’t getting the binary to someone’s computer. The problem is getting exactly one copy of a binary, and making sure it is the correct version, built against the correct libc, and plays nice with the other binaries that want to depend upon it.
I realize that for the typical package developer, running ./configure && make && make install DISTDIR=`pwd`/install && tar -czf `pwd`/install
is both very easy and very familiar.
Unfortunately, it is bad for the Windows package ecosystem.
Currently, Mac has a very challenging packaging system because there are so many incompatible ways of getting a binary onto your system (self-compile, Homebrew, Homebrew.jl, MacPorts, Fink, Apple) that it is very difficult to put together a cohesive set of binaries that have any sort of interesting dependency relationship.
Windows currently doesn’t have very many sources of binaries, so we have a chance (to our annoyance or benefit, depending on your view on this) to make it anything that we want. Accordingly, I’ve tried to make WinRPM the defacto package manager for managing binary dependencies in a sensible manner. It was intended to be reasonably extensible too, so if you wanted to switch out the backend for something different, that isn’t much of a problem. I started with using the RPMmd format and OpenSUSE OBS, because they had already done a lot of the hard work of writing the package descriptions for over 300 libraries (and it included Gtk), and they provide an open build service, which meant anyone could become involved. (Plus, it also meant that I could distribute the work of keeping the binaries up-to-date, independent of the state of the Julia package)
It’s true that Julia duplicates a few binaries that could be downloaded from OpenSUSE, but then you start to run into a chicken-and-egg problem where you you need Julia built and running to download the packages to build Julia. make win-extras
is essentially there to help with that bootstrapping problem. On OS X, we had seen (and fixed) some issues with the packaged libpcre conflicting with the built-in libpcre, but in general, most libraries don’t maintain global shared state, so it isn’t too much of a problem to have multiple copies loaded.
Having to edit sources.list, and the recent connectivity/mirroring issues
We’ve seen similar issues with archive.org binary hosting, so these sorts of problems aren’t entirely unique to WinRPM. However, if everyone is using a unified platform, then the user only has to learn and maintain one system. (and there are also hopefully more developers & interest in maintaining and improving that core system, rather than lots of “just sufficient” solutions in each individual package).
Regards,
Jameson
Pkg.build("CXX")
../src/bootstrap.cpp:16:10: fatal error: 'clang/Sema/ScopeInfo.h' file not found
So should I come back to LLVM_VER=svn and change something else?There is no directory deps/llvm-svn/clang: warning: argument unused during compilation: '--param max-inline-insns-single=1800'
make[2]: Circular llvm-svn <- llvm-svn dependency dropped.
make[2]: Circular /build_Release/Release/lib/libLLVMJIT.a <- llvm-svn dependency dropped.
make[2]: Circular /build_Release/config.status <- llvm-svn dependency dropped.
make[2]: Circular /configure <- llvm-svn dependency dropped.
make[2]: *** [.src.tar.gz] Error 1
make[1]: *** [julia-release] Error 2
make: *** [release] Error 2
julia/deps/llvm-svn/tools/lldb/source/Host/posix/HostInfoPosix.cpp:184:24: error: use of undeclared identifier 'PY_MAJOR_VERSION'
After all this, I got to Pkg.build("CXX") and now got a new error:
julia> Pkg.build("CXX")
INFO: Building CXX
Tuning for julia installation at: /Users/michel/Tools/3/julia/usr/bin
CC /Users/michel/.julia/v0.4/Cxx/deps/build/bootstrap.o
LINK /Users/michel/.julia/v0.4/Cxx/deps/usr/lib/libcxxffi.dylib
ld: library not found for -llldbInterpreter
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [usr/lib/libcxxffi.dylib] Error 1