Hoomla

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

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


foreach och typsäkerhet

clock maj 26, 2008 23:55 by author kullbom

Edit: Då det ursprungliga inlägget i sak var fel ersätts det härmed med en länk till en korrigerad version.

Just nu värderat 4.0 av 1 människor

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


FreeTechBooks.com

clock november 19, 2007 01:32 by author kullbom
Under lite oskyldigt surfande under söndagseftermiddagen stötte jag på FreeTechBooks.com - en mycket fin kategoriserad samling digitala böcker om programmering och matematik. Den är absolut värd inte bara ett besök!Några exempel på kategorier - så du förstår att du måste ta dig dit:

Bli den första att värdera denna post

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


ASP.Net MVC

clock november 18, 2007 19:41 by author kullbom
Scott Guthrie skriver på sin ScottGu's Blog att ett MVC-ramverk för ASP.Net är under utveckling och att detta skall vara redo för release under slutet av året (2007).Nu har han börjat på en längre artikelserie i ämnet:Några mindre invändningar till trots ser det hela mycket lovande ut och jag hoppas få tillfälle att bekanta mig närmare med ramverket snart.Edit: Även Brad Abrams (RSS Feed with the new ASP.NET MVC Framework) har skrivit lite på ämnet...

Bli den första att värdera denna post

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


Tre små länkar.

clock oktober 9, 2007 13:04 by author kullbom

Bli den första att värdera denna post

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


Två spännande OS

clock september 15, 2007 14:50 by author kullbom

Beskrivningarna stulna direkt från resp site:

Movitz - The Movitz system aspires to be an implementation of ANSI Common Lisp that targets the ubiquitous x86 PC architecture "on the metal". That is, running without any operating system or other form of software environment. Movitz is a development platform for operating system kernels, embedded, and single-purpose applications. There can potentially be several completely different operating systems built using Movitz.

FunOS - FunOS is a mostly-functional (in the programming language sense) operating system currently in design. Or alternately, it is an operating system for which it is fun to do systems programming.

(När jag ändå är igång passar jag på att länka till Christopher B. Browne's sida om Lisp-based OSes)

Bli den första att värdera denna post

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


C over Lambda = Nu

clock september 15, 2007 14:23 by author kullbom
Då jag, som de flesta andra människor, ofta tänker på och drömmer om det perfekta språket är jag ständigt på jakt efter olika infallsvinklar på hur ett sådant skulle kunna se ut.Med några få undantag i tiden har jag alltid varit övertygad om att s-expressions - eller någon liknande generell struktur - är en i det närmaste förutsättning vad gäller syntax och därför är det alltid en glädje att stöta på andra som delar den synen.Den här gången är det Tim Burks projekt Nu som glatt mig. Nu är en form av Objective C med SExp(/Lisp)-syntax och herr Burks verkar därtill få viss inspiration från Ruby.Det finns ännu ingen kod att studera utan man får tills vidare nöja sig med följande blogginlägg:och lite genererad dokumentation.

Bli den första att värdera denna post

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