Code Monkey home page Code Monkey logo

maam's People

Contributors

danking avatar davdar avatar dvanhorn avatar franklinchen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

maam's Issues

Signpost sections

Head off each section with more prose giving intuition.

Keep the implementer in mind at all times, tell them what they need to understand if they want to use it, and what they don't need to know (what we've done for them).

Include proofs?

There are lots of proofs that I could include if it's valuable to do so.

  • That my monad transformer is indeed a monad (satisfying monad laws)
    • This isn't so long. it relies on the functor laws for the underlying join-semilattice functor though, so that means more category theory language :(
  • That my mappings from (a -> m(b)) to (Sigma -> Sigma) are actually themselves Galois connections.
    • These proofs require alpha and gamma to be homomorphisms between categories, and the proofs are more involved.
  • That my monad transformer combinations are ordered path-sensitive <= flow-sensitive <= flow-insensitive. I actually haven't done these proofs yet, but I imagine they're simple (since they reduce to proving ordered-ness for monad transformers piecewise).

Splitting into files vs vim folding

I like to use vim folding for latex documents rather than splitting a document into files for each section. It makes searching and jumping around a lot easier, but I rely on my editor (vim) to collapse {-{ and }-} unless I ask it to expand those sections.

I change the default fold tags from {{{,}}} to {-{,}-} because }}} shows up quite a lot in latex documents. Here is the line from my vim file that changes this:

autocmd BufReadPost,BufNewFile *.tex exe "set foldmarker={-{,}-}"

If you guys would rather split sections into new files I'm okay doing that too...

Build Instructions

Having a hard time getting this to build/run - a git clone and then a make build doesn't do it. After cabal install'ing LambdaJS, things get closer, but not all the way there. Am I missing something obvious?

Abstraction for Kon.

I haven't abstracted Kon in the semantics yet. Or rather, I haven't replaced Kon with Kon* (a pointer) and heap allocated continuation frames yet. I'd like input for the cleanest way to do this.

Option 1) Make Kon an Addr and heap-allocate continuations. This means Val will be (Int + Clo + Frame).

Option 2) Make Kon an Addr and split continuations into a separate Kon heap. Val will be (Int + Clo) and KStore will map Addr -> Frame. This state space is more amenable to a pushdown abstract (with separate heaps for values and continuations), but I don't plan on adding pushdown to this.

Ideas?

Order of introducing abstract add and time (breaking recursion in the store)

Currently Addr/Time is introduced after exposing abstract domain. The chronology is currently:

Semantics
-> Concrete Interpreter
-> Expose Abstract Domain (Env = Var -> Val)
-> Expose AAM (Env = Var -> Addr, Store = Addr -> Val)
-> Expose Flow Sensitivities (I need a store in the state space so we can talk about widening)

I can imagine an alternate chronology
-> Concrete Interpreter (Env = Var -> Val)
-> Concrete Interpreter with allocation semantics (Env = Var -> Addr, Store = Addr -> Val)
-> Expose Abstract Domain
-> Expose AAM (doesn't alter state space)
-> Expose Flow Sensitivities (also doesn't alter state space)

In terms of the AAM methodology of "design concrete features and then systematically abstract" the second story might be better. Most important is what is more clear for the reader. Thoughts?

Font is wrong

The title and section font, and maybe the main body font is set not what the sigplan style sheet sets. Looks like CM. Looks like this is the culprit:

\usepackage{fontspec}
\setmonofont[Scale=0.7]{DejaVu Sans Mono}

Not sure what the right workaround is if we want that mono font, but the paper looks a lot better when that is commented out.

Cite and discuss Hardekopf

His paper introduces an time stamp feature to AAM for which properties can be proven and re-used. Thus it's relevant to discuss as an instance of re-usable metatheory for static analysis.

What is the type of tick?

In papers, we like to write tick as (tick : \Sigma * Time -> Time).

First, in our setting, we don't really have a \Sigma. We're in a monad, which later will be related to a \Sigma by relating (a -> m b) to (\Sigma -> \Sigma).

Second, tick doesn't really need all of \Sigma, but we give it all of \Sigma to claim the interface is very general and admits lots of interesting tick functions. Although, in practice (that is, the practice of writing papers) we only use the Exp and Kon components of \Sigma in the implementation of tick.

Currently I have (tick : Exp * Kon * Time -> Time). Any objections? If I am going to pull out the parts of \Sigma that matter, are Exp and Kon the right parts?

Resolve issue with flow-sensitive example

There is an error in the current example for flow sensitivity, pointed out by one of the reviewers. The fix makes the distinction go away, so we need to figure out how to proceed with the example.

Choose an evaluation suite

What are we going to show for the empirical evaluation? We should pick some set of programs (Scheme, Haskell, etc.) and target that.

Related work: cite for monad transfomer

The Liang et al paper cites a TR by Moggi for suggesting monad transformers. Is that the right cite (I took a quick look and he doesn't use that term, which isn't to say the idea isn't there...)

syntactic convention for opaque, concrete, and abstract things

For example, it is common to use Val and \widehat{Val} for concrete and abstract values. When we define Val to be a parameter, it would be nice to have a syntactic convention for this which isn't Val or \widehat{Val}. For example:

"To create an analysis we design \widehat{Val} and prove the galois connection \concrete{Val}\galois{\alpha}{\gamma}\widehat{Val}. The interpreter with \parameter{Val} instantiated to \widehat{Val} will then be a correct abstraction of instantiating \parameter{Val} to \concrete{Val}."

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.