- Ylan
- Medlem ●
- Stockholm
- 2009-01-11 21:56
Memark och jag hamnade OT i den här tråden, när Memark sade:
Att pekare och manuell minneshantering skulle vara "smidigare och vettigare när man väl lärt sig" har jag svårt att se. Möjligen att det är lite "coolt" att jobba närmare hårdvaran. Men det finns ju en anledning till att programmeringsspråk hela tiden blir mer och mer högnivå, och det man ser till att bli av med är just att behöva sköta sådant manuellt (det tar massor av tid, ger snudd på inga fördelar, och ger hemska buggar när man missar något). Jag är uppriktigt nyfiken på vilka fördelar du ser med att manuellt behöva ägna sig åt detta.
Varpå jag svarade:
Tror det är vettigt att känna till hur en dator fungerar på åtminstone det abstraktionslager närmast under det man jobbar på. Om man programmerar med garbage collection, tror jag man kan lyckas skriva ett riktigt slött program om man inte har en aning om hur GC fungerar.
Fördelen med Obj-C är ju att du i någon mening kan välja abstraktionsnivå:
Du kan skriva med GC, och inte bry dig om minneshanteringen alls. Att det fungerar är ju nya Xcode ett exempel på. Men Xcode använder sig av (eller skickar data till) GCC (the Gnu Compiler Collection) för kompilering. Är det möjligt att tänka sig GCC med GC? Skulle det finnas några problem med det? Skulle man kunna tänka sig något spel med GC?
Du kan använda den gamla Obj-C metoden med retain count. Detta kan ju vara vettigt om du skriver ett mycket minnesintensivt program, som riskerar bli alltför långsamt med GC. Risken ökar ju då för läckor och krascher, och det blir något råddigare att programmera.
Du kan optimera en metod genom att skriva den som ren C-kod, eller t. om. göra om en metod till att bli en C-funktion (om en kort metod anropas tillräckligt ofta tillbringar datorn, relativt sett mycket tid med att skicka meddelanden till metoden).
GC måste du välja att slå på eller av för hela ditt program. Men du kan skriva ett helt Obj-C program och bara skriva om en metod i C (förslagsvis den som är flaskhalsen)
Vilket följdes av:
Ylan, jag läser ditt inlägg med intresse. Rent tekniskt har du rätt i det mesta, men jag håller inte med om dina slutsatser. Just möjligheten att "gå ner ett lager" och "optimera metoder genom att skriva om dem i ett lågnivåspråk" åberopas ofta som viktiga instrument men det köper jag helt enkelt inte. Jag har inga siffror, men jag misstänker att det endast är i undantagsfall man nånsin behöver göra detta, och då enbart för t ex extremt beräkningsintensiva program. (Nu är min professionella systemutvecklarkarriär iofs bara inne på sitt tredje år, men jag tror mig ha ganska god koll på branchen.)
Med det sagt ser jag ändå inte hur detta skulle vara en fördel med Obj-Cs (alla äldre C-språks) antika minneshantering. I de allra flesta språk, så även t ex Java och VB/C#.NET kan man, vid behov, ändå använda pekare och allokera minne manuellt om behovet skulle uppstå. Vilket det mycket sällan gör. Det är alltså inte främst GC jag är för, utan möjligheten att helt abstrahera bort det faktum att datorn har ett fysiskt internminne (precis som man redan gjort med nätverksströmmar, filpekare, filallokeringstabeller mm).
Nu hörde jag något i veckans Twit, där Scoble sade något intressant om det som blev Vista (ca. 25 minuter in). Longhorn började skrivas i .Net, och när man hade kommit halvvägs, visade det sig att .Net inte riktigt höll måttet. Det blev därför förbjudet med .Net-kod i Vista, och man skrev om allting i C++. Detta arbete ledde till att Vista inte hann betatestas ordentligt. Han följer upp med att säga att det förvisso är en skillnad att skriva ett operativsystem och ett mindre (jämfört med Vista), företagsanpassat program.
Å andra sidan menar Mike Taylor i senaste avsnittet av Late Night Cocoa (LNC 37) som handlar om portning av program, att man skall skriva så mycket man kan i skriptspråk som Python och Ruby, för att slippa problem när man för över program från en plattform till en annan (förutom de fördelar Memark tagit upp med högnivåspråk).
Kan väl konstatera att Apple lagt sig vinn om att ge utvecklarna flera nivåer, vilka kan samexistera i samma program.
Är det någon som har synpunkter på Memarks och min diskussion, eller på Mike Taylors uppfattning och Scobles inside info från Microsoft?
Är det någon som skrivit för mobiltelefoner i exempelvis Java, och kan jämföra med hur det är att skriva för iPhone i Objective-C?
Vänligen, Ylan