ObjC und C



  • Hallo,

    in welchem Zusammenhang stehen ObjC und reines C? Ich habe gelesen, dass Objectiv C vor allem für die Entwicklung von iOS Apps verwendet wird und zudem vor allem aus C besteht. Ist es möglich auch iOS Apps bestehend aus reinem C zu schreiben? Und wo genau besteht der Unterschied zu C?


  • Mod

    Das Verhältnis entspricht ungefähr dem von C++ zu C, falls dir das was sagt. Das heißt technisch gesehen ist Objectiv**e-**C eine Erweiterung von C, aber praktisch ist es eine völlig andere Sprache mit der gleichen Syntax (=Grammatik) wie C.

    (Wenn wir mal ehrlich sind, ist der Grund, wieso so viele Sprachen "C" im Namen haben oder sich gar kompatibel zu C verhalten, dass C eine überaus erfolgreiche Sprache ist/war. An sich sind diese Sprachen aber nicht wirklich als Erweiterungen von C gedacht, sondern als eigenständige Sprachen. Aber indem man sich auf das große Vorbild beruft, kann man die vielen C-Entwickler dazu bringen, sich die Sprache anzusehen und durch die Kompatibilität hat man im Bedarfsfall die riesigen Mengen bestehenden C-Codes zur Verfügung.

    Ich denke nicht, dass man das heute noch so machen würde, da C nicht mehr den gleichen Stellenwert hat, wie vor ein paar Jahrzehnten. Die Syntax nimmt man weiterhin gerne, weil sie gut ist, aber das "C" im Namen oder gar Abwärtskompatibilität sind schon lange keine Pflicht mehr)

    Ich habe gelesen, dass Objectiv C vor allem für die Entwicklung von iOS Apps verwendet wird

    Das ist korrekt. Es ist sogar so, dass Objective-C außerhalb der iOS-Entwicklung praktisch nicht existiert.

    Ist es möglich auch iOS Apps bestehend aus reinem C zu schreiben?

    Ja. Aber dann hat man natürlich kein Cocoa oder ähnliches zur Verfügung.



  • SeppJ schrieb:

    Ich habe gelesen, dass Objectiv C vor allem für die Entwicklung von iOS Apps verwendet wird

    Das ist korrekt. Es ist sogar so, dass Objective-C außerhalb der iOS-Entwicklung praktisch nicht existiert.

    Außerhalb der OSX-Entwicklung!



  • SeppJ schrieb:

    Das Verhältnis entspricht ungefähr dem von C++ zu C, falls dir das was sagt. Das heißt technisch gesehen ist Objectiv**e-**C eine Erweiterung von C, aber praktisch ist es eine völlig andere Sprache mit der gleichen Syntax (=Grammatik) wie C.

    (Wenn wir mal ehrlich sind, ist der Grund, wieso so viele Sprachen "C" im Namen haben oder sich gar kompatibel zu C verhalten, dass C eine überaus erfolgreiche Sprache ist/war. An sich sind diese Sprachen aber nicht wirklich als Erweiterungen von C gedacht, sondern als eigenständige Sprachen. Aber indem man sich auf das große Vorbild beruft, kann man die vielen C-Entwickler dazu bringen, sich die Sprache anzusehen und durch die Kompatibilität hat man im Bedarfsfall die riesigen Mengen bestehenden C-Codes zur Verfügung.

    Ich denke nicht, dass man das heute noch so machen würde, da C nicht mehr den gleichen Stellenwert hat, wie vor ein paar Jahrzehnten. Die Syntax nimmt man weiterhin gerne, weil sie gut ist, aber das "C" im Namen oder gar Abwärtskompatibilität sind schon lange keine Pflicht mehr)

    Ich habe gelesen, dass Objectiv C vor allem für die Entwicklung von iOS Apps verwendet wird

    Das ist korrekt. Es ist sogar so, dass Objective-C außerhalb der iOS-Entwicklung praktisch nicht existiert.

    Ist es möglich auch iOS Apps bestehend aus reinem C zu schreiben?

    Ja. Aber dann hat man natürlich kein Cocoa oder ähnliches zur Verfügung.

    Herzlichen Dank! Für deine Beiträge hier sollte man dir mal eine fette Belohnung geben. 😉 Off-Topic: Wie lange Erfahrung hast du denn schon im Programmieren und wie kam es dazu?



  • @SeppJ: Man kann durchaus Cocoa Apps in reinem C schreiben, aber das macht dann noch viel weniger Spass als COM unter Windows mit reinem C zu benutzen. Die Objective-C Runtime ist in C geschrieben und kann direkt genutzt werden und ist sogar dokumentiert.

    Du kannst z.B. in Objective-C folgendes schreiben:

    NSString *hallo = [[NSString alloc] initWithString:@"Hallo Welt"];
    

    Der Compiler übersetzt das faktisch in:

    void *hallo = objc_msgSend(objc_msgSend(objc_getClass("NSString"), NSSelectorFromString(CFSTR("alloc"))),
        NSSelectorFromString(CFSTR("initWithString")), "Hallo Welt");
    

    Da vergeht mir persönlich dann die Freude am programieren 😃



  • /rant/ schrieb:

    @SeppJ: Man kann durchaus Cocoa Apps in reinem C schreiben, aber das macht dann noch viel weniger Spass als COM unter Windows mit reinem C zu benutzen. Die Objective-C Runtime ist in C geschrieben und kann direkt genutzt werden und ist sogar dokumentiert.

    Du kannst z.B. in Objective-C folgendes schreiben:

    NSString *hallo = [[NSString alloc] initWithString:@"Hallo Welt"];
    

    Der Compiler übersetzt das faktisch in:

    void *hallo = objc_msgSend(objc_msgSend(objc_getClass("NSString"), NSSelectorFromString(CFSTR("alloc"))),
        NSSelectorFromString(CFSTR("initWithString")), "Hallo Welt");
    

    Da vergeht mir persönlich dann die Freude am programieren 😃

    Wie viel Sinn macht es, nach C dann ObjC zu lernen, seitdem es Swift gibt? Was ist zu bevorzugen?



  • CrispyTurtleAlligator schrieb:

    Wie viel Sinn macht es, nach C dann ObjC zu lernen, seitdem es Swift gibt? Was ist zu bevorzugen?

    Kommt darauf an. Wenn du Swift für Performance-kritische Sachen verwenden willst ... lass es lieber bleiben



  • Apple versucht Objective-C loszuwerden mit der Begründung, dass es zu viele Altlasten mit sich bringt und langsam sei. Swift setzt tatsächlich aber auf der exakt gleichen Runtime auf und bietet die gleichen Features (Dynamic Dispatch, Late Binding, Extensibility usw.) wie Objective-C zum gleichen Preis.

    Objective-C und Swift sind langsame Sprachen im vergleich zu C, das liegt in der Art und Weise wie die Runtime realisiert ist (siehe Beispiel oben). Für das meiste reicht es völlig aus, aber wenn es um Performance geht, programmiert man besser C oder C++. In Objective-C kannst du inline C und C++ verwenden, in Swift nicht. Das ist für mich der grösste Nachteil.

    Ich mag Swift nicht wirklich, aber Apple versucht diese Sprache zu forcieren. Es macht daher schon Sinn, sich zumindest mit Swift zu beschäftigen, wenn man auf der Plattform in Zukunft programmieren möchte.


  • Mod

    /rant/ schrieb:

    @SeppJ: Man kann durchaus Cocoa Apps in reinem C schreiben, aber das macht dann noch viel weniger Spass als COM unter Windows mit reinem C zu benutzen. Die Objective-C Runtime ist in C geschrieben und kann direkt genutzt werden und ist sogar dokumentiert.

    Du kannst z.B. in Objective-C folgendes schreiben:

    NSString *hallo = [[NSString alloc] initWithString:@"Hallo Welt"];
    

    Der Compiler übersetzt das faktisch in:

    void *hallo = objc_msgSend(objc_msgSend(objc_getClass("NSString"), NSSelectorFromString(CFSTR("alloc"))),
        NSSelectorFromString(CFSTR("initWithString")), "Hallo Welt");
    

    Da vergeht mir persönlich dann die Freude am programieren 😃

    Danke für die Aufklärung! Ist ja wirklich gruselig.


Anmelden zum Antworten