|
| rekursion i Java Fra : Morg |
Dato : 21-02-02 15:51 |
|
Hej NG
Er der nogen der ved hvordan rekursion fungerer i Java "bag facaden".
Grunden til jeg spørger er, at hvis man skriver det sammen program rekursivt
i henhodsvis Java og C (mit eksempel var beregning af Fibonaccitalrækken),
og så kompilerer det under Linux, så er Java faktisk hurtigere end C,
hvilket jo er lidt mærkeligt (da det jo bl.a. kører i en VM). Hvis man
derimod skriver det iterativt vinder C. Nogle der ved hvorfor Java åbenbart
er så god til rekursion?
Mvh. Morgiana
______________________________________
Ooo ... What's this? A bastard sword! Why bastard, yous think? No parent?
| |
Svenne Krap (21-02-2002)
| Kommentar Fra : Svenne Krap |
Dato : 21-02-02 16:13 |
|
On Thu, 21 Feb 2002 15:50:57 +0100, "Morg" <not4real@hotmail.com>
wrote:
>Er der nogen der ved hvordan rekursion fungerer i Java "bag facaden".
>Grunden til jeg spørger er, at hvis man skriver det sammen program rekursivt
>i henhodsvis Java og C (mit eksempel var beregning af Fibonaccitalrækken),
>og så kompilerer det under Linux, så er Java faktisk hurtigere end C,
>hvilket jo er lidt mærkeligt (da det jo bl.a. kører i en VM). Hvis man
>derimod skriver det iterativt vinder C. Nogle der ved hvorfor Java åbenbart
>er så god til rekursion?
Kan det tænkes, at der er forskel på din implementering, fordi du
måske ikke er så hård i C ?
Det er ikke ment som kritik, men det er fandens svært at skrive
optimal kode i to sprog og derpå benchmarke sprogene mod hinanden.
I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
løser opgaven bedst. Hverken Java, C eller C++ er svaret på alle
spørgsmål.
Svenne
--
Job-offerings with more than a googolplex* USD a year are instantly accepted.
* = http://www.fpx.de/fp/Fun/Googolplex/
| |
Morten (21-02-2002)
| Kommentar Fra : Morten |
Dato : 21-02-02 18:24 |
|
Svenne Krap wrote:
>
> I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
> løser opgaven bedst. Hverken Java, C eller C++ er svaret på alle
> spørgsmål.
Hørt :)
| |
Thorbjørn Ravn Ander~ (21-02-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 21-02-02 19:33 |
|
Svenne Krap <usenet@krap.dk> writes:
> løser opgaven bedst. Hverken Java, C eller C++ er svaret på alle
> spørgsmål.
InterCAL eller BrainF*CK!
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk
| |
Svenne Krap (21-02-2002)
| Kommentar Fra : Svenne Krap |
Dato : 21-02-02 20:19 |
|
On 21 Feb 2002 19:33:24 +0100, thunderbear@bigfoot.com (Thorbjørn Ravn
Andersen) wrote:
> BrainF*CK!
Redmond har bevist mange gange, at dette er et glimragende sprog at
skrive os'er i.. vi nævner i flæng : W9x, WNT, W2K/XP :)
Svenne
--
Job-offerings with more than a googolplex* USD a year are instantly accepted.
* = http://www.fpx.de/fp/Fun/Googolplex/
| |
Thorbjørn Ravn Ander~ (21-02-2002)
| Kommentar Fra : Thorbjørn Ravn Ander~ |
Dato : 21-02-02 20:27 |
|
Svenne Krap <usenet@krap.dk> writes:
> > BrainF*CK!
>
> Redmond har bevist mange gange, at dette er et glimragende sprog at
> skrive os'er i.. vi nævner i flæng : W9x, WNT, W2K/XP :)
Har du prøvet?
Det er en ... anderledes oplevelse.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk
| |
Mogens Hansen (24-02-2002)
| Kommentar Fra : Mogens Hansen |
Dato : 24-02-02 17:57 |
|
"Svenne Krap" <usenet@krap.dk> wrote in message
news:tf3a7us4u5m4b747kn3up19ak6pvqmoja2@4ax.com...
>
> I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
> løser opgaven bedst.
Performance indgår som en relevant parameter for hvor godt et sprog løser en
given opgave, så det er rimeligt at foretage målinger og sammenligninger,
hvis man skal foretage et velunderbygget valg mellem flere sprog.
Venlig hilsen
Mogens Hansen
| |
Martin Moller Peders~ (25-02-2002)
| Kommentar Fra : Martin Moller Peders~ |
Dato : 25-02-02 00:15 |
|
In <a5b5v5$167$1@news.cybercity.dk> "Mogens Hansen" <mogens_h@dk-online.dk> writes:
>"Svenne Krap" <usenet@krap.dk> wrote in message
>news:tf3a7us4u5m4b747kn3up19ak6pvqmoja2@4ax.com...
>>
>> I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
>> løser opgaven bedst.
>Performance indgår som en relevant parameter for hvor godt et sprog løser en
>given opgave, så det er rimeligt at foretage målinger og sammenligninger,
>hvis man skal foretage et velunderbygget valg mellem flere sprog.
Hastigheden er lige gyldig i mange sammenhaenge. F.x. er det ligegyldigt at lommeregner i
windows kan udregne 2+2 paa 0.01sek eller 0.015 sek.
/Martin
| |
Mogens Hansen (25-02-2002)
| Kommentar Fra : Mogens Hansen |
Dato : 25-02-02 21:16 |
|
"Martin Moller Pedersen" <tusk@daimi.au.dk> wrote in message
news:a5bs4q$l6a$1@news.net.uni-c.dk...
> In <a5b5v5$167$1@news.cybercity.dk> "Mogens Hansen"
<mogens_h@dk-online.dk> writes:
>
>
> >"Svenne Krap" <usenet@krap.dk> wrote in message
> >news:tf3a7us4u5m4b747kn3up19ak6pvqmoja2@4ax.com...
>
> >>
> >> I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
> >> løser opgaven bedst.
>
> >Performance indgår som en relevant parameter for hvor godt et sprog løser
en
> >given opgave, så det er rimeligt at foretage målinger og sammenligninger,
> >hvis man skal foretage et velunderbygget valg mellem flere sprog.
>
> Hastigheden er lige gyldig i mange sammenhaenge. F.x. er det ligegyldigt
at lommeregner i
> windows kan udregne 2+2 paa 0.01sek eller 0.015 sek.
>
Hvad har det at gøre med hvorvidt det er en tosset ide at lave
sammenlignende bechmarks mellem forskellige sprog ?
Så simple problemer som du nævner er uinteressante.
Interessante designproblemer befinder sig i spændingsfeltet mellem
modstridende kræfter, og det er kompromisset der afbalancerer disse kræfter
der er interessant.
Performance er een af de kræfter der påvirker designet.
Fremlæggelse af eet design eksempel ud fra eet aspekt uden modstridende
kræfter eller indbyggede problemer bringer formodentligt ikke mange videre
og påviser intet.
Venlig hilsen
Mogens Hansen
| |
Svenne Krap (25-02-2002)
| Kommentar Fra : Svenne Krap |
Dato : 25-02-02 00:30 |
|
On Sun, 24 Feb 2002 17:56:56 +0100, "Mogens Hansen"
<mogens_h@dk-online.dk> wrote:
>Performance indgår som en relevant parameter for hvor godt et sprog løser en
>given opgave, så det er rimeligt at foretage målinger og sammenligninger,
>hvis man skal foretage et velunderbygget valg mellem flere sprog.
Jeg er enig i at performance er vigtig. Nu vil et valg i mellem flere
sprog tit også medføre et valg i mellem flere løsningsmetodikker.
Dvs. programmerer man sprog X er løsning A den hurtigste/bedste, men
bruger man sprog Y er det løsning B, der bør satses på.
Mit postulat er, at generisk performancemåling mellem to sprog er
umuligt at foretage troværdigt. I bedste fald er resultatet bare
misvisende og ligegyldigt (og kan kun bruges til flamewars).
Der vil være situationer, hvor man ved, at sprog X vil klare sig
dårligere under alle omstændigheder (fx. hvis man sammenligner et
scripting sprog med et compiled af slagsen), men for nærmest
jævnbyrdige sprog vil ens løsningsmodel udgøre en uoverkommelig mængde
støj.
Svenne
--
Job-offerings with more than a googolplex* USD a year are instantly accepted.
* = http://www.fpx.de/fp/Fun/Googolplex/
| |
Mogens Hansen (25-02-2002)
| Kommentar Fra : Mogens Hansen |
Dato : 25-02-02 21:03 |
|
"Svenne Krap" <usenet@krap.dk> wrote in message
news:mjti7uguccge738hk0raoa35rbvb8udnir@4ax.com...
> On Sun, 24 Feb 2002 17:56:56 +0100, "Mogens Hansen"
> <mogens_h@dk-online.dk> wrote:
>
> >Performance indgår som en relevant parameter for hvor godt et sprog løser
en
> >given opgave, så det er rimeligt at foretage målinger og sammenligninger,
> >hvis man skal foretage et velunderbygget valg mellem flere sprog.
>
> Jeg er enig i at performance er vigtig. Nu vil et valg i mellem flere
> sprog tit også medføre et valg i mellem flere løsningsmetodikker.
>
> Dvs. programmerer man sprog X er løsning A den hurtigste/bedste, men
> bruger man sprog Y er det løsning B, der bør satses på.
>
Hvis man vil lave en sammenligning, kan man jo gøre som i nedenstående link,
hvor man har bedt et udvalg af programmører med forskellig baggrund lave en
løsning som er umiddelbar for dem i det pågældende sprog.
> Mit postulat er, at generisk performancemåling mellem to sprog er
> umuligt at foretage troværdigt. I bedste fald er resultatet bare
> misvisende og ligegyldigt (og kan kun bruges til flamewars).
>
Naturligvis kan man ikke blot generelt sige at sprog X er 7 gange hurtigere
end sprog Y.
Men det betyder ikke generelt at man ikke kan foretage troværdige målinger
af forskellige aspekter af performance: run-time, memory forbrug, programmør
produktivitet etc.
Hvis man laver målinger, og åbent fortæller hvad og hvordan man har målt kan
det være nyttigt.
Se f.eks.
http://wwwipd.ira.uka.de/~prechelt/Biblio/jccpprt_computer2000.pdf
for et glimrende eksempel.
Man kan naturligvis angribe den for forskellige detaljer, men det er lagt
åbent frem (bortset fra source-koden til de 80 løsninger ikke er
offentligtgjorde af hensyn til ophavsretten), så man kan lave vurderinger.
Man kan naturligvis ikke ekstrapolere resultaterne til at være dækkende for
alle problemer.
Venlig hilsen
Mogens Hansen
| |
Dennis Thrysøe (25-02-2002)
| Kommentar Fra : Dennis Thrysøe |
Dato : 25-02-02 08:30 |
|
Mogens Hansen wrote:
> "Svenne Krap" <usenet@krap.dk> wrote in message
> news:tf3a7us4u5m4b747kn3up19ak6pvqmoja2@4ax.com...
>
>
>>I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
>>løser opgaven bedst.
>>
>
> Performance indgår som en relevant parameter for hvor godt et sprog løser en
> given opgave, så det er rimeligt at foretage målinger og sammenligninger,
> hvis man skal foretage et velunderbygget valg mellem flere sprog.
Det er jeg ikke enig i. Hvis du f.eks. sammenligner Java med c++, kan
det drejese sig om mange forskellige Java compilere, mange forskellige
virtual machines og mange foreksllige C++ compilere. Koden kan også
optimeres forskelligt.
Alt dette er ikke direkte sprog-afhængigt, men platform (compiler, vm,
os, osv.). F.eks. laver Delphi's Object Pascal compiler kode der ligner
noget der er lavet af Borland's C/C++ compiler (sjovt nok ;)
Så derfor vil en sammenligning af ovenstående sprog mindst omfatte 3
compilere * 3 JVM'er * 3 c++ compilere. Det vil næppe give noget klart
billede.
Desuden mener jeg grundlæggende ikke, at et sprog "løser en opgave".
Sproget bruges til at udtrykke løsningen på en opgave. Og her kan der
selvfølgelig være (u)hensigtsmæssigheder i de forskellige sprog. Men det
har ikke nødvendigvis noget med performance at gøre.
-dennis
| |
Mogens Hansen (25-02-2002)
| Kommentar Fra : Mogens Hansen |
Dato : 25-02-02 21:03 |
|
"Dennis Thrysøe" <dt@netnord.dk> wrote in message
news:3C79E80E.7020107@netnord.dk...
> Mogens Hansen wrote:
> > "Svenne Krap" <usenet@krap.dk> wrote in message
> > news:tf3a7us4u5m4b747kn3up19ak6pvqmoja2@4ax.com...
> >
> >
> >>I øvrigt en tosset ide at benche sprog. Skriv dog i det sprog, der
> >>løser opgaven bedst.
> >>
> >
> > Performance indgår som en relevant parameter for hvor godt et sprog
løser en
> > given opgave, så det er rimeligt at foretage målinger og
sammenligninger,
> > hvis man skal foretage et velunderbygget valg mellem flere sprog.
>
> Det er jeg ikke enig i. Hvis du f.eks. sammenligner Java med c++, kan
> det drejese sig om mange forskellige Java compilere, mange forskellige
> virtual machines og mange foreksllige C++ compilere. Koden kan også
> optimeres forskelligt.
>
Enig, der er flere parametre - f.eks. valgte algoritmer, forskellige
programmører og deres baggrund, tilgængelige biblioteker og deres kvalitet.
> Alt dette er ikke direkte sprog-afhængigt, men platform (compiler, vm,
> os, osv.). F.eks. laver Delphi's Object Pascal compiler kode der ligner
> noget der er lavet af Borland's C/C++ compiler (sjovt nok ;)
>
Igen - der er mange parametre der har indflydelse på performance, men
performance er ikke sprog-uafhængigt.
> Så derfor vil en sammenligning af ovenstående sprog mindst omfatte 3
> compilere * 3 JVM'er * 3 c++ compilere. Det vil næppe give noget klart
> billede.
>
Naturligvis gælder det om at vælge en platform og compiler compiler som er
mest hensigtsmæssig i forhold til ens opgave.
> Desuden mener jeg grundlæggende ikke, at et sprog "løser en opgave".
> Sproget bruges til at udtrykke løsningen på en opgave. Og her kan der
> selvfølgelig være (u)hensigtsmæssigheder i de forskellige sprog. Men det
> har ikke nødvendigvis noget med performance at gøre.
>
Nej, ikke nødvendigvis.
Men hvis performance kunne tænkes at spille en rolle for en problem og
løsning, er det rimeligt at foretage en saglig måling der kan indikere
forskellige mellem forskellige valg.
Venlig hilsen
Mogens Hansen
| |
Martin Moller Peders~ (21-02-2002)
| Kommentar Fra : Martin Moller Peders~ |
Dato : 21-02-02 17:27 |
|
In <1014302838.614034@heidi> "Morg" <not4real@hotmail.com> writes:
>Hej NG
>Er der nogen der ved hvordan rekursion fungerer i Java "bag facaden".
>Grunden til jeg spørger er, at hvis man skriver det sammen program rekursivt
>i henhodsvis Java og C (mit eksempel var beregning af Fibonaccitalrækken),
>og så kompilerer det under Linux, så er Java faktisk hurtigere end C,
>hvilket jo er lidt mærkeligt (da det jo bl.a. kører i en VM). Hvis man
>derimod skriver det iterativt vinder C. Nogle der ved hvorfor Java åbenbart
>er så god til rekursion?
Proev at poste din java og c kode her.
/Martin
| |
Jan Oksfeldt Jonasen (21-02-2002)
| Kommentar Fra : Jan Oksfeldt Jonasen |
Dato : 21-02-02 20:06 |
|
Morg <not4real@hotmail.com> wrote:
> Hej NG
>
> Er der nogen der ved hvordan rekursion fungerer i Java "bag facaden".
> Grunden til jeg spørger er, at hvis man skriver det sammen program rekursivt
> i henhodsvis Java og C (mit eksempel var beregning af Fibonaccitalrækken),
> og så kompilerer det under Linux, så er Java faktisk hurtigere end C,
> hvilket jo er lidt mærkeligt (da det jo bl.a. kører i en VM). Hvis man
> derimod skriver det iterativt vinder C. Nogle der ved hvorfor Java åbenbart
> er så god til rekursion?
>
< http://java.sun.com/docs/books/performance/1st_edition/html/JPAlgorithm
s.fm.html#11410> kan give et svar.
--
Mvh/re Jan Jonasen
jonasen (at) it (dot) dk
If I wanted culture, I'd eat yogurt.
| |
Morg (21-02-2002)
| Kommentar Fra : Morg |
Dato : 21-02-02 21:48 |
|
Mange tak for linket Jan!! Det giver lidt baggrund om rekursion m.m, men
faktisk forklarer det stadig ikke, sådan rent teknisk, hvordan Java
foretager et rekursionskald så effektivt. Men det var i det mindste
konstruktivt
Både min lærer og vores instruktor er ikke i stand til at forklare hvorfor
(de har dog selvfølgelig selv nogle ideer). En af dem er at Java selv holder
styr på variablerne hver gang der sker en invokation, og derfor ikke behøver
at lave et nyt framevindue. Lidt ligesom hvis man selv lavede et kæmpearray
til at have sin stak i. Det gør de også et sted i det link Jan postede. Men
er det den måde Java selv optimere en rekursion på, hvis man ikke selv gør
det?
Mht. min kodeerfaring i C og Java, så skal det da ikke være nogen hemmelig
at jeg ikke er en haj til specielt C, men jeg tror nu stadigvæk at vores
underviser på universitetet eller instruktoren er i stand til at at skrive
optimal kode for et så simpelt program som udregning af Fibonaccitalrækken,
selv om jeg ikke skulle være det!
"Jan Oksfeldt Jonasen" <jonasenREMOVE@THISit.dk> skrev i en meddelelse
news:1f7z10x.y7bh0f1yfycceN%jonasenREMOVE@THISit.dk...
> Morg <not4real@hotmail.com> wrote:
>
> > Hej NG
> >
> > Er der nogen der ved hvordan rekursion fungerer i Java "bag facaden".
> > Grunden til jeg spørger er, at hvis man skriver det sammen program
rekursivt
> > i henhodsvis Java og C (mit eksempel var beregning af
Fibonaccitalrækken),
> > og så kompilerer det under Linux, så er Java faktisk hurtigere end C,
> > hvilket jo er lidt mærkeligt (da det jo bl.a. kører i en VM). Hvis man
> > derimod skriver det iterativt vinder C. Nogle der ved hvorfor Java
åbenbart
> > er så god til rekursion?
> >
> < http://java.sun.com/docs/books/performance/1st_edition/html/JPAlgorithm
> s.fm.html#11410> kan give et svar.
>
> --
> Mvh/re Jan Jonasen
> jonasen (at) it (dot) dk
>
> If I wanted culture, I'd eat yogurt.
| |
Kristoffer Sørensen (26-02-2002)
| Kommentar Fra : Kristoffer Sørensen |
Dato : 26-02-02 11:59 |
|
Hej Morg
Hvis din Vm er korrekt bliver din kode optimeret til den maskine du er på
lige netop nu. Dvs. at kode der bliver kørt gentagne gange, bliver optimeret
/ gemt af compileren, og bliver derfor ikke fortolket igen. Når derfor din
rekursive metode først én gang er kørt igennem compileren og fortolket til
native kode, vil den samme native kode blive afvilket igen og igen. Det
viser sig så bare at dét native kode VM'en laver, er bedre end dit :)
Prøv evt. at kigge på hotspot. Sun har også nogle gode forklaringer på
hvordan optimeringerne foregår.
Dette betyder jo dog ikke at dårlig C kode ikke kan gøre udfaldet, men Java
ér hurtigere end C til nogle ting, hvis VM'en er korrekt.
Med venlig hilsen,
Kristoffer Sørensen
www.kiloo.dk
"Morg" <not4real@hotmail.com> wrote in message
news:1014324253.146206@heidi...
> Mange tak for linket Jan!! Det giver lidt baggrund om rekursion m.m, men
> faktisk forklarer det stadig ikke, sådan rent teknisk, hvordan Java
> foretager et rekursionskald så effektivt. Men det var i det mindste
> konstruktivt
>
> Både min lærer og vores instruktor er ikke i stand til at forklare hvorfor
> (de har dog selvfølgelig selv nogle ideer). En af dem er at Java selv
holder
> styr på variablerne hver gang der sker en invokation, og derfor ikke
behøver
> at lave et nyt framevindue. Lidt ligesom hvis man selv lavede et
kæmpearray
> til at have sin stak i. Det gør de også et sted i det link Jan postede.
Men
> er det den måde Java selv optimere en rekursion på, hvis man ikke selv gør
> det?
>
> Mht. min kodeerfaring i C og Java, så skal det da ikke være nogen hemmelig
> at jeg ikke er en haj til specielt C, men jeg tror nu stadigvæk at vores
> underviser på universitetet eller instruktoren er i stand til at at skrive
> optimal kode for et så simpelt program som udregning af
Fibonaccitalrækken,
> selv om jeg ikke skulle være det!
>
>
> "Jan Oksfeldt Jonasen" <jonasenREMOVE@THISit.dk> skrev i en meddelelse
> news:1f7z10x.y7bh0f1yfycceN%jonasenREMOVE@THISit.dk...
> > Morg <not4real@hotmail.com> wrote:
> >
> > > Hej NG
> > >
> > > Er der nogen der ved hvordan rekursion fungerer i Java "bag facaden".
> > > Grunden til jeg spørger er, at hvis man skriver det sammen program
> rekursivt
> > > i henhodsvis Java og C (mit eksempel var beregning af
> Fibonaccitalrækken),
> > > og så kompilerer det under Linux, så er Java faktisk hurtigere end C,
> > > hvilket jo er lidt mærkeligt (da det jo bl.a. kører i en VM). Hvis man
> > > derimod skriver det iterativt vinder C. Nogle der ved hvorfor Java
> åbenbart
> > > er så god til rekursion?
> > >
> > < http://java.sun.com/docs/books/performance/1st_edition/html/JPAlgorithm
> > s.fm.html#11410> kan give et svar.
> >
> > --
> > Mvh/re Jan Jonasen
> > jonasen (at) it (dot) dk
> >
> > If I wanted culture, I'd eat yogurt.
>
>
| |
|
|