mboost-dp1

Forskel på programmering og script


Gå til bund
Gravatar #1 - Jace
20. nov. 2008 11:16
Heay...

Hvad er definitionen egentlig på forskellen mellem programmering og script?

Man hører tit at sprog som C# og C++ er programmeringssprog, mens PHP bare er at scriptsprog. Men hvor går grænsen egentlig?

Hvad skal der til før et sprog bliver et programmeringssprog?

På forhånd tak...
Gravatar #2 - myplacedk
20. nov. 2008 11:25
Forskellen er kort sagt om det kompileres eller fortolkes. Det er i hvert fald den nemme definition.

Men i dag er der adskillige sprog som kan begge dele, og så bliver det svært.
Gravatar #3 - Kordonme
20. nov. 2008 11:28
Programmeringssprog - Skal compiles før brug.
Scripting sprog - Brug som det er.

Programmeringssprog kunne være PHP, Classic ASP osv.

Scriptingsprog kunne være .NET, Java osv.
Gravatar #4 - Mort
20. nov. 2008 11:37
Xpazzer (3) skrev:
Programmeringssprog kunne være PHP, Classic ASP osv.

Scriptingsprog kunne være .NET, Java osv.


Der fik du vist byttet rundt på dem.
Gravatar #5 - zin
20. nov. 2008 13:04
Problemet er bare at frameworks (læs: .NET) efterhånden så ekstensivt så man faktisk kunne lave en engine der burde kunne fortolke C# eller lign. og dermed bruge det som et scriptsprog. Når du skriver i C# bruger du 90% af tiden biblioteker(klasser), som MS har lavet, og som du, for så vidt, ikke har styr på hvad gør (med mindre du læser koden, som man jo kan nu), helt præcist... Derfor er der specielt megen diskussion på området.
Gravatar #6 - gnаrfsan
20. nov. 2008 13:24
#5: Java er nærmere et scriptsprog, idet det kompileres til bytekode, som principielt set er et stak assembler script. Bytekoden køres af JVM, der foretager runtimefortolkning.
I .Net er der ikke tale om runtimefortolkning, og derfor er det ikke et script sprog. Alt er kompileret, omend efter fortolkning af højniveau sprog, til et fælles underliggende sprog.

Den eneste grund til at jeg vil kalde Java et programmerings sprog, frem for et scriptsprog, er at der er et niveau imellem det skrevne kode og det kørte kode.
Gravatar #7 - Borg[One]
20. nov. 2008 13:28
#6
Er det ikke fuldstændig det samme der sker, hvadenten man køre java eller .NET?

Først bryder man koden ned til bytecode/MSIL, der skal afvikles af noget fortolknings-værk??

Er der noget basalt jeg totalt har overset?
Gravatar #8 - Kordonme
20. nov. 2008 13:35
Mort (4) skrev:
Xpazzer (3) skrev:
Programmeringssprog kunne være PHP, Classic ASP osv.

Scriptingsprog kunne være .NET, Java osv.


Der fik du vist byttet rundt på dem.


Min fejl :o) Godt der er nogle der er vågne!
Gravatar #9 - zin
20. nov. 2008 13:35
#7: Så vidt jeg mindes har du fuldstændig ret, bortset fra at .NET ikke er et programmeringssprog men en et framework til f.eks. J#, C#, C++ m.v.. Og jo, på en MS-maskine kompileres koden jo bare til MSIL kode som så afvikles. Den eneste forskel er vel at JVM'en er en VM (Virtual Machine), hvorimod MSIL-koden skal afkodes af på anden vis, før den kommer ned til maskin-kode.
Gravatar #10 - Borg[One]
20. nov. 2008 13:44
#9 J2EE er vel også et framework, der så bliver yderligere beriget af diverse leverandøre.

Hvis jeg skal kunne se en forskel, er det at JVM'en er en kørende instans, der afvikler applikationer, hvorimod .NET kører en fortolker af MSIL'en...men jeg har ikke den store kendskab til .NET, så jeg ved ikke om det er sådan det forholder sig.

Findes der ikke en applikationsserver til .NET, ligesom til java?!??
Gravatar #11 - gnаrfsan
20. nov. 2008 13:48
#7+#9
Nej, forskellen er at Java faktisk fortolker koden hele vejen igennem kørslen. F.eks. Javas HotSpot teknologi som tilpasser sig udvikling i variable etc.
Læs: http://en.wikipedia.org/wiki/HotSpot

Efter hvad jeg havde forstået, bliver .Nets bytekode bare mere eller mindre linket før det bliver kørt, men det er muligt at jeg tager fejl.
Gravatar #12 - Borg[One]
20. nov. 2008 14:16
#11 Det er jeg ikke helt sikker på, uden at skulle være ekspert.
Men jeg mener at .NET også har en runtime-optimering af koden.

