Objective-C vs. C++

Tråden skapades och har fått 19 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2003-12-08 21:44

Jag har nu tänkt att jag ska börja utveckla på macen lite mer och har nu sett att det står en massa om Objective-C lite här och där i forumet och även på andra mac-relaterade sidor. Har någon lust att berätta lite om skillnaderna mellan C++ och Objective-C? Eller kanske hänvisa mig till nån artikel på nätet där det står om språken?

Jag vill ha reda på saker som,
* Kan man använda sina bibliotek som man programmerar i C++ utan större problem i en Objective-C-applikation?
* Är språket striktare än C++ som t.ex. C#?
* Påminner språket väldigt mycket av C++? Nåt mer språk?
* Finns det några nya coola "features" i språket?
* Vad är det för kompilator man kör med? Vem har utvecklat den? Finns det olika? Vilken bör man köra?
* Är språket gjort för att vara enkelt eller effektivt?
* Garbage collection och sånt?
* Hur känns syntaxen att jobba med "på heltid"?
.. och självklart allt annat om det är ett intressant språk

En annan variant kan vara om nån har lust att skriva ner 10 orsaker till varför just jag ska börja utveckla i Objective-C
(huvudsakligen så blir det saker som musikapplikationer och lite 3d-spel som ska utvecklas)

inga heliga krig tack

  • Medlem
  • International user
  • 2003-12-09 07:30

1. Om du vill blanda Objective-C och C++ så ta och kolla in Objective-C++ (http://developer.apple.com/documentation/ReleaseNotes/Cocoa/Objective-C++.html)

2.
3. Det är ju ganska likt Smalltalk eftersom det är därifrån inspiriationen är ifrån. Men bortsett från det så tycker jag att känslan av att programmera Obj-C är lite av känslan av att programmera Python eller Ruby.

4. Jämfört med C++ så finns det gott om tuffa finesser. Detta är ju pga runtimesystemet som gör objc till ett väldigt dynamiskt språk, se dynamisk metod bindning och categories.

5. Den som följer med DevelopersTools är det Apple som har utvecklat om jag inte missminner mig. Det finns dock objective-c stöd till gcc oxo.

6. Språket är väl gjort för att vara lite av bägge och, i och med att så mycket bestäms vid körning så drar det ju ner prestandan. men i de fall då man verkligen behöver prestandan så kan man välja att inte köra dynamiskt.

7.Garbage Collection finns inte, dock så är minnes hantering semi-automatisk. Varje objekt kan svara på retain och release meddelande vilka räknar upp respektive ner en räknare, när denna räknaren är 0 så tas objektet bort.

8. De ställen som syntaxen skiljer sig från C++ är främst vid deklaration och implementation av klasser och metoder. I objective-c så parameterlistan till en metod invävd i namnet.

[addressBook searchForName:@Andreas inGroup:@Vänner];

När man väl vant sig vid detta så tycker iaf jag att mycket av koden blir mer lättläst och naturlig.

Själv har jag aldrig riktigt gillat varken C eller C++ utan alltid föredragit smidiga scriptspråk som Python och Ruby och därför så tycker jag att Objective-C är en mycket trevlig mellanväg. Man får den prestanda man behöver samtidigt som man får ett språk som är väldigt smidigt och givande att jobba med. Det håller sig ur vägen.

Till just 3dspel vet jag inte om det är så optimalt men skulle nog tro att det kan funka utmärkt, och om det i vissa fall inte skulle göra det så finns ju alltid möjligheten att blanda in ren C eller C++.

  • Oregistrerad
  • 2003-12-11 20:38

mycket intressant svar.. tack för det!

1. ok.. apple verkar va rätt duktiga på att lägga ut bra info har jag märkt.. jag har läst en del av deras dokument tidigare.. mer blir det.

3. där är en bra orsak till att kolla in språket mer känner jag..

4. ok.. så det går alltså inte att kompilera direkt till maskinkod?

5. gcc gillar jag.. då borde språket vara portat till linux.. antar jag?

6. låter bra

7. ok.. dom har lagt in nån variant av smarta pekare i grunden helt enkelt.. praktiskt.. jag kör med sånt i c++ också

8. ser väldigt stökigt ut.. men jag antar att det är som du säger.. när man vant sig så är det nog inte så stökigt.. se på at&t-assembler bara

Blanda in ren c eller c++ säger du.. kan man köra c/c++ inline eller är det enbart via bibliotek som gäller?

  • Medlem
  • Linköping
  • 2003-12-11 20:57
Citat:

Skrevs ursprungligen av Volantiz
7. ok.. dom har lagt in nån variant av smarta pekare i grunden helt enkelt.. praktiskt.. jag kör med sånt i c++ också

Nej, vare sig Obj-C som språk eller Cocoa som framework använder sig av smarta pekare. Obj-C tillåter inte överlagring av operatorer (specifikt: överlagring av tilldelningsoperatorn som är essensiellt för smarta pekare).

Däremot använder sig Cocoa (uppmuntrad av specarna för Obj-C, tror jag), överallt, sig av ett mycket väl fungerande referensräknarsystem, med explicit "retain", "release", och en mycket smidig (och mig veterligen inte lika vanlig i andra referenssystem) "autorelease". "Överallt" innebär att NSObject (i 99% av fallen den översta klassen i klasshierarikin) och NSProxy (ej hundra på namnet på denna, i de resterande fallen iaf) svarar på dessa metodanrop.

Smarta pekare (i C++) är iofs ganska smidigt, och ofta riktigt trevligt, men orsakar ibland mer overhead och är framförallt ett OTYG när det blandas med vanliga, "osmarta" pekare - tycker jag. Jag föredrar explicit referenshantering, som i Cocoa, eller ingen alls (med GC, som Lisp, Java m.fl.).

Bara mina små ören..

Och ett litet tips, fundera inte så mycket över språket utan ge dig i kast med det helt enkelt. Apple har en hel del lysande dokumentation, bland annat en introduktion till ObjC-språket (hette åtminstone tidigare "objc.pdf"). Har du mycket erfarenhet av C++ tippar jag att du när du börjat bli mer bekant med Obj-C kommer att förbanna en och annan av C++'s små "features"

Lycka till, och ha kul!

o11e

  • Medlem
  • Stockholm
  • 2003-12-11 21:08

Jag rekommenderar Java som förstaspråk därför att:

1) Det finns massor av bra, gratis information på nätet.
2) Det tillåter inte många av de dumheter man kan hitta på i många andra språk
3) Enligt min högst subjektiva mening "åskådliggörs" objektorienterade analogier tydligare i java eftersom klasserna inte smutsas ner av konstigt språkkonstrukt vars namn inte har det minsta med vad objektet beskriver ( init, release, alloc etc). Hmm, jag var något luddig här känner jag hoppas ni förstår vad jag menar.

