Conal Elliott's home page
supertech.csail.mit.edu/cilk/ Cilk Cilk (pronounced "silk") is a linguistic and runtime technology for algorithmic multithreaded programming developed at MIT. The philosophy behind Cilk is that a programmer should concentrate on structuring her or his program to expose parallelism and exploit locality, leaving Cilk's runtime system with the responsibility of scheduling the computation to run efficiently on a given platform. The Cilk runtime system takes care of details like load balancing, synchronization, and communication protocols. Cilk is algorithmic in that the runtime system guarantees efficient and predictable performance.
The circle-ellipse problem in software development (sometimes known as the square-rectangle problem ) illustrates a number of pitfalls which can arise when using subtype polymorphism in object modelling . The issues are most commonly encountered when using object-oriented programming . This is the L in the acronym S.O.L.I.D. which is known as the Liskov substitution principle . This problem arises as a violation of that principle. Circle-ellipse problem
SOLID Development Principles – In Motivational Pictures I found the Motivator this morning. It lets you create your own motivational pictures. So, here’s my first run at creating the SOLID software development principles in motivational picture form.
Duck typing In computer programming with object-oriented programming languages , duck typing is a style of dynamic typing in which an object's methods and properties determine the valid semantics, rather than its inheritance from a particular class or implementation of a specific interface. The name of the concept refers to the duck test , attributed to James Whitcomb Riley (see history below), which may be phrased as follows: When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck. [ 1 ] In duck typing, one is concerned with just those aspects of an object that are used, rather than with the type of the object itself. For example, in a non-duck-typed language, one can create a function that takes an object of type Duck and calls that object's walk and quack methods. In a duck-typed language, the equivalent function would take an object of any type and call that object's walk and quack methods.
Substitutability is a principle in object-oriented programming . It states that, in a computer program , if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e., objects of type S may be substituted for objects of type T) without altering any of the desirable properties of that program (correctness, task performed, etc.). More formally, the Liskov substitution principle ( LSP ) is a particular definition of a subtyping relation, called (strong) behavioral subtyping , that was initially introduced by Barbara Liskov in a 1987 conference keynote address entitled Data abstraction and hierarchy . Liskov substitution principle
Design by contract Design by contract ( DbC ), also known as contract programming , programming by contract and design-by-contract programming , is an approach for designing software . It prescribes that software designers should define formal , precise and verifiable interface specifications for software components , which extend the ordinary definition of abstract data types with preconditions , postconditions and invariants . These specifications are referred to as "contracts", in accordance with a conceptual metaphor with the conditions and obligations of business contracts. "Design by Contract" is a registered trademark [ 1 ] of Eiffel Software in the United States, and should not be confused with the general design approach. Microsoft calls their design-by-contract programming implementation " Code Contracts ". [ 2 ] [ edit ] History
The lambda cube. Direction of each arrow is direction of inclusion. In mathematical logic and type theory , the λ-cube is a framework for exploring the axes of refinement in Coquand 's calculus of constructions , starting from the simply typed lambda calculus as the vertex of a cube placed at the origin, and the calculus of constructions (higher order dependently-typed polymorphic lambda calculus) as its diametrically opposite vertex. Lambda cube
Logical harmony , a name coined by Sir Michael Dummett , is a supposed constraint on the rules of inference that can be used in a given logical system . The logician Gerhard Gentzen proposed that the meanings of logical connectives could be given by the rules for introducing them into discourse. For example, if one believes that the sky is blue and one also believes that grass is green , then one can introduce the connective and as follows: The sky is blue AND grass is green. Gentzen's idea was that having rules like this is what gives meaning to one's words, or at least to certain words. The idea has also been associated with Wittgenstein 's dictum that in many cases we can say, the meaning is the use. Most contemporary logicians prefer to think that the introduction rules and the elimination rules for an expression are equally important. Logical harmony
This is a followup on my last entry about the Halting Problem. The diagonalization proof of the Halting Problem seems to be more difficult on the surface. I claimed that the deceiver sets up a situation without an input. In the diagonalization proof, there is an input. Or is there? Let's go through the official proof. Vorlath - Halting Problem Diagonalization
Game Pitches | Game Pitches
Service-oriented architecture Layer interaction in service-oriented Architecture Service-oriented architecture ( SOA ) is a software design methodology based on structured collections of discrete software modules, known as services, that collectively provide the complete functionality of a large or complex software application. [ 1 ] Each service that makes up an SOA application is designed to provide a tightly defined set of functions . As a result, each service is built as a discrete piece of code .
Service-orientation design principles are proposed principles for developing the solution logic of services within service-oriented architectures (SOA). [ 1 ] [ 2 ] [ 3 ] [ edit ] Overview The success of software development based on any particular design paradigm is never assured. Software developed under the service-oriented design paradigm carries even greater risks. This is because a service-oriented architecture usually spans multiple business areas and requires considerable initial analysis. Therefore, SOA developed without concrete guidelines is very likely to fail. [ 4 ] To ensure that the move towards service-orientation is a positive change that delivers on its promised benefits, it is helpful to adopt a set of rules. [ 5 ] Service-Orientation Design Principles
Orchestration (computing) Orchestration describes the automated arrangement, coordination, and management of complex computer systems, middleware , and services. It is often discussed as having an inherent intelligence or even implicitly autonomic control, but those are largely aspirations or analogies rather than technical descriptions. In reality, orchestration is largely the effect of automation or systems deploying elements of control theory . [ 1 ]
Web Service Choreography Web Service Choreography ( WS-Choreography ) is a specification by the W3C defining a XML -based business process modeling language that describes collaboration protocols of cooperating Web Service participants, in which services act as peers, and interactions may be long-lived and stateful. ( Orchestration is another term with a very similar, but still different meaning.) The main effort to get a choreography, The W3C Web Services Choreography Working Group, was closed on the 10th July 2009 [ 1 ] leaving WS-CDL as a Candidate Recommendation. [ edit ] Service Choreography Service choreography is a form of service composition in which the interaction protocol between several partner services is defined from a global perspective. [ 2 ] The intuition underlying the notion of service choreography can be summarised as follows:
A simple example of two components expressed in UML 2.0. The checkout component, responsible for facilitating the customer's order, requires the card processing component to charge the customer's credit/debit card (functionality that the latter provides ). Component-based software engineering (CBSE) (also known as component-based development (CBD) ) is a branch of software engineering that emphasizes the separation of concerns in respect of the wide-ranging functionality available throughout a given software system . It is a reuse-based approach to defining, implementing and composing loosely coupled independent components into systems. Component-based software engineering
Prefer Composition over Inheritance | Learn & Master Cocos2D Game Development
Cowboy Programming » Evolve Your Hierarchy
Elliott » Denotational design with type class morphisms