Hoomla

“Symmetry is a complexity reducing concept […]; seek it everywhere.”

Salsa: .Net från Haskell

clock oktober 10, 2008 16:20 by author kullbom

Idag annonserade en Andrew Appleyard Salsa: A .NET Bridge for Haskell på Haskell Cafe.

Projektet ser ut att vara en del av hans Bachelor of Science (under ledning av Manuel M. T. Chakravarty):

   A .NET Bridge for Haskell: Dancing with the Devil

...vars abstract får beskriva det hela:

Libraries are essential for software development in any language. Access to the extensive collection of high-quality libraries provided by the Microsoft .NET Framework is, understandably, something that many programmers require. This thesis addresses the challenge of providing access to .NET libraries from Haskell by developing a runtime bridge, called Salsa, between their respective runtime systems. In doing this, a new technique for binding object-oriented subtyping and method overloading in Haskell was developed, which is type safe and has a convenient syntax.

(Sedan tidigare fanns HOC: A Haskell to Objective-C Binding - sida hos Google Code - med liknande syfte...)

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


I brist på annat

clock oktober 9, 2008 10:55 by author kullbom

Några epigram angående programmering (källa: "Epigrams in Programming" av Alan J. Perlis - SIGPLAN Notices Vol. 17, No. 9, September 1982, pages 7 - 13 [Online]):

A programming language is low level when its programs require attention to the irrelevant.
Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy.
It is better to have 100 functions operate on one data structure than 10 functions on 10 data structures.
A language that doesn't affect the way you think about programming, is not worth knowing.
If you have a procedure with ten parameters, you probably missed some.

Jim Hornings parafras på den sista är kanske mer aktuell idag:

If you have ten million test cases, you probably missed one.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Teknikbyte

clock oktober 1, 2008 18:56 by author kullbom

Hoomla använder från och med idag inte längre WordPress utan körs nu istället med hjälp av BlogEngine.NET - en lösning skriven i C#.

RSS-feed finns numera under http://blog.hoomla.se/syndication.axd?format=rss

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Nödvändig kunskap?

clock augusti 16, 2008 09:30 by author kullbom

Matthias Felleisen (författare till bl.a. “How to Design Programs - An Introduction to Computing and Programming”, “On the Expressive Power of Programming Languages” och “The Design and Implementation of Typed Scheme” - se Intressanta “papers”) har ett intressant uttalande om vad en working programmer behöver ha ett hum om:

A working programmer should have seen:

  • syntax
  • reductions (eval is a function via Church Rosser)
  • scope vs de Bruijn indices
  • beta vs beta-value, normal form [relevant in math] vs value [relevant in cs]
  • basic denotational semantics (typed PCF suffices)
  • typed lc plus type system, SNF
  • extended with some amount of fancy type system stuff (say explicit polymorphism)

That’s approx 10 weeks worth of course material. Or 2 weeks of self-study with a one-hour lunch break.

En bra sammanfattning att utgå ifrån om någon av punkterna känns helt främmande. För egen del skall jag genast ägna lite tid åt vad som menas med denotational semantics.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


En glömd monad

clock augusti 11, 2008 20:25 by author kullbom

Efter att precis ha läst om “The Marvels of Monads” av “Yet Another Language Geek” - om monader i C# - insåg jag att den är en av de mer begripliga artiklarna i ämnet och samtidigt en av de få (utanför Haskell-världen) som tar upp de monadiska lagarna.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Tre lokala vävbidrag

clock augusti 11, 2008 16:52 by author kullbom

För att väva ihop hoomla ytterligare lite länkar jag härmed in tre dokument i olika stadier av utveckling:

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Closures och for-loopar

clock augusti 11, 2008 16:22 by author kullbom

Att följande kod resulterar i att tre sjuor skrivs till konsolen är ett lite märkligt faktum i C#.

List<Action> actions = new List<Action>();

for (int i = 4; i < 7; i++)
   actions.Add(() => { Console.WriteLine(i.ToString()); });

foreach(Action a in actions)
   a();

Att det är så beror på att C# återanvänder en och samma variabel (i) och att de closures som samlas upp i actions har kapslat in en referens till ett och samma i till skillnad från det aktuella värdet av i. Det samma gäller för övrigt foreach-loopar.

Bästa sättet att komma runt problemet är som vanligt att inte använda de primitiva loop-konstruktionerna i C# (ForEach-metoden på listor lider inte av det här problemet då lambdan alltid skapar ett nytt “scope”) men om man envisas skriver man lämpligen istället något i stil med:

List<Action> actions = new List<Action>();

for (int i = 4; i < 7; i++)
{
    int j = i;
    actions.Add(() => { Console.WriteLine(j.ToString()); });
}

foreach(Action a in actions)
   a();