Summa summarum: Enligt min mening har java en lägre instegströskel än Objective-C.

Och som tidigare användare skrev - sätt igång med det! Bestäm dig, välj ut lite bra litteratur och börja koda!

Minnesregel: Programmerare programmerar

/Kalle

  • Oregistrerad
  • 2003-12-12 03:28

olov: alltid ska man lära sig nåt nytt.. mycket tacksamt Det där referensräknarsystemet måste jag kolla in.. har du nån koll på hur bra prestanda man kan få med ett sånt system jämfört med smarta pekare? Känns just nu som man inte borde vinna så mycket på det..
Och som du tipsar så kommer jag börja köra det utan att fundera så mycket mer på saken.. iaf testa grunderna i det.. dök upp ett projekt för pc igår som jag måste lägga ner massa tid på framöver :\

kalle: jag tackar för att även du svarade.. men nu handlar det inte om ett första språk.. mer om jag ska lägga ner tid på att lära mig ett språk till eller inte nu när jag ändå tänkt börja utveckla på en för mig ny plattform med nya api'er osv.. eller om jag ska köra vidare på c++ och samtidigt lära mig nåt annat språk istället som jag kanske kan få mer nytta för. Nåt nytt språk ska jag lära mig iaf.. minst ett var sjätte månad är min lilla regel (java var ~3 år sedan)

  • Medlem
  • Linköping
  • 2003-12-12 08:37
Citat:

Skrevs ursprungligen av Volantiz
olov: alltid ska man lära sig nåt nytt.. mycket tacksamt Det där referensräknarsystemet måste jag kolla in.. har du nån koll på hur bra prestanda man kan få med ett sånt system jämfört med smarta pekare? Känns just nu som man inte borde vinna så mycket på det..

