Announcement: Clang UPC: A UPC compiler based on Clang/LLVM

Clang UPC: A UPC Compiler based upon Clang/LLVM

Gary,

First, I think this is spectacular! Thanks you.

Second, as you did not mention this in the e-mail, I'd like to point out that as part of this release, Intrepid's UPC runtime library has been released under a BSD-style license.

Third, regarding merging with trunk:
- The LLVM change seems small, and can probably be proposed as-is
- Regarding the Clang additions, it looks like you need to rebase them (maybe I'm reading the github page wrong, but it looks like this has not been done for a few months)

Can you comment on whether it would be possible to extend Clang's plugin interface to implement UPC as a plugin (maybe a static plugin if we're worried about exporting too many symbols)? When Intel proposed implementing Cilk++ in Clang, this approach was suggested. It seemed difficult to evaluate, however, because there is no implementation via which to truly gauge the requirements of the necessary interfaces. Given that we now have a public UPC implementation based on Clang, I think that we could use this to gauge the necessary requirements for language-extension plugins.

I'll also point out that UPC is a standardized C99 extension with implementations by IBM, HP, Cray, etc. in addition to several available open-source implementations.

-Hal

Second, as you did not mention this in the e-mail, I'd like to
point out that as part of this release, Intrepid's UPC runtime
library has been released under a BSD-style license.

Correct. My thinking is that for Clang developers, BSD licenses
are expected, so this is a non-event.

Third, regarding merging with trunk:
- The LLVM change seems small, and can probably be proposed as-is

Good idea. Thanks.

- Regarding the Clang additions, it looks like you need to
rebase them (maybe I'm reading the github page wrong, but it
looks like this has not been done for a few months)

We have been working from the 3.1 release branch.
That is, the clang-upc master started as the 3.1 release branch.

We are currently looking into re-syncing with the 3.2 release branch,
which is going into the "feature freeze" stage today.

Can you comment on whether it would be possible to extend Clang's
plugin interface to implement UPC as a plugin (maybe a static
plugin if we're worried about exporting too many symbols)? When
Intel proposed implementing Cilk++ in Clang, this approach was
suggested. It seemed difficult to evaluate, however, because there
is no implementation via which to truly gauge the requirements
of the necessary interfaces. Given that we now have a public UPC
implementation based on Clang, I think that we could use this to
gauge the necessary requirements for language-extension plugins.

I haven't looked at the plugin API, but I think that we did ask
Doug Gregor about this when we met with him before starting the
project, and he said that UPC would likely not be a candidate
for a plugin.

IIRC, both OpenMP and Cilk++ are pragma-based. Thus, essentially
no new syntax. They also do not need to address distributed memory,
thus there is no need to extend the type system to acoommodate
pointers-to-shared. For those reasons, I think that those two
"languages" might be more amenable to being implemented as plugins.

I'll also point out that UPC is a standardized C99 extension
with implementations by IBM, HP, Cray, etc. in addition to several
available open-source implementations.

Yup.