lambda_mountain

Crates.iolambda_mountain
lib.rslambda_mountain
version1.12.38
sourcesrc
created_at2023-07-02 23:54:19.838632
updated_at2024-05-13 20:46:47.835917
descriptionLambda Mountain
homepage
repositoryhttps://github.com/andrew-johnson-4/-
max_upload_size
id906499
size3,795,318
Andrew Johnson (andrew-johnson-4)

documentation

README

Lambda Mountain

λ☶ (pronounced Lambda Mountain) is a compiler backend that provides a relatively clean implementation of System F<: with Specialization. "System F<: with Specialization" is just a fancy way of saying Functional / Object-Oriented Programming in formal speak. The term/type system is somewhat less expressive than something like Calculus of Constructions, but is probably more familiar to most programmers. The language syntax is intended only as an intermediate form, so this project is more similar to GCC than to C.

More information is available on the λ☶ Wiki.

What is Ad-Hoc Specialization?

If we have several overloaded functions then specialization lets us choose the best fit for any particular application.

f := λ(: x X). x;
f := λ(: y Y). y;

f (: x X)

In this example the function application does not “fit” the application that expects a Y type argument, so there is only one possible candidate function.


type X implies Y;

f := λ(: x X). x;
f := λ(: y Y). y;

f (: x X)

Now both candidate functions “fit”, however X is a narrower type than Y. All X are Y, but not all Y are X. In this case we say that X is a “better fit” than Y.


f := λ(: x X). form 1;
f := λ(: x X). form 2;

f (: x X)

In this example both candidate functions “fit” AND are equivalent. In this case we apply metrics to determine the best fit. A metric is an order that can be applied to term/type pairs to determine which is a “better fit” in non-semantic cases. Metrics are very useful when there exist multiple equivalent forms of code representation that have different performance characteristics.

Why is Ad-Hoc Specialization so Important For an Assembler?

Specialization allows us to express high-level ideas at the level of a generic functional language AND compile the code down to machine code transparently. There are no hidden layers in the compiler. The programmer gets to inspect and verify every single transformation down to individual instructions.

More About The Type System

The type system is strongly normalizing and decidable as long as all overloaded functions are given explicit types.

Prominent Features include:

  • Higher Order Functions (Functional Programming)
  • Parametric Polymorphism (Generic Programming)
  • Subtyping (Object Hierarchies)
  • Ad-Hoc Polymorphism (Function Hierarchies)
  • Plural Types (Types behave more like logical predicates)

Commit count: 2852

cargo fmt