170 likes | 270 Vues
Dive into the world of programming language design research with insight from Stephanie Weirich, a PL expert at the University of Pennsylvania. Discover key areas like type-directed programming, dependent types, and language design exploration. Learn where to start, look for publications, play with languages, and explore topics like expressive type systems, program equivalence, concurrency, and more.
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