Gå til innhold

ProgrammeringsBaren! Småprat, om det du elsker!


Anbefalte innlegg

Videoannonse
Annonse

Å steppe igjennom et program via debugger vil nok bli en interessant affære.

Spesielt hvis det er LISP du skal debugge ^^

 

Åh, hvorfor det? SBCL lagrer f.eks. linje og kolonne posisjon for hvert enkelt atom/form -- og holder denne metainfoen hele tiden oppdatert ettersom en gjør endringer i koden.

 

Selv uavhengig av verktøy (men Slime er supert) er Lisp av natur enkelt å debugge.

 

edit:

Jeg orker sjeldent å følge disse trådene noe særlig nøye -- så mulig jeg ser dette i sammenheng av noe annet, men variabler blir selvfølgelig ikke implisitt deklarert i Lisp.

Endret av worseisworser
Lenke til kommentar

Å steppe igjennom et program via debugger vil nok bli en interessant affære.

Spesielt hvis det er LISP du skal debugge ^^

Selv uavhengig av verktøy (men Slime er supert) er Lisp av natur enkelt å debugge.

Jeg er ikke noen LISP programmerer, men jeg får litt kreft i øynene av parantesene og operator prefiks notasjon, samt de generelt spartanske syntaksreglene. Dog det er sikkert en vanesak.

Lenke til kommentar
Gjest Slettet+9871234

@worseisworser

 

Jeg har aldri lært meg LISP, men ser at du skriver mye om språket og så vidt jeg vet kjenner du også C / C++.

 

Kan du liste opp 5 (helst 10) grunner til at jeg skulle se på LISP. Spesielt, brukes det som Java til webutvikling? Hvis ja,

  1. Hvor utbredt er det?
  2. Hvor stort bruker samfunn har det?
  3. Hvem kan eventuelt hoste LISP drevne siter?

Endret av Slettet+9871234
Lenke til kommentar

Jeg har aldri lært meg LISP, men ser at du skriver mye om språket og så vidt jeg vet kjenner du også C / C++.

 

Kan du liste opp 5 (helst 10) grunner til at jeg skulle se på LISP. Spesielt, brukes det som Java til webutvikling? Hvis ja,

  1. Hvor utbredt er det?
Ikke spesielt.
 

Hvor stort bruker samfunn har det?
Aner ikke; nok. Sjekk og tell på #clojure og #lisp på IRC selv (freenode), og kanskje i ennå større grad; sjekk forum (google groups o.l.).
 
edit: Eller m.t.p. det at Clojure er veldig godt integrert med JVMen og/eller kan kommunisere med (eller rett og slett "snakke") Java kan en godt ta med miljøene og bibliotekene her også i "regnestykket". Da blir jo selvfølgelig ting kjempesvært.
 

Hvem kan eventuelt hoste LISP drevne siter?

 

SBCL og Clojure fungerer bra på Xen, og noe annet enn noe type VPS (eller dedikert server) er ikke interessant i utgangspunktet.

Endret av worseisworser
Lenke til kommentar

Å steppe igjennom et program via debugger vil nok bli en interessant affære.

Spesielt hvis det er LISP du skal debugge ^^

Selv uavhengig av verktøy (men Slime er supert) er Lisp av natur enkelt å debugge.

Jeg er ikke noen LISP programmerer, men jeg får litt kreft i øynene av parantesene og operator prefiks notasjon, samt de generelt spartanske syntaksreglene. Dog det er sikkert en vanesak.

 