Erik Meijer reder ut det hela i i sin Programming Language Beauty: Look Closure. Många intressanta länkar om man inte tycker C# är så spännande längre.

Just nu värderat 4.0 av 1 människor

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


NAnt F#-task

clock augusti 10, 2008 17:46 by author kullbom
F#-entusiasten “Wildart” har gjort oss alla en tjänst och satt ihop en NAnt extension for F#. Kod och mer information finns på Google Code.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


REPL och MacOSX igen

clock augusti 9, 2008 10:47 by author kullbom

Efter min förra post om REPL under MacOSX har jag provat ytterligare ett par alternativ och nu kommit fram till att TextMate nog trots allt är det bästa.

Med hjälp av följande kommando-script bundet till Enter-tangenten (och Input satt till Selected Text or Line) har jag precis det REPL-stöd jag vill ha.

EXPR="$(cat | sed 's/\\/\\\\/g' | sed 's/\"/\\\"/g')" 

export SHELL_NAME=${SHELL_NAME:="FSharp Interactive"}
export SHELL_INTERPRETER=${SHELL_INTERPRETER:="fsi"}

osascript << END
tell application "iTerm"
    if (count (every session of every terminal)) = 0 then
        make new terminal
    end if
    tell the first terminal
        if not (exists session named "$SHELL_NAME") then
            launch session "Default"
            tell the current session
                set name to "$SHELL_NAME"
                write text "$SHELL_INTERPRETER"
            end tell
        end if
        select session named "$SHELL_NAME"
        tell session named "$SHELL_NAME"
            write text "$EXPR" & ";;"
        end tell
    end tell
end tell
END

Det här scriptet är skrivet för F Sharp och dess “F# Interactive” (fsi) med kan med några små justeringar lätt användas för Haskell (ghci), OCaml (ocaml), Lisp, Scala eller liknande.

Edit: Jag använder en något modifierad version av den “F# language grammar” som återfinns i SVN-repot för TextMate bundles.

Just nu värderat 5.0 av 1 människor

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


REPL och MacOSX

clock augusti 2, 2008 16:24 by author kullbom

Alla språk med självaktning (Lisp, Haskell, OCaml, Scala etc.) tillhandahåller ju en REPL (“Read-Eval-Print Loop”) och därmed även F# där den kallas “F# interactive” (FSI). En REPL körs i allmänhet från terminalen (t.ex. iTerm) vilket medför en hel del begränsningar men det finns ett par vettiga alternativ.

För OCaml finns två alternativ: William D. Neumanns CocOCaml och Yann Armelins CamlX. Båda dessa kan lätt konfigureras om från att använda OCaml till att istället köra “F# interactive” (eller t.ex. GHCI).

Utöver dessa två alternativ kan man slänga ihop en liten plugin för ScrIDE (från gandreas software).

Själv kör jag CamlX då denna har syntaxfärgning för OCaml som ger visst stöd även för F#.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Mer monader

clock augusti 2, 2008 15:29 by author kullbom
Harry Pierson (“DevHawk”) har börjat på en ovanligt lättillgänglig serie om monader:I övrigt skrivs det numera väldigt mycket intressant om F# runt om i världen. “Planet F#” samlar det mesta men saknar speciellt Chris Smith's completely unique view.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


BitC - LISP-syntax under ML-semantik?

clock juli 28, 2008 10:15 by author kullbom

En gammal kollega sa en gång att hans dröm var ett språk som kombinerade LISP-syntax (S-expressions) med semantiken från ML och sedan dess har jag vuxit in i att till stor del dela den drömmen.

Sedan tidigare har jag känt till två “projekt” som relaterar till nämnda dröm: Qi och Sexplib för Camlp4.

Idag blev jag informerad om att Jonathan Shapiro, Swaroop Sridhar och Scott Doerrie från Johns Hopkins University håller på med The BitC Programming Language (Specification: HTML eller PDF) som delar nämnda egenskaper.

“It seeks to combine the flexibility, safety, and richness of Standard ML or Haskell with the low-level expressiveness of C.” (... och har syntax i form av s-expressions)
BitC är relaterat till The Coyotos Secure Operating System men kompilerar till vanlig C-kod. Vidare så skrivs det på BitC-sidan att “25 March 2008: Work begins on LLVM back end.” vilket ger mig ett ypperligt tillfälle att uppmärksamma just The LLVM Compiler Infrastructure Project (LLVM = Low Level Virtual Machine) och The High Level Virtual Machine (HLVM). (Jag passar på att länka till Parrot Virtual Machine när jag nu ändå är igång...)

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Visual Studio Lab

clock juli 28, 2008 00:05 by author kullbom

Hyperlänkad version av projektbeskrivningen får räcka:

