170 likes | 263 Views
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
E N D
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 • Mother of 1.5 girls • Eleanor Jane Weirich Zdancewic, Jan 2005 • ?????, Aug 2007 • Research interests • type systems • functional programming
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
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.
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
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
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)
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
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
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?
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
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
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
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.
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
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?
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