..men hvorfor gjøre det så åpenlyst i din noen ganger overfladiske-ikke-basert-på-egen-erfaring type kritikk at du ikke kan Lisp? Tenk på at det også fungerer andre veien. D.v.s., jeg har bakgrunn fra Java, C, C++ og PHP og synes, etter å ha gått mot Lisp (som forøvrig alle språk går mot samme hva du synes eller tror om akkurat dette; bare se på C# og Linq o.l.....) -- at disse språkene er ganske så forferdelige å jobbe med i dag. Jeg gidder bare ikke å påpeke det hele j tiden ... :>

 

Tilsvarende, jeg kan ikke Haskell, men har masse respekt for Haskell basert på det jeg hører og forstår, men også og kanskje ennå viktigere ovenfor det jeg ikke forstår. Jeg føler ingen frykt!

Endret av worseisworser
Lenke til kommentar

..men hvorfor gjøre det så åpenlyst i din noen ganger overfladiske-ikke-basert-på-egen-erfaring type kritikk at du ikke kan Lisp? Tenk på at det også fungerer andre veien. D.v.s., jeg har bakgrunn fra Java, C, C++ og PHP og synes, etter å ha gått mot Lisp (som forøvrig alle språk går mot samme hva du synes eller tror om akkurat dette; bare se på C# og Linq o.l.....) -- at disse språkene er ganske så forferdelige å jobbe med i dag. Jeg gidder bare ikke å påpeke det hele j tiden ... :>

 

Tilsvarende, jeg kan ikke Haskell, men har masse respekt for det basert på det jeg hører og forstår. Jeg føler ingen frykt ......

Litt hårsår eller?

 

Jeg har da respekt for LISP på noen ting, det er for eksempel ekstremt regulært, og kan enkelt utvides. Stilig at hele dokumentet uttrykkes som lister. Siden det også bruker prefiks notasjon er det heller ikke noen forskjell på operatorer og andre funksjoner.

 

Det ser derimot ut som noen tok Dansk og banket det med en veldig stygg grevlig.

Lenke til kommentar

..men hvorfor gjøre det så åpenlyst i din noen ganger overfladiske-ikke-basert-på-egen-erfaring type kritikk at du ikke kan Lisp? Tenk på at det også fungerer andre veien. D.v.s., jeg har bakgrunn fra Java, C, C++ og PHP og synes, etter å ha gått mot Lisp (som forøvrig alle språk går mot samme hva du synes eller tror om akkurat dette; bare se på C# og Linq o.l.....) -- at disse språkene er ganske så forferdelige å jobbe med i dag. Jeg gidder bare ikke å påpeke det hele j tiden ... :>

 

Tilsvarende, jeg kan ikke Haskell, men har masse respekt for det basert på det jeg hører og forstår. Jeg føler ingen frykt ......

Litt hårsår eller?

 

Jeg har da respekt for LISP på noen ting, det er for eksempel ekstremt regulært, og kan enkelt utvides. Stilig at hele dokumentet uttrykkes som lister. Siden det også bruker prefiks notasjon er det heller ikke noen forskjell på operatorer og andre funksjoner.

 

Det ser derimot ut som noen tok Dansk og banket det med en veldig stygg grevlig.

 

Det siste du sier er ganske i konflikt med det første du nevner.

 

Jeg synes forøvrig at språkene jeg nevnte over (de jeg kan) også ser jævlige ut:

 

(function(){ 
 if(dynamic_p) 
   return(dynamic_subdomain); 
 else 
   return(""); 
})();

 

..hva f. liksom (du klager på paranteser eller støy generelt?), kontra:

 

(if dynamic-p
   dynamic-subdomain
   "")

 

Jeg vet ikke om dette er et veldig godt (generelt) eksempel, men det er i hvert fall et-eller-annet, og jeg hadde det foran meg just nuh.

Endret av worseisworser
Lenke til kommentar

Det siste du sier er ganske i konflikt med det første du nevner.

 

Jeg synes forøvrig at språkene jeg nevnte over (de jeg kan) også ser jævlige ut:

 

(function(){ 
 if(dynamic_p) 
   return(dynamic_subdomain); 
 else 
   return(""); 
})();

 

..hva f. liksom (du klager på paranteser eller støy generelt?), kontra:

 

(if dynamic-p
   dynamic-subdomain
   "")

 

Jeg vet ikke om dette er et veldig godt eksempel, men det er i hvert fall et-eller-annet, og jeg hadde det foran meg just nuh.

 

dynamic_p ? dynamic_subdomain : ""

skal være tilsvarende det du skrev over uten bruk av lambdauttrykk.

Skal en ha det som lambdauttrykk (regner med at det er javakode du skrev, men jeg kan ikke lambda i java, som vel er en ganske ny sak) så kan en skrive det slik i C#:

() => dynamic_p ? dynamic_subdomain : ""

Skal du utføre lambdauttrykket (som er fullstendig bortkastet, ettersom du kan droppe hele lambdaen da) så må du skrive slik:

(() => dynamic_p ? dynamic_subdomain : "")()

 

En ting som derimot er veldig stygt i alle C språk er switch:

switch(value)
{
 case etelleranner:
   GjørNoe();
   break;
 case noeannet:
   GjøreNoeAnnet();
   break;
 default:
   AlleAndreTilfeller();
}

Isj!

Lenke til kommentar

Det siste du sier er ganske i konflikt med det første du nevner.

 

Jeg synes forøvrig at språkene jeg nevnte over (de jeg kan) også ser jævlige ut:

 

(function(){ 
 if(dynamic_p) 
   return(dynamic_subdomain); 
 else 
   return(""); 
})();

 

..hva f. liksom (du klager på paranteser eller støy generelt?), kontra:

 

(if dynamic-p
   dynamic-subdomain
   "")

 

Jeg vet ikke om dette er et veldig godt eksempel, men det er i hvert fall et-eller-annet, og jeg hadde det foran meg just nuh.

 

dynamic_p ? dynamic_subdomain : ""

skal være tilsvarende det du skrev over uten bruk av lambdauttrykk.

Skal en ha det som lambdauttrykk (regner med at det er javakode du skrev, men jeg kan ikke lambda i java, som vel er en ganske ny sak) så kan en skrive det slik i C#:

() => dynamic_p ? dynamic_subdomain : ""

Skal du utføre lambdauttrykket (som er fullstendig bortkastet, ettersom du kan droppe hele lambdaen da) så må du skrive slik:

(() => dynamic_p ? dynamic_subdomain : "")()

 

En ting som derimot er veldig stygt i alle C språk er switch:

switch(value)
{
 case etelleranner:
   GjørNoe();
   break;
 case noeannet:
   GjøreNoeAnnet();
   break;
 default:
   AlleAndreTilfeller();
}

Isj!

 

Jepp, ternary glemte jeg (dette var JavaScript btw.), men poenget var uansett ikke dette spesifikt; lignende ting å irritere seg over går igjen flere steder -- hvor "omveier" da altså ikke eksisterer.

 

user> (defn switch-test [x]
       (println (case x
                  42 "the ultimate answer!"
                  0 "zero!"
                  "something else...")))
#'user/switch-test

user> (switch-test 42)
the ultimate answer!
nil

user> (switch-test 0)
zero!
nil

user> (switch-test "huh")
something else...
nil

user> 

 

..basert på samme tema (returverdier; alt er uttrykk) dette da, men det finnes masse mer; dette var bare noe (ett irritasjonsmoment) jeg tilfeldigvis hadde foran meg akkurat nå ...

Endret av worseisworser
Lenke til kommentar

Pekere er en av styrkene til C. I stedet for å sende et stort objekt via funksjonskallet sendes en referanse

Objektorienterte språk flest sender jo alltid en peker til objektene i stedet for verdien. Styrken til C er at man kan jobbe på og manipulere referansen direkte, noe man ikke har tilgang til i språk av høyere nivå. Dette knytter C nærmere Von Neumann-arkitekturen.

 

"Debugging a program running on a $100M piece of hardware that is 100 million miles away is an interesting experience. Having a read-eval-print loop running on the spacecraft proved invaluable in finding and fixing the problem."

Er der en forskjell om programmet er 1 meter borte, så lenge det er mulig å kommunisere med programmet?

Forskjellen er at man ikke har noen mulighet for å fysisk nå noe som er 100 millioner miles borte, eller muligheten for å reinstallere/boote noe som er på et slikt oppdrag i solsystemet. Dermed ble det plutselig essensielt at man hadde et system som kunne hot-patches - sånn som Lisp (og i sendere tid Erlang) er kjent for. Dette KREVER en grad av dynamikk som ikke er lett tilgjengelig i de språkene vi kaller statiske (overgangen er som alltid flytende).

Lenke til kommentar
Gjest Slettet+9871234

En ting som derimot er veldig stygt i alle C språk er switch:

Hva er stygt med switch? Det er da svært oversiktlig å greit i stedet for å nøste ifs og elses? Gjør det enkelt, så enkelt som mulig, men ikke enklere.

 

 

Forskjellen er at man ikke har noen mulighet for å fysisk nå noe som er 100 millioner miles borte, eller muligheten for å reinstallere/boote noe som er på et slikt oppdrag i solsystemet.

Det var jeg da fullstendig klar over da jeg skrev mitt svar. Ceteris Paribus vil si under ellers like forhold bortsett fra avstanden.

 

Dermed ble det plutselig essensielt at man hadde et system som kunne hot-patches - sånn som Lisp (og i sendere tid Erlang) er kjent for. Dette KREVER en grad av dynamikk som ikke er lett tilgjengelig i de språkene vi kaller statiske (overgangen er som alltid flytende).

Så du mener at det er nødvendig å bruke LISP eller Erlang til dette?

Endret av Slettet+9871234
Lenke til kommentar

Kan du liste opp 5 (helst 10) grunner til at jeg skulle se på LISP.

Her er min personlige liste

  1. Du lærer en ny måte å tenke på
  2. Mange hevder de blir langt mer produktiv i Lisp enn i andre språk (boilerplate faller bort)
  3. Språket støtter mange ulike paradigmer, noe som gjør det veldig anvendelig
  4. Lisp gjør det naturlig å lage DSL'er (domenespesifike språk), med de fordelene det medfører

Ellers er jeg enig i det som ble sagt her, at jeg også etterhvert som jeg har jobbet med Lisp/Clojure synes det er fælt å gå tilbake til språk med "mye syntaks".

 

Du har kanskje sette posten min som heter er lisp bedre enn andre programmeringsspråk? Et par av sitatene derfra som svarer på spørsmålet ditt:

 

“Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.”

 

Lisp has jokingly been called “the most intelligent way to misuse a computer”. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts.

 

Når alt dette er sagt så må jeg innrømme at det er en liten stund siden jeg har rørt Lisp nå. Ser stadig på nye språk (3 stykk bare siste uken), og alle gjør ulike valg i forhold til hva som skal være enkelt, og hva som ikke skal være det. Det finnes mye elegant der ute, men nesten over alt ser jeg igjen arven fra Lisp!

  • Liker 1
Lenke til kommentar

Dermed ble det plutselig essensielt at man hadde et system som kunne hot-patches - sånn som Lisp (og i sendere tid Erlang) er kjent for. Dette KREVER en grad av dynamikk som ikke er lett tilgjengelig i de språkene vi kaller statiske (overgangen er som alltid flytende).

Så du mener at det er nødvendig å bruke LISP eller Erlang til dette?

Nei, jeg sier det ikke er lett tilgjengelig! Man kan implementere Lisp i C, så følgelig har man denne mulkigheten tilgjengelig om man planlegger for det. Lisp og i enda større grad Erlang er bygget for det fra grunnen og opp.

Lenke til kommentar

Skal en ha det som lambdauttrykk (regner med at det er javakode du skrev, men jeg kan ikke lambda i java, som vel er en ganske ny sak) så kan en skrive det slik i C#:

() => dynamic_p ? dynamic_subdomain : ""

 

Lambdaer (og kanskje closures) var planlagt for Java 7, men kommer ikke før Java 8, som er ventet i Oktober 2012.[1] Og syntaksen? Jo, etter nøye overveiing i de fire årene som har gått siden C# implementerte lambdaer i 3.0 …

 

(trommevirvel)

 

… har man omsider bestemt seg for adoptere syntaksen til C#.[2] Fremskritt!

Endret av epsil
Lenke til kommentar

Skal en ha det som lambdauttrykk (regner med at det er javakode du skrev, men jeg kan ikke lambda i java, som vel er en ganske ny sak) så kan en skrive det slik i C#:

() => dynamic_p ? dynamic_subdomain : ""

Lambdaer (og kanskje closures) var planlagt for Java 7, men kommer ikke før Java 8, som er ventet i Oktober 2012.[1] Og syntaksen? Jo, etter nøye overveiing i de fire årene som har gått siden C# implementerte lambdaer i 3.0 …

 

(trommevirvel)

… har man omsider bestemt seg for adoptere syntaksen til C#.[2] Fremskritt!

 

En trenger ikke bruke Java for å dra nytte av det som egentlig er interessant med "Java"; JVMen. Twitter bruker f.eks. Scala og Clojure nå -- og her har en anonyme funksjoner og closures m.m..

 

..og..

http://engineering.twitter.com/2011/04/twitter-search-is-now-3x-faster_1656.html

Endret av worseisworser
Lenke til kommentar

Type erasure i JVM er litt synd dog. Liker at en i C# kan definere egne valuetypes, pluss at dersom du lager en List<int> så er det akkurat det du får. I Java så blir ArrayList<int> kompilert mer eller mindre internt til ArrayList som ikke er helt heldig fordi du ender opp med en hel masse unboxing instruksjoner som er fullstendig unødvendig dersom JVM ikke bedrev type erasure.

 

Angående switch så synes jeg egentlig heller at syntaksen burde vært mer slik:

switch(value)
{
 case(0)
   return "Nothing!";

 case(42)
   return "Life, the universe, and everything!";

 case(43, 44, 45, 46, 47)
 {
   print("To linjer med kode, og flere tilfeller faller under samme case");
   return "Arbitrary cases";
 }

 case(-1)
 {
   print("Noen ganger er det kjekt å kunne hoppe til en annen case"
   goto case(42); 
 }
 default
   return "Undefined";
}

 

Altså litt mer regulær syntaks.

Kunne også vært kjekt at den kan oppføre seg slik også:

 

var value = switch(input)
{
 case(0)
   "Hello World!";
 default
   "Noe annet";
}

Lenke til kommentar

En trenger ikke bruke Java for å dra nytte av det som egentlig er interessant med "Java"; JVMen. Twitter bruker f.eks. Scala og Clojure nå -- og her har en anonyme funksjoner og closures m.m..

 

Sant nok! Jeg vil definitivt anbefale folk å se nærmere på Scala; det er mer eller mindre hva Java ville ha vært dersom det fortsatt var et banebrytende språk og ikke en sendrektig komité som bruker four more years på å velge riktig lambdasyntaks. :)

 

Nå dukker det så smått opp noen Scala-jobber i det ganske land, bl.a. har Bekk Consulting faggrupper som driver med Scala og JVM.

Endret av epsil
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...