Hvis det skal give nogen rigtig god mening, kræver det nok, at man har appserver-tilstande, JRE'en begynder først at optimere kodestumper, når det er blevet kaldt et par hundred gange.
Gravatar #13 - Borg[One]
20. nov. 2008 14:25
#11 Hotspot som du linker til...det lyder ikke som om det er en del af J2EE-standarden, men blot en del af Sun's JVM-implementering.

Jeg ved positivt at IBM's JVM har samme feature, og jeg kan ikke foretille mig andet end at Oracle/BEA har samme feature.
Gravatar #14 - gnаrfsan
20. nov. 2008 14:27
#13
Edit: læste din kommentar forkert.
Ja, det er noget Sun har købt til at indbygge i deres JVM. Når jeg omtaler hvordan sproget kører, så omtaler jeg suns implementering. Jeg gider ikke at holde styr på de forskellige implementeringer, der er.
Gravatar #15 - arne_v
20. nov. 2008 14:29
#6 og #11

Nej.

Java og .NET virker stort set paa samme maade.

En Java compiler oversaetter Java source cod etil Java byte code.

En .NET compiler oversætter C#/VB.NET/whatever til MSIL.

JVM JIT compiler Java byte code til native instruktioner.

.NET runtime JIT compiler MSIL til native instruktioner.

Der er kun ganske små forskelle:
- .NET JIT compiler så vidt jeg ved altid
- de kendte JVM JIT compiler kun hvis de mener at koden skal udfoeres mange gange og fortolker ellers
- .NET kommer med en AOT compiler ogsaa (NGEN)
Gravatar #16 - arne_v
20. nov. 2008 14:34
#hotspot

HotSpot er en JIT compiler helt ligesom .NET's.

Eneste forskel er at den vurderer hvorvidt det overhovedet kan betale sig at JIT compile inden den gør det.

Det adaptive betyder at de har fortrydelsesret. Den kan vælge at gætte på at noget kun skal køres få gange og undlade at JIT compile det og så når den opdager at det faktisk bliver kørt mange gange JIT compile det. Det har en vis betydning for hvordan man bør lave micro-benchmarks i Java, hvis de skal være korrekte, men jeg har aldrig set effekten i praksis.
Gravatar #17 - arne_v
20. nov. 2008 14:38
#13

Ja. Alle nyere JVM har den feature. Dengang teknologien var ny kunne man i SUN's Java angive om man skulle bruge classic VM eller hotspot VM. Classic VM eksisterer slet ikke i nyere SUN JVM. Hotspot bruges som alias for client VM men brugen af navnet til angivelse af VM er deprecated.

(og det kan iøvrigt i de fleste tilfælde anbefales at bruge server VM !=
Gravatar #18 - arne_v
20. nov. 2008 14:43
#1

Tilbage til det oprindelige spoergsmål.

Der kan anlægges forskellige kriterier.

Et af dem er nævnt:

compilet => programmerings sprog
fortolket => script sprog

En anden er:

statisk typed => programmerings sprog
dynamic typed => script sprog

En tredie er:

skrevet af en med IT uddannelse => programmering
skrevet af en autodidakt => scripting

Men det kan altså godt blive lidt grumset nogen gange med moderne software. Lad os tage et eksempel: EL embedded i JSP sider.
Gravatar #19 - Borg[One]
20. nov. 2008 18:34
#arne_v

Som sædvanlig formår du at skabe klarhed over situationen - mange tak for det! :o)

Findes der en dedikeret AppServer til .NET-apps?
Biztalk eksempelvis...?
Gravatar #20 - arne_v
20. nov. 2008 19:04
#19

ASP.NET er det ekvivalente til en Java EE web container.

COM+ er det ekvivalente til en Java EE EJB container.

BizTalk svarer mere til IBM's WebSphere ESB, WebSphere Message Broker, WebSphere Business Integration etc. (IBM har et hav af produkter på det område).

SharePoint svarer mere til JSR 168 compliant portals (IBM's WebSphere Portal etc.).
Gravatar #21 - arne_v
20. nov. 2008 19:09
#20

COM+ er ældre end .NET, men System.EnterpriseServices udnytter COM+ som hvad man i Java EE verdenen vil kalde container.
Gravatar #22 - Jace
24. nov. 2008 11:41
#Alle

Tak for svarene. Det blev sku hurtigt lidt for teknisk for mig, så stor tak til #3 og #18 for de korte forklaringer af forskellen :)
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login