fuckyeahpapers
fuckyeahpapers
Fuck Yeah Papers
15 posts
Collaborative blog where we share Computer Science papers we are reading. Maintained by Ramsey Nasser, Brendan Berg, and Scott Vokes
Don't wanna be here? Send us removal request.
fuckyeahpapers · 11 years ago
Link
Programming languages often hide their implementation at a level of abstraction that is inaccessible to programmers. Decisions and tradeoffs made by the language designer at this level (single vs. multiple inheritance, mixins vs. Traits, dynamic dispatch vs. static case analysis, etc.) cannot be re- paired easily by the programmer when they prove inconve- nient or inadequate. The artificial distinction between im- plementation language and end-user language can be elim- inated by implementing the language using only end-user objects and messages, making the implementation accessi- ble for arbitrary modification by programmers. We show that three object types and five methods are sufficient to boot- strap an extensible object model and messaging semantics that are described entirely in terms of those same objects and messages. Raising the implementation to the programmers’ level lets them design and control their own implementation mechanisms in which to express concise solutions and frees the original language designer from ever having to say “I’m sorry”. 
0 notes
fuckyeahpapers · 11 years ago
Link
Andrej Bauer, Matija Pretnar
Department of Mathematics and Physics University of Ljubljana, Slovenia
Eff is a programming language based on the algebraic approach to computational effects, in which effects are viewed as algebraic operations and effect handlers as homomorphisms from free algebras. Eff supports first-class effects and handlers through which we may easily define new computational effects, seamlessly combine existing ones, and handle them in novel ways. We give a denotational semantics of eff and discuss a prototype implementation based on it. Through examples we demonstrate how the standard effects are treated in eff , and how eff supports programming techniques that use various forms of delimited continuations, such as backtracking, breadth-first search, selection functionals, cooperative multi-threading, and others.
1 note · View note
fuckyeahpapers · 11 years ago
Link
John C. Baez
Department of Mathematics, University of California Riverside, California 92521, USA
Mike Stay
Computer Science Department, University of Auckland
0 notes
fuckyeahpapers · 11 years ago
Link
**John Backus **
*IBM Research Laboratory, San Jose *
Conventional programming languages are growing ever more enormous, but not stronger. Inherent defects at the most basic level cause them to be both fat and weak: their primitive word-at-a-time style of program- ming inherited from their common ancestor--the von Neumann computer, their close coupling of semantics to state transitions, their division of programming into a world of expressions and a world of statements, their inability to effectively use powerful combining forms for building new programs from existing ones, and their lack of useful mathematical properties for reasoning about programs.
An alternative functional style of programming is founded on the use of combining forms for creating programs. Functional programs deal with structured data, are often nonrepetitive and nonrecursive, are hierarchically constructed, do not name their arguments, and do not require the complex machinery of procedure declarations to become generally applicable. Combining forms can use high level programs to build still higher level ones in a style not possible in conventional languages.
Associated with the functional style of programming is an algebra of programs whose variables range over programs and whose operations are combining forms. This algebra can be used to transform programs and to solve equations whose "unknowns" are programs in much the same way one transforms equations in high school algebra. These transformations are given by algebraic laws and are carried out in the same language in which programs are written. Combining forms are chosen not only for their programming power but also for the power of their associated algebraic laws. General theorems of the algebra give the detailed behavior and termination conditions for large classes of programs.
A new class of computing systems uses the functional programming style both in its programming language and in its state transition rules. Unlike von Neumann languages, these systems have semantics loosely coupled to states--only one state transition occurs per major computation.
0 notes
fuckyeahpapers · 11 years ago
Link
Manfred von Thun
The language Joy is a purely functional programming language. Whereas all other functional programming languages are based on the application of functions to arguments, Joy is based on the composition of functions. All such functions take a stack as argument and produce a stack as value. Consequently much of Joy looks like ordinary postfix notation. However, in Joy a function can consume any number of parameters from the stack and leave any number of results on the stack. The concatenation of appropriate programs denotes the composition of the functions which the programs denote. One of the datatypes of Joy is that of quoted programs, of which lists are a special case. Some functions expect quoted programs on top of the stack and execute them in many different ways, effectively by dequoting. So, where other functional languages use abstraction and application, Joy uses quotation and combinators – functions which perform dequotation. As a result, there are no named formal parameters, no substitution of actual for formal parameters, and no environment of name-value pairs. Combinators in Joy behave much like functionals or higher order functions in other languages, they minimise the need for recursive and non-recursive definitions. Because there is no need for an environment, Joy has an exceptionally simple algebra, and its programs are easily manipulated by hand and by other programs. Many programs first construct another program which is then executed.
0 notes
fuckyeahpapers · 11 years ago
Link
Keir Fraser
University of Cambridge Technical Report 579
Mutual-exclusion locks are currently the most popular mechanism for interprocess synchronisation, largely due to their apparent simplicity and ease of implementation. In the parallel-computing environments that are increasingly commonplace in high-performance applications, this simplicity is deceptive: mutual exclusion does not scale well with large numbers of locks and many concurrent threads of execution. Highly-concurrent access to shared data demands a sophisticated ‘fine-grained’ locking strategy to avoid serialising non-conflicting operations. Such strategies are hard to design correctly and with good performance because they can harbour problems such as deadlock, priority inversion and convoying. Lock manipulations may also degrade the performance of cache-coherent multiprocessor systems by causing coherency conflicts and increased interconnect traffic, even when the lock protects read-only data.
In looking for solutions to these problems, interest has developed in lock-free data structures. By eschewing mutual exclusion it is hoped that more efficient and robust systems can be built. Unfortunately the current reality is that most lock-free algorithms are complex, slow and impractical. In this dissertation I address these concerns by introducing and evaluating practical abstractions and data structures that facilitate the development of large-scale lock-free systems.
0 notes
fuckyeahpapers · 11 years ago
Link
James R. Driscoll , Neil Sarnak , Daniel D. Sleator , Robert E. Tarjan
Journal of Computer And System Sciences
This paper is a study of persistence in data structures. Ordinary data structures are ephemeral in the sense that a change to the structure destroys the old version, leaving only the new version available for use. In contrast, a persistent structure allows access to any version, old or new, at any time. We develop simple, systematic, and efficient techniques for making linked data structures persistent. We use our techniques to devise persistent forms of binary search trees with logarithmic access, insertion, and deletion times and O(1) space bounds for insertion and deletion.
0 notes
fuckyeahpapers · 11 years ago
Link
Alessandro Warth, Yoshiki Ohshima, Ted Kaehler, and Alan Kay
Viewpoints Research Institute
The state of an imperative program—e.g., the values stored in global and local variables, arrays, and objects’ instance variables—changes as its state- ments are executed. These changes, or side effects, are visible globally: when one part of the program modifies an object, every other part that holds a reference to the same object (either directly or indirectly) is also affected. This paper intro- duces worlds, a language construct that reifies the notion of program state and enables programmers to control the scope of side effects. We investigate this idea by extending both JavaScript and Squeak Smalltalk with support for worlds, pro- vide examples of some of the interesting idioms this construct makes possible, and formalize the semantics of property/field lookup in the presence of worlds. We also describe an efficient implementation strategy (used in our Squeak-based prototype), and illustrate the practical benefits of worlds with two case studies.
0 notes
fuckyeahpapers · 11 years ago
Link
Craig Chambers and the Cecil Group
Department of Computer Science and Engineering University of Washington
Cecil is a purely object-oriented language intended to support rapid construction of high-quality, extensible software. Cecil combines multi-methods with a simple classless object model, a kind of dynamic inheritance, modules, and optional static type checking. Instance variables in Cecil are accessed solely through messages, allowing instance variables to be replaced or overridden by methods and vice versa. Cecil’s predicate objects mechanism allows an object to be classified automatically based on its run-time (mutable) state. Cecil’s static type system distinguishes between subtyping and code inheritance, but Cecil enables these two graphs to be described with a single set of declarations, streamlining the common case where the two graphs are parallel. Cecil includes a fairly flexible form of parameterization, including explicitly parameterized objects, types, and methods, as well as implicitly parameterized methods related to the polymorphic functions commonly found in functional languages. By making type declarations optional, Cecil aims to allow mixing of and migration between exploratory and production programming styles. Cecil supports a module mechanism that enables independently-developed subsystems to be encapsulated, allowing them to be type-checked and reasoned about in isolation despite the presence of multi-methods and subclassing. Objects can be extended externally with additional methods and instance variables, often encapsulated in separate modules, supporting a kind of role- based or subject-oriented programming style.
0 notes
fuckyeahpapers · 11 years ago
Link
Michael D. Ernst and Craig S. Kaplan and Craig Chambers
ECOOP '98, the 12th European Conference on Object-Oriented Programming
Predicate dispatching generalizes previous method dispatch mechanisms by permitting arbitrary predicates to control method applicability and by using logical implication between predicates as the overriding relationship. The method selected to handle a message send can depend not just on the classes of the arguments, as in ordinary object-oriented dispatch, but also on the classes of subcomponents, on an argument's state, and on relationships between objects. This simple mechanism subsumes and extends object-oriented single and multiple dispatch, ML-style pattern matching, predicate classes, and classifiers, which can all be regarded as syntactic sugar for predicate dispatching. This paper introduces predicate dispatching, gives motivating examples, and presents its static and dynamic semantics. An implementation of predicate dispatching is available.
0 notes
fuckyeahpapers · 11 years ago
Link
Jason Hemann, Daniel P. Friedman
Indiana University
This paper presents μKanren, a minimalist language in the miniKanren family of relational (logic) programming languages. Its implementation comprises fewer than 40 lines of Scheme. We motivate the need for a minimalist miniKanren language, and iteratively develop a complete search strategy. Finally, we demonstrate that through sufficient user-level features one regains much of the expressiveness of other miniKanren languages. In our opinion its brevity and simple semantics make μKanren uniquely elegant.
0 notes
fuckyeahpapers · 11 years ago
Link
Thomas Papadakis
University of Waterloo, PhD Thesis
This thesis is concerned with various forms of skip lists, and with probabilistic analyses of algorithms. We investigate three topics; one topic from each of these two areas, and another topic common to both of them
0 notes
fuckyeahpapers · 11 years ago
Link
Diego Nehab & Hugues Hoppe
Microsoft Research
A method for encoding a vector graphic in a texture, then rendering in a single efficient pass with nice antialiasing.
The distance vector shader-based computation shown in Figure 7 is demo-ed here: https://www.shadertoy.com/view/XsX3zf
... and it's extrapolated to 3D and used to awesome effect in this shader by Inigo Quilez here: https://www.shadertoy.com/view/ldj3Dm
0 notes
fuckyeahpapers · 11 years ago
Link
Roberto Ierusalimschy
PUC-Rio, Rio de Janeiro, Brazil
Lua is a scripting language used in many industrial applica- tions, with an emphasis on embedded systems and games. Two key points in the design of the language that led to its widely adoption are flexi- bility and small size. To achieve these two conflicting goals, the design emphasizes the use of few but powerful mechanisms, such as first-class functions, associative arrays, coroutines, and reflexive capabilities. As a consequence of this design, although Lua is primarily a procedural lan- guage, it is frequently used in several different programming paradigms, such as functional, object-oriented, goal-oriented, and concurrent pro- gramming, and also for data description.
0 notes
fuckyeahpapers · 11 years ago
Link
Úlfar Erlingsson, Mukkai Krishnamoorthy and T.V. Raman.
Information Processing Letters 60
We present a new scheme for building static search trees, using multiway radix search. We apply this method to the problem of code generation for switch statements in imperative languages. For sparse case sets, the method has an advantage over existing methods, empirically requiring fewer than three branches for the average search. We give timing results that show that in practice our method runs faster than other methods on large sparse case sets.
4 notes · View notes