Hoomla

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

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