Think writing a compiler is difficult? It is—unless you use Parrot, a complete compiler construction kit. With Parrot, crafting a new programming language is as easy as authoring a new website.
Program performance is always a concern, even in this era of high-performance hardware. This article, the first in a two-part series, guides you around the many pitfalls associated with benchmarking Java code. Part 2 covers the statistics of benchmarking and offers a framework for performing Java benchmarking. Because almost all new languages are virtual machine-based, the general principles the article describes have broad significance for the programming community at large.
In an earlier post I mentioned that one goal of the new introductory curriculum at Carnegie Mellon is to teach parallelism as the general case of computing, rather than an esoteric, specialized subject for advanced students. Many people are incredulous when I tell them this, because it immediately conjures in their mind the myriad complexities…
I recently diagnosed the root cause of a concurrency bug, CR6822370,
and thought it sufficiently interesting to share the details. (CR 6822370 actually represents a
cluster of bugs that are now thought to be related by a common underlying issue).
Briefly, we have a lost wakeup bug in the native C++ Parker::park() platform-specific
infrastructure code that implements java.util.concurrent.LockSupport.park().
The lost wakeup arises from a race that itself arises because of architectural
reordering that in turn occurs because of missing memory barrier instructions.
The lost wakeup may manifest as various 'hangs' or instances of progress failure.
C. Lin, and L. Snyder. Proceedings of the Sixth International Workshop on Languages and Compilers for Parallel Computing, volume 768 of Lecture Notes in Computer Science, page 96--114. Springer, (1994)
C. Wimmer, and S. Brunthaler. Proceedings of the 2013 Companion Publication for Conference on Systems, Programming, &\#38; Applications: Software for Humanity, page 17--18. ACM, (2013)
S. Marr, C. Seaton, and S. Ducasse. Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation, page 545--554. ACM, (June 2015)(acceptance rate 19%).
K. Sasada. Companion to the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, page 158--159. New York, NY, USA, ACM, (2005)
M. Eysholdt, and H. Behrens. Proceedings of the ACM international conference companion on Object oriented programming systems languages and applications companion - SPLASH \textquotesingle10, ACM, (2010)
V. Kumar, D. Frampton, S. Blackburn, D. Grove, and O. Tardieu. Proceedings of the 2012 ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages & Applications (OOPSLA 2012), Tucson, AZ, October 19-26, 2012, volume 47 of SIGPLAN Notices, page 297--314. ACM, (October 2012)
A. Born de Oliveira, S. Fischmeister, A. Diwan, M. Hauswirth, and P. Sweeney. Proceeding of the 18th international conference on Architectural support for programming languages and operating systems, volume 48 of ASPLOS '13, page 207--218. ACM, (March 2013)
X. Yang, S. Blackburn, D. Frampton, J. Sartor, and K. McKinley. Proceedings of the 2011 ACM International Conference on Object Oriented Programming Systems Languages and Applications, page 307--324. ACM, (2011)
R. von Behren, J. Condit, and E. Brewer. Proceedings of the 9th conference on Hot Topics in Operating Systems - Volume 9, page 4. Berkeley, CA, USA, USENIX Association, (2003)
S. Tasharofi, P. Dinges, and R. Johnson. ECOOP 2013 – Object-Oriented Programming, volume 7920 of Lecture Notes in Computer Science, page 302-326. Springer Berlin Heidelberg, (2013)