Explicit referensräkning är ju toksnabbt och väl beprövat (Windows COM med flera), smarta pekare lägger ju på en aning mer overhead eftersom de automatiskt ändrar referensräknarna vid varje tilldelning av en smart pekare. Skillnaden är i de flesta avseenden inte särskilt stor, det handlar väl om ett dussin eller så instruktioner som görs extra vid en tilldelning. Noteras bör väl att smarta pekare per automatik inte ger löser "ägandeproblemet", att man vill returnera ett objekt utan att ha en referens satt på det, men givetvis utan att objektet hinner förstöras innan mottagaren har chans att göra något med det. I Obj-C ordnar autorelease som sagt en effektiv lösning på detta. Jag kan dock tänka mig att beroende på vilken implementation av smarta pekare man kikar på så kan liknande metoder finnas (då på objektnivå istället för pekarnivå).

Kalleh rekommenderar att folk börjar koda objektorienterat i Java, mitt starkaste egna argument för detta är att Java har en mycket väl utvecklad garbage collector - och en GC löser ju samma problem som referensräknare bara mycket, mycket smidigare (och i många avseenden mycket långsammare)

  • Medlem
  • Linköping
  • 2003-12-12 19:59
Citat:

Skrevs ursprungligen av Volantiz
Nåt nytt språk ska jag lära mig iaf.. minst ett var sjätte månad är min lilla regel (java var ~3 år sedan)

Härlig regel! Då måste jag få komma med några förslag på språk du kan sysselsätta dig med! (vet inte vilka du redan kodat): Lisp (särskilt Scheme), Smalltalk (inspirationen till Obj-C, har GC och ALLT är objekt), ML (lika kul som Scheme, så likt fast ändå tvärtom på många sätt), Haskell (spännande koncept med lazy evaluation), C# (åtminstone kommande revisionen, utvecklingen av språket går framåt i rasande takt!). Och tusen till.

Hmm, upptäckte att alla språken jag raddade upp har garbage collection. Det kan inte vara en slump, sanningen är nog den att jag personligen tycker att de blir roligare då. Fast det funkar ju inte alltid, på riktigt, sån ur att man inte behöver vara så förbaskat riktig jämt då

Ju fler språk desto godare soppa,

o11e

  • Oregistrerad
  • 2003-12-14 20:24

hehe.. jo.. jag bestämde mig för att köra på den regeln då de rekommenderade det i boken "The pragmatic programmer - from journeyman to master" av Andrew Hunt & David Thomas. Mycket intressant bok för övrigt..

Just nu så pluggar jag .NET .. så där blir det en hel del C#. 2.0:an väntar jag med spänning på. De andra språken har jag inte rört faktiskt. Lisp har ja varit väldigt nära på att börja med vid ett flertal tillfällen.. men det kommer alltid nåt mellan. ObjC blir iaf nästa språk!

referensräkning osv.. ska som sagt kolla in ämnet lite mer.. hittade en del om det i boken "3d game engine design" av David .H Eberly.. inte hunnit läsa det än bara.. får se om man blir smart av att läsa den

Citat:

Skrevs ursprungligen av Volantiz
olov: alltid ska man lära sig nåt nytt.. mycket tacksamt Det där referensräknarsystemet måste jag kolla in.. har du nån koll på hur bra prestanda man kan få med ett sånt system jämfört med smarta pekare?

Finns bara ett litet problem med referensräkning, och det är vad man ska göra när objekten har referenser till sig själva. Har t.ex. för mig att man kan skapa skräp i Perl på det sättet...

  • Medlem
  • Linköping
  • 2003-12-14 21:37
Citat:

Skrevs ursprungligen av Volantiz
Just nu så pluggar jag .NET .. så där blir det en hel del C#. 2.0:an väntar jag med spänning på. De andra språken har jag inte rört faktiskt. Lisp har ja varit väldigt nära på att börja med vid ett flertal tillfällen..

En skön grej med nya C# är att de fått in lambda-uttryck, det gillar man om man gillar lisp!

Citat:

referensräkning osv.. ska som sagt kolla in ämnet lite mer.. hittade en del om det i boken "3d game engine design" av David .H Eberly.. inte hunnit läsa det än bara.. får se om man blir smart av att läsa den

Hehe, det blir du säkert - akta dig för André La Mothe bara vad gäller böcker i den kategorin

o11e

Samuel K skrev

Citat:

Finns bara ett litet problem med referensräkning, och det är vad man ska göra när objekten har referenser till sig själva. Har t.ex. för mig att man kan skapa skräp i Perl på det sättet...

??? Kan du precisera lite närmare...
Antar att du tänker på retain-cycles, men då är minst två objekt inblandade.

  • Oregistrerad
  • 2003-12-15 15:03

