1 / 17

Getting Started in PL Design Research

Getting Started in PL Design Research. Stephanie Weirich University of Pennsylvania. About Stephanie Weirich. Texan by birth grew up in Dallas, attended Rice University Pennsylvanian by marriage Met Steve Zdancewic at grad school (Cornell) Both PL faculty members at Penn since 2002

lin
Download Presentation

Getting Started in PL Design Research

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Getting Started in PL Design Research Stephanie Weirich University of Pennsylvania

  2. About Stephanie Weirich • Texan by birth • grew up in Dallas, attended Rice University • Pennsylvanian by marriage • Met Steve Zdancewic at grad school (Cornell) • Both PL faculty members at Penn since 2002 • Mother of 1.5 girls • Eleanor Jane Weirich Zdancewic, Jan 2005 • ?????, Aug 2007 • Research interests • type systems • functional programming

  3. My research How can we make statically-typed programming languages more expressive? • Type-directed Programming: Programs that depend on types • Reflect type information structure into data • Express generic algorithms that work for many different data structures • AspectML, RepLib in Haskell, Type-directed Java • Dependent Types: Types that depend on programs • Use types to statically verify program invariants • “Programmable” type systems (conditional relationships) • New language/type system design: PIE • Type inference • Making it easier to use advanced type systems • Extensions to the Haskell programming language

  4. Where to begin? • Start by building background and experience • Read, Read, Read • Learn by doing: write programs, do proofs • Study textbooks: e.g. Pierce, TAPL • Learn how to evaluate design work • Identify important problems • Work on something that seems cool, even if you don’t know what the contribution will be • Staring at a blank piece of paper will not produce a POPL submission.

  5. Where to look for publications • Conferences & Workshops • POPL & ICFP • PLDI, OOPSLA, ESOP, LICS, PPDP • Journals • JFP and TOPLAS • Seminars, web pages • Once you’ve identified the active participants for your problem

  6. Play with languages • Play around with many different languages • Mature FPLs: • Haskell (GHC) • ML (O'Caml, Standard ML) • Scheme (PLT Scheme) • Research FPLs: • Scala, Omega, ATS, GHC extensions • Why? • Learn by doing • Might find new uses for old types • Might discover connections between features

  7. Learn about constructive logic • Logical foundation for formal models of languages • Books/Lecture notes: • Barendregt: Lambda Calculi with Types • Pfenning: Computation and Deduction • Sorenson, Urzyczyn: Lectures on the Curry/Howard Isomorphism • Proof assistants for constructive logic • Twelf • Coq • Coq Tutorial at POPL 08 (tentative)

  8. Expressiveness • Build a small interpreter/write small programs • Build a larger implementation/write larger programs • Port existing programs to new language • Example: Cyclone • Extend existing language with active user community • Example: GHC

  9. Consistency • Does the design make sense? • Can it be implemented? • Can we prove properties about a formal model of it? • Type soundness • Decidable type checking • Algorithmic complexity

  10. Aesthetics • Does the design follow general design principles? • Simplicity • Orthogonality • Mathematical insight • Does the design include a foundational building block for future languages? Add to our mathematical vocabulary?

  11. Relevance/Significance • Is there a need for this design? • Example: Concurrency, motivated by new hardware • Does this design teach us about programming and program structure? • Example: Monads

  12. What to work on? • What are people talking about now? • What will they be talking about in the next few years? • What are the important questions? • Another perspective: • Pierce, LICS 2003 invited talk. Types and Programming Languages: The Next Generation

  13. Expressive type systems • How do we show that there are no bugs in linux device drivers/garbage collectors/embedded systems/etc? • Types for modeling memory management, state invariants, and running time, eliminating race conditions, deadlock

  14. Dependent type systems • How can we stop designing all these special purpose type systems? Can we make the type system programmable? How can the user cope with such complicated types? • Indexed types, GADTs, full-spectrum dependency, PADS, etc.

  15. Program equivalence • How do we show that two programs are the same? • How can we show that program abstractions are preserved? Even in a multi-lingual system? • Can the design of the language help? • Bisimulation techniques, type abstraction, logical relations, encryption, security-type systems

  16. Concurrency • What is the right programming model for concurrent architectures? • Software Transactions? • Deterministic concurrency? • Message-passing? • How do we reason about concurrent programs? • Does purity help?

  17. How to evaluate language designs? • Need to know to do good work • Need to know to present that work effectively • Difficult (and sometimes controversial) question • Different axes: • Novelty • Expressiveness • Consistency • Aesthetics • Relevance

More Related