<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>samskivert</title>
	<atom:link href="http://samskivert.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://samskivert.com</link>
	<description>Ramblings by one Michael D. Bayne</description>
	<lastBuildDate>Sun, 07 Mar 2010 01:28:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Integration of Typed and Untyped Code in Thorn &#8211; Wrigstad, et al.</title>
		<link>http://samskivert.com/2010/03/integration-of-typed-and-untyped-code-in-thorn-wrigstad-et-al/</link>
		<comments>http://samskivert.com/2010/03/integration-of-typed-and-untyped-code-in-thorn-wrigstad-et-al/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 00:19:15 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1329</guid>
		<description><![CDATA[I already reviewed the other Thorn paper, Thorn—Robust, Concurrent, Extensible Scripting on the JVM. This one just goes into more detail on the type system, and how like-types interact with dynamic and static types. I like the idea of minimizing the impact of converting part of your code to being type checked, as a step [...]]]></description>
			<content:encoded><![CDATA[<p>I already reviewed the other Thorn paper, <cite><a href="http://samskivert.com/2010/01/thorn%E2%80%94robust-concurrent-extensible-scripting-on-the-jvm-vitek-et-al/">Thorn—Robust, Concurrent, Extensible Scripting on the JVM</a></cite>. This one just goes into more detail on the type system, and how like-types interact with dynamic and static types. I like the idea of minimizing the impact of converting part of your code to being type checked, as a step toward making your whole program statically typed.</p>
<p><b>Source</b>: <a href="http://www.cs.purdue.edu/homes/wrigstad/papers/thorn2.pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=1707801.1706343">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/integration-of-typed-and-untyped-code-in-thorn-wrigstad-et-al/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lackwit: A Program Understanding Tool Based on Type Inference &#8211; O&#8217;Callahan and Jackson</title>
		<link>http://samskivert.com/2010/03/lackwit-a-program-understanding-tool-based-on-type-inference-ocallahan-and-jackson/</link>
		<comments>http://samskivert.com/2010/03/lackwit-a-program-understanding-tool-based-on-type-inference-ocallahan-and-jackson/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 00:12:21 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1325</guid>
		<description><![CDATA[Another crazy use of type systems. Here the idea is to completely ignore the declared types of variables and instead just run a type inference algorithm (Milner&#8217;s Algorithm W) on the program and see what types you get. Instead of using primitive operations (like addition) to constrain variables to representation types (like int), you just [...]]]></description>
			<content:encoded><![CDATA[<p>Another crazy use of type systems. Here the idea is to completely ignore the declared types of variables and instead just run a type inference algorithm (Milner&#8217;s Algorithm W) on the program and see what types you get. Instead of using primitive operations (like addition) to constrain variables to representation types (like <code>int</code>), you just constrain variables to the same type. Naturally, assignment and function calls cause type unification as well. You end up with a bunch of abstract types assigned to variables that reflect whether they are &#8220;related&#8221;. The idea is that this helps you to understand where values flow through your program and what might be impacted when making changes. It sounds like an interesting idea; I have no idea if it would be useful in practice.</p>
<p><b>Source</b>: <a href="http://www.cs.ucdavis.edu/~su/teaching/ecs289c/papers/lackwit-a-program-understanding.pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=253228.253351">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/lackwit-a-program-understanding-tool-based-on-type-inference-ocallahan-and-jackson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Principal type-schemes for functional programs &#8211; Damas and Milner</title>
		<link>http://samskivert.com/2010/03/principal-type-schemes-for-functional-programs-damas-and-milner/</link>
		<comments>http://samskivert.com/2010/03/principal-type-schemes-for-functional-programs-damas-and-milner/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 00:02:46 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1323</guid>
		<description><![CDATA[This is a follow-up to Milner&#8217;s introduction of the type inference algorithm known as Hindley-Milner or Algorithm W. Here they provide a sketch of a proof that it infers &#8220;principal&#8221; types which are the most general possible types. (This proof was given by Hindley over a decade earlier, but apparently Milner nor the any of [...]]]></description>
			<content:encoded><![CDATA[<p>This is a follow-up to Milner&#8217;s introduction of the type inference algorithm known as <a href="http://en.wikipedia.org/wiki/Type_inference#Hindley.E2.80.93Milner_type_inference_algorithm">Hindley-Milner</a> or Algorithm W. Here they provide a sketch of a proof that it infers &#8220;principal&#8221; types which are the most general possible types. (This proof was given by Hindley over a decade earlier, but apparently Milner nor the any of the reviewers knew about it.) It&#8217;s the sort of paper that wastes no ink on pesky prose explanations of the nice compact formulas, which is great for the trees, but really annoying when any of those formulas contain typos. If you&#8217;re not already familiar with the subject matter, you might spend an awful lot of time trying to figure out whether they really meant theta-sub-one when they wrote theta-sub-two.</p>
<p><b>Source</b>: <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.18.7528&#038;rep=rep1&#038;type=pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=582176">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/principal-type-schemes-for-functional-programs-damas-and-milner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding User/Kernel Pointer Bugs With Type Inference &#8211; Johnson and Wagner</title>
		<link>http://samskivert.com/2010/03/finding-userkernel-pointer-bugs-with-type-inference-johnson-and-wagner/</link>
		<comments>http://samskivert.com/2010/03/finding-userkernel-pointer-bugs-with-type-inference-johnson-and-wagner/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:50:49 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1321</guid>
		<description><![CDATA[More fun with type systems! Here they use type annotations to distinguish between pointers under user control and pointers under kernel control, and type inference to allow them to only add annotations on system calls and on functions where passing a user pointer is safe and where it&#8217;s not. The type inference fills in everything [...]]]></description>
			<content:encoded><![CDATA[<p>More fun with type systems! Here they use type annotations to distinguish between pointers under user control and pointers under kernel control, and type inference to allow them to only add annotations on system calls and on functions where passing a user pointer is safe and where it&#8217;s not. The type inference fills in everything in between, or rather specifically identifies places where user pointers are used unsafely. They then run this on all 1.4 million lines of the Linux kernel. That&#8217;s a pretty impressive case study.</p>
<p>One of the cool things about this paper is that they mostly focus on how they improved an existing analysis tool to eliminate false positives (as well as characterizing the false positives they were unable to avoid), which provides object lessons in why you care about things like context sensitivity, flow sensitivity, field sensitivity, and so forth.</p>
<p><b>Source</b>: <a href="http://www.eecs.berkeley.edu/~daw/papers/cquk-usenix04.ps">PS</a> <a href="http://portal.acm.org/citation.cfm?id=1251384">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/finding-userkernel-pointer-bugs-with-type-inference-johnson-and-wagner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Design of a Task Parallel Library &#8211; Leijen et al.</title>
		<link>http://samskivert.com/2010/03/the-design-of-a-task-parallel-library-leijen-et-al/</link>
		<comments>http://samskivert.com/2010/03/the-design-of-a-task-parallel-library-leijen-et-al/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:43:26 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1302</guid>
		<description><![CDATA[Describes a library for .NET that introduces constructs for lightweight parallel programming, mainly Parallel.For and Parallel.Aggregate. These are parallel for-loops and fork/join (also popularly known as map/reduce). Unlike DPJ, these guys don&#8217;t provide a type system or any guarantees that you&#8217;re not shooting yourself in the foot. They claim those are &#8220;orthogonal concerns&#8221; which is [...]]]></description>
			<content:encoded><![CDATA[<p>Describes a library for .NET that introduces constructs for lightweight parallel programming, mainly <code>Parallel.For</code> and <code>Parallel.Aggregate</code>. These are parallel for-loops and fork/join (also popularly known as map/reduce). Unlike DPJ, these guys don&#8217;t provide a type system or any guarantees that you&#8217;re not shooting yourself in the foot. They claim those are &#8220;orthogonal concerns&#8221; which is a bit of a cop-out, but not totally. For parallel for-loop kind of stuff, you probably are doing something mostly safe. For fork/join and their more flexible basic futures, you&#8217;re free to use those in all sorts of naive ways and not realize that you have race conditions coming out of your proverbial orifices. In any case, they describe their implementation, which is cool.</p>
<p><b>Source</b>: <a href="http://research.microsoft.com/pubs/77368/TheDesignOfATaskParallelLibrary(draft2008).pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=1639949.1640106">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/the-design-of-a-task-parallel-library-leijen-et-al/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strictly Declarative Specification of Sophisticated Points-to Analyses &#8211; Bravenboer and Smaragdakis</title>
		<link>http://samskivert.com/2010/03/strictly-declarative-specification-of-sophisticated-points-to-analyses-bravenboer-and-smaragdakis/</link>
		<comments>http://samskivert.com/2010/03/strictly-declarative-specification-of-sophisticated-points-to-analyses-bravenboer-and-smaragdakis/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:36:10 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1318</guid>
		<description><![CDATA[Describes a points-to analysis expressed entirely as a Datalog program. (Datalog is awesome!) They focus on the optimizations done to the Datalog program to allow the analysis to be faster and more scalable than the state-of-the-art (the paper being from OOPSLA 2009). The existing techniques have moved toward using BDDs to improve scalability and these [...]]]></description>
			<content:encoded><![CDATA[<p>Describes a points-to analysis expressed entirely as a <a href="http://en.wikipedia.org/wiki/Datalog">Datalog</a> program. (Datalog is awesome!) They focus on the optimizations done to the Datalog program to allow the analysis to be faster and more scalable than the state-of-the-art (the paper being from OOPSLA 2009). The existing techniques have moved toward using <a href="http://en.wikipedia.org/wiki/Binary_decision_diagram">BDDs</a> to improve scalability and these guys are keen to prove that to be a bad idea.</p>
<p><b>Source</b>: <a href="http://www.cs.umass.edu/~yannis/doop-oopsla09prelim.pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=1640108">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/strictly-declarative-specification-of-sophisticated-points-to-analyses-bravenboer-and-smaragdakis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Points-to Analysis by Type Inference of Programs with Structures and Unions &#8211; Steensgaard</title>
		<link>http://samskivert.com/2010/03/points-to-analysis-by-type-inference-of-programs-with-structures-and-unions-steensgaard/</link>
		<comments>http://samskivert.com/2010/03/points-to-analysis-by-type-inference-of-programs-with-structures-and-unions-steensgaard/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:35:35 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[japantics]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1316</guid>
		<description><![CDATA[Extends the work described in Points-to Analysis in Almost Linear Time, which didn&#8217;t handle structs or unions (all this is for C). Unfortunately, C&#8217;s &#8220;type system&#8221; makes this work very messy because they need to account for all the nasty things you can do with structs (like overwrite two adjacent int fields by assigning through [...]]]></description>
			<content:encoded><![CDATA[<p>Extends the work described in <cite>Points-to Analysis in Almost Linear Time</cite>, which didn&#8217;t handle structs or unions (all this is for C). Unfortunately, C&#8217;s &#8220;type system&#8221; makes this work very messy because they need to account for all the nasty things you can do with structs (like overwrite two adjacent <code>int</code> fields by assigning through a <code>long</code> pointer). Sausage making indeed.</p>
<p><b>Source</b>: <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.51.1358&#038;rep=rep1&#038;type=pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=727458">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/points-to-analysis-by-type-inference-of-programs-with-structures-and-unions-steensgaard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Points-to Analysis in Almost Linear Time &#8211; Steensgaard</title>
		<link>http://samskivert.com/2010/03/points-to-analysis-in-almost-linear-time-steensgaard/</link>
		<comments>http://samskivert.com/2010/03/points-to-analysis-in-almost-linear-time-steensgaard/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:34:30 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1314</guid>
		<description><![CDATA[Describes a cool technique for turning a points-to analysis into a type inference problem&#8212;one that can be done in almost linear time, hence the title. As type checking is flow-insensitive, so is the analysis, and since it infers monomorphic types, the analysis is also context-sensitive, but there&#8217;s nothing stopping you from doing a polymorphic inference [...]]]></description>
			<content:encoded><![CDATA[<p>Describes a cool technique for turning a points-to analysis into a type inference problem&#8212;one that can be done in almost linear time, hence the title. As type checking is flow-insensitive, so is the analysis, and since it infers monomorphic types, the analysis is also context-sensitive, but there&#8217;s nothing stopping you from doing a polymorphic inference and getting a context sensitive analysis (which I think Steensgaard later did).</p>
<p><b>Source</b>: <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.55.8151&#038;rep=rep1&#038;type=pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=237727">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/points-to-analysis-in-almost-linear-time-steensgaard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Predicate Abstraction to Reduce Object-Oriented Programs for Model Checking &#8211; Visser, et al.</title>
		<link>http://samskivert.com/2010/03/using-predicate-abstraction-to-reduce-object-oriented-programs-for-model-checking-visser-et-al/</link>
		<comments>http://samskivert.com/2010/03/using-predicate-abstraction-to-reduce-object-oriented-programs-for-model-checking-visser-et-al/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:33:58 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1312</guid>
		<description><![CDATA[My introduction to predicate abstraction (not the first work to make use of it), another interesting technique. Basic idea is: you have some complicated state in your program that is causing your model checker to blow up (i.e. consider too many states), replace it with a predicate over that state that captures whatever it is [...]]]></description>
			<content:encoded><![CDATA[<p>My introduction to predicate abstraction (not the first work to make use of it), another interesting technique. Basic idea is: you have some complicated state in your program that is causing your model checker to blow up (i.e. consider too many states), replace it with a predicate over that state that captures whatever it is that your program cares about. Maybe you have two timer variables that could in theory each take on any 64-bit value, but all you care about is whether one is greater than the other. You can reduce 2^128 possible states to 2. Big win. In this case, they used it to apply model checking directly to the source code of a real-time OS kernel.</p>
<p><b>Source</b>: <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.26.3201&#038;rep=rep1&#038;type=pdf">PDF</a> <a href="http://portal.acm.org/citation.cfm?id=349360.351125">ACM</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/using-predicate-abstraction-to-reduce-object-oriented-programs-for-model-checking-visser-et-al/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Counterexample-Guided Abstraction Refinement &#8211; Clarke, et al.</title>
		<link>http://samskivert.com/2010/03/counterexample-guided-abstraction-refinement-clarke-et-al/</link>
		<comments>http://samskivert.com/2010/03/counterexample-guided-abstraction-refinement-clarke-et-al/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 23:33:08 +0000</pubDate>
		<dc:creator>mdb</dc:creator>
				<category><![CDATA[papers]]></category>

		<guid isPermaLink="false">http://samskivert.com/?p=1310</guid>
		<description><![CDATA[This paper was part of my introduction to model checking. It introduces an idea that has gotten a lot of mileage in the program analysis and model checking community. To wit: start with a rough (but soundly over-approximating) abstraction, if said abstraction demonstrates a violation figure out whether the violation is real (you&#8217;re done) or [...]]]></description>
			<content:encoded><![CDATA[<p>This paper was part of my introduction to model checking. It introduces an idea that has gotten a lot of mileage in the program analysis and model checking community. To wit: start with a rough (but soundly over-approximating) abstraction, if said abstraction demonstrates a violation figure out whether the violation is real (you&#8217;re done) or spurious, in the latter case use the spurious example to refine your abstraction as little as possible. Repeat until your abstraction is sufficiently refined to find a real violation or no violations.</p>
<p><b>Source</b>: <a href="http://reports-archive.adm.cs.cmu.edu/anon/2000/CMU-CS-00-103.pdf">PDF</a> <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.407">CiteSeerX</a></p>
]]></content:encoded>
			<wfw:commentRss>http://samskivert.com/2010/03/counterexample-guided-abstraction-refinement-clarke-et-al/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