olov: Andrés böcker passar jag mig för sedan länge (sen hans windows game gurusblahblah-bok vad den nu heter som jag har för mig var directx-dokumentationen fast lite omskriven). Han är väldigt driftig och trevlig osv.. men verkar inte riktigt försöka lägga så mycket engangemang på just böckerna

Lambda-uttryck känner jag inte igen.. men snart så får jag väl koll på det om det nu kommer till 2:an. Jag väntar mest på att få testa det nya iterationsjoxet.. och möjligheten att kunna kladda ut en klass över flera filer.. det var det jag kommer ihåg nu att jag intresserade mig för när jag läste om uppdateringen.

Hur är det med C# på mac förresten? Om det finns.. finns det då någon fungerande opengl-wrapper?

Citat:

Skrevs ursprungligen av Per Persson
??? Kan du precisera lite närmare...
Antar att du tänker på retain-cycles, men då är minst två objekt inblandade.

Kan mycket väl vara som du säger - har inte tittat närmare på saken själv. Frågan dök upp för några veckor sedan en epostlista jag brukar följa, och där var det någon som menade att man i Perl kan åstadkomma skräp genom att låta en instansvariabel i ett objekt peka på $self. Referensräknaren skulle då se det som att det finns en referens till objektet i fråga, och låta bli att avallokera dess minnesutrymme.

Men som sagt - jag är långtifrån säker på att det verkligen stämmer...

Citat:

Skrevs ursprungligen av Volantiz
Hur är det med C# på mac förresten? Om det finns.. finns det då någon fungerande opengl-wrapper?

Mono är ju portat till OS X, så C# är inga problem. Kan inte så mycket om Mono/.NET än, men glgen-modulen verkar vara vad du letar efter...

  • Medlem
  • Linköping
  • 2003-12-15 21:08
Citat:

Skrevs ursprungligen av Volantiz
olov: Andrés böcker passar jag mig för sedan länge (sen hans windows game gurusblahblah-bok vad den nu heter som jag har för mig var directx-dokumentationen fast lite omskriven). Han är väldigt driftig och trevlig osv.. men verkar inte riktigt försöka lägga så mycket engangemang på just böckerna

Nävisst. Men du - trevlig, har du träffat mannen månne eller syftar du mer på hans författarstil?

o11e

  • Medlem
  • Linköping
  • 2003-12-15 21:29
Citat:

Skrevs ursprungligen av Samuel K
Mono är ju portat till OS X, så C# är inga problem. Kan inte så mycket om Mono/.NET än, men glgen-modulen verkar vara vad du letar efter...

Efter en snabb titt på hemsidan så ser det inte ut som att Ximian (Novell) själva verkar prioriterar plattformen just nu (Monos hemsida). Dessutom, utvecklingen av JIT:tern för PowerPC har väl precis tagit fart, DarwinPorts-projektet har problem att få in mono som port (det löser sig nog), Fink verkar ha det men bara i CVS (tog bara en snabb titt så detta kan vara fel). Hur bra funkar mono på vår plattform just nu, egentligen? Nån på forumet som har provat?

o11e

  • Oregistrerad
  • 2003-12-16 00:03

"Mono är ju portat till OS X, så C# är inga problem. Kan inte så mycket om Mono/.NET än, men glgen-modulen verkar vara vad du letar efter..." - samuel k

finemang!

"Nävisst. Men du - trevlig, har du träffat mannen månne eller syftar du mer på hans författarstil? " - olov

jag syftar på att jag för 2 år sedan bodde en månad hos en polare till andré.. och eftersom spelutveckling var vår största hobby+jobb (även större hobby än musik som nu tagit över fullständigt här hemma) så fick man höra en del om honom

  • Medlem
  • Linköping
  • 2003-12-17 10:56
Citat:

Skrevs ursprungligen av Volantiz
jag syftar på att jag för 2 år sedan bodde en månad hos en polare till andré.. och eftersom spelutveckling var vår största hobby+jobb (även större hobby än musik som nu tagit över fullständigt här hemma) så fick man höra en del om honom

Way cool Var det i frankrike tro, hans namn känns ju lite fransosiskt sissådär? Nå, hur ligger det nu till (du som har lite insiderinfo) - har André gjort något spel (kommersiellt) någonsin?

o11e

  • Oregistrerad
  • 2003-12-17 22:59

Här är nåt han gjort som är bra mycket coolare än ett kommersiellt spel: http://www.xgamestation.com/

..verkar förresten som att objc får vänta ett tag.. vart helt plötsligt lite väl mycket annat att göra nu

1
Bevaka tråden