12 Mar 2019
Herein I try to make my current doctoral research accessible to the average person: Extending dependently-typed languages to implement module system features in the core language. It's something I can direct my family to, if they're inclined to know what it is I've been doing lately.
The technical matter can be seen at the associated website ─The Next 700 Module Systems─ which includes a poster, slides, and a demo.
Excluding the abstract, this is my thesis proposal in three minutes (•̀ᴗ•́)و
1 Part I ─Getting the mail
- Have you ever been confused by packages?
There are so many parts when it comes to packaging:
- There's the stamps,
- the addresses,
- the contents,
- the damage insurance,
- the package weight,
- customs declarations!
There's so many parts!
- Look at them! ⟪ gesture to screen ⟫
- There's so many! The place is a mess!
- This could be you parents' basement!
- It could be your work desk!
- In computing, this is your code! Mish-mashed from smaller pieces!
- Unlike the day-to-day mail we receive, in computing, packages take the form of modules and each of these separate, yet crucial, aspect of packaging corresponds to a different language! ⟪Pause⟫
Think about it: On average, a ‘coding language’ actually consists of at least 4 different languages! That's like if your package in the mail had
- a stamp in English,
- an address in Spanish,
- contents in Latin,
- the insurance policy in German,
- package weight in Gaelic.
What a headache!
- You shouldn't have to go to college to understand how your mail works!
2 Part II ─Building blocks
- Just as a clingy boyfriend, or a puppy that follows you around, is called a ‘dependent type’
we have those in computing too and they're essentially the same thing!
- Software that uses dependent types lets us treat the different pieces as if they were the same –except packages, they still live in their own language.
- Packages are a building block of computing, like Lego(!): You can build better, compact, software using pre-built blocks. ⟪ Gesture hands together. ⟫
- Since computing is so young as a science,
we don't really know how pieces should be glued together.
- You'd think otherwise since you have a brick in your pocket that can access all knowledge of humanity.
- For the most part, we cope by ad hoc methods – “it works good enough”.
- Unfortunately this does not scale!
- ⟪wave at slide⟫ package maintenance can get out of hand rather quickly for any large piece of software!
3 Part III ─Arithmetic
- Just as the clingy boyfriend and the puppy dog that follows you around can be seen as just more family; with dependent types, packages too can be treated as just normal blocks.
I'm researching the arithmetic of packages to help software developers manage large projects and reduce complexity & maintenance costs.
My research suggests that packaging can be treated in the same way we treat numbers.
- We can combine numbers by adding them, likewise we can combine packages by putting their pieces together in a new package!
- In grade school, “2 + 3 and 3 + 2 are both 5”, yet with packages “2 + 3 might be 5, but 3 + 2 might not even exist!”
So next time you send a package, think of what it means to me and how many languages are involved!