I'm looking for students. If you are interested in doing research with me at the University of Waterloo, please contact me and we can see if we have mutual interests. Be sure to provide some evidence that you know something about my research interests in your email!
Software development often involves manually encoding high-level design information using low-level programming constructs. This can be repetitive and error-prone. My research therefore aims to give developers ways to automatically link high-level designs to low-level implementations, through the use of programming language extensions, particularly those amenable to static or dynamic program analysis.
- Views: with Brian Demsky, we developed a novel language extension enabling developers to declaratively specify fine-grained (sub-object-level) locking policies.
- Transactional memory: another approach attempting to mitigate the difficulty of concurrent programming. With Gaurav Jain, I am investigating the use of novel interfaces for transactional memory. As with views, our interpretation of transactional memory bridges the gaps between the developer, the compiler and the runtime system.
- Unread memory: A well-understood software safety property is that it must not read memory that has not previously been written to. Jon Eyolfson and I are investigating the converse property: what are the properties of writes which never get read? We anticipate exploring related properties in future work.
- Analysis and transformation of test cases: With Divam Jain, I am exploring the feasibility of static and dynamic analysis approaches to help developers maintain test suites (in JUnit).
Past Research Accomplishments
I've worked with collaborators to share language design and program analysis techniques with the areas of security and embedded systems.
- Role-based access control through proxy objects: with Mahesh Tripunitara and Jeff Zarnett. Developed an implementation of an RBAC system which used Java annotations and proxy objects to express the access control policy. Appeared in SACMAT 2010.
- Time-aware instrumentation for embedded systems: with Sebastian Fischmeister. Explored a technique for instrumenting embedded systems subject to a time bound, evaluating the reliability of the resulting instrumentation. Appeared in Transactions on Industrial Informatics.
- Static analysis of tracematches: with Eric Bodden and Laurie Hendren. Implemented a hybrid static/dynamic analysis for verifying that specified sequences of program events never occur in any execution. Appeared in TOPLAS.
- Hob: As part of my PhD thesis, developed a set-based specification language and techniques for verifying that the implementation corresponds to the specification.
- I was an early contributor to the influential Soot framework for static analysis of Java bytecode. My main contribution these days is in the form of review articles, such as this CETUS workshop article.
You may also be interested in a more detailed research overview.
- Stephen Li
- Jun Zhao
- Zeming Liu
- Qian Liang
- Jon Eyolfson
- Jeff Zarnett (co-supervised with Mahesh Tripunitara)
- Aakarsh Nair
- Hang Chu
- Gaurav Jain
- Divam Jain (co-supervised with Reid Holmes)
- Felix Fang
- Wenzhu Man
Here is a full publications list, which includes posters and publications.
Mailing Address and Phone
- Patrick Lam
- Department of Electrical and Computer Engineering
- University of Waterloo
- 200 University Avenue West
- Waterloo, Ontario, Canada N2L 3G1
- Office Phone: (519)888-4567 extension 38017
Friends and Collaborators
- Eric Bodden (SOAP workshop)
- Sebastian Fischmeister
- Alex Ghitza
- Laurie Hendren (HeroECS robotics team)
- Viktor Kuncak
- Karen Zee
- Dave Wentzlaff's Christmas Tree Maps numbers search bed and breakfast search
I've developed a bunch of software, which can be found in various places on my research pages. However, on this page, I'm mirroring Dust, which was developed by Raja Vallée-Rai for the Quest for Java competition, and is in the public domain. It is not otherwise on the Internet, and I got it from the Wayback Machine.