Visual Studio Lab (VSLab) exploits the power of F# and its interactive top level to provide an interactive environment similar to MatLab and Mathematica, in which you can easily create Add-ins and interact dynamically with them inside Visual Studio. Moreover, since F# is a compiled language, the final code can be compiled as a standalone application. Goal of the project is to provide the basic infrastructure to turn Visual Studio in VSLab, and a number of addins (called viewlets) used to show data and support development of scientific based applications.

Lite svårbegriplig slutkläm (?) men man kan ju inte annat än bli glad…

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Mono, Cocoa och MacOSX

clock juli 27, 2008 18:04 by author kullbom

.Net under Mono blir sakta men säkert ett vettigt alternativ för oss som envisas med att vilja utveckla för MacOSX.

Efter att projektet ObjCSharp stått och stampat under en längre tid tog Laurent Etiemble tag i situationen och skapade Monobjc:

The Monobjc bridge provides the necessary tools to develop and run .NET applications (written in C#, VB.NET, etc.) that interact with Objective-C frameworks and libraries under Mac OS X. Existing Objective-C classes can be used in .NET code in an almost transparent manner.

(Utifrån Laurents exempel lyckades jag efter vissa justeringar av Monobjc kompilera en körbar test-applikation skriven i F#.)

Trots att Monobjc fortfarande verkar relativt okänt i mono-världen släpper sedan Julius Eckert en mindre men fullt användbar IDE för Monobjc kallad MonoMate. MonoMate är open source (C#) och koden hittar du här: http://code.google.com/p/monomate/

För den som lärt sig uppskatta .Net Reflector finns TypeRefleX som alternativ under MacOSX...

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Sommarläsning

clock juli 27, 2008 10:15 by author kullbom

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Monader i F#

clock juli 27, 2008 08:56 by author kullbom

I slutet av Brian McNamaras artikelserie om katamorfismer (del sju och åtta) formulerar han continuations som en monad med hjälp av F#’s “computation expressions”. Computation expressions är en sorts “monadsyntax” (i stil med Haskells) på något som i F# kallas för “builder objects” eller “monadic builders”.

Builder objects i sin tur kan möjligen förstås som en form av generaliserad “LINQ-provider”. Genom att implementera de fyra funktionerna/metoderna Delay, Bind, Let och Return kan ett builder object representera monadiska strukturer.

Typsignaturerna för en “monadic builder” (för en monadisk typ M):

type M-Builder with
    member Bind   : M<‘a> * (‘a -> M<‘b>) -> M<‘b>
    member Return : ‘a -> M<‘a>
    member Delay  : (unit -> M<‘a>) -> M<‘a>
    member Let    : ‘a * (‘a -> M<‘b>) -> M<‘b>

Några artiklar i ämnet:

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Catamorphisms

clock juli 24, 2008 11:06 by author kullbom
Kategoriteori ligger uppenbarligen till grund för mycket spännande inom programmering. Jag kan tyvärr i det närmaste ingenting i ämnet men har förstått att den inte bara är monader som härstammar därifrån.Den här gången är det begreppet katamorfism som fångat min uppmärksamhet.Som vi lisp-programmerare vet kan de flesta list-operationer formuleras i termer av reduce (i C# heter det Aggregate och i haskell foldr) och katamorfism är någon sorts ytterligare generalisering av detta.Erik Meijer har med ett par kollegor skrivit “Functional Programming with Bananas, Lenses, Envelopes and Barbed Wire” som tar upp ämnet ur ett aningen teoretiskt programmeringsperspektiv och Brian McNamara har en artikelserie på sin blog Inside F#:Spännande läsning...

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Monader i bilder

clock juli 20, 2008 22:58 by author kullbom
Azad Bolour har skrivit en artikel om monader med ett lite speciellt angreppssätt: “Monads through Pictures”

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Liskov och annan spännande läsning

clock juli 20, 2008 17:11 by author kullbom

De flesta har hört talas om Barbara Liskovs “Liskov substitution principle” som en del av ett gäng “Agile Design Principles”. För den som vill sätta sig in i vad det handlar om är naturligtvis källan en bra början: “Behavioral Subtyping Using Invariants and Constraints”

För att inte tappa bort spännande texter som denna har jag börjat samla ihop länkar till olika “papers” här.

Edit: Denna diskussion i ämnet är lite kul

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Lovande SVN-klient för Mac

clock juni 4, 2008 23:52 by author kullbom

Versions är en ny subversion-klient för MacOSX som just släppts i en publik beta. Det är mig veterligen den enda som är gjord just för MacOS. Väl värd att prova.

Edit: Beta2 är nu släppt och sedan dess har jag inte haft några problem alls. Allt är snyggt och snabbt.

Edit2: Beta3 är nu släppt. Låter som att skarp version kan väntas i Augusti.

Bli den första att värdera denna post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5