Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?

Ein Blick auf Swift, Apples neue Programmiersprache

Generics, Tuples, Namespaces, Closures... Programmierparadigmen, die bisher mit Objective-C nicht denkbar sind. Apple hat gestern zur Überraschung der Entwicklergemeinde eine neue und moderne Programmiersprache vorgestellt, die das betagte Objective-C ablösen soll.

Entwicklung von Objective-C
Die erste Version von Objective-C war eine sehr schlanke objektorientierte Erweiterung von C und brachte wenige direkte Sprachfunktionen mit. Von vielen wurde dies bejubelt, da dies die Verständlichkeit des Codes stark steigerte - andere vermissten bekannte Programmierparadigmen aus anderen Sprachen.
Apple führte zur WWDC 2006 eine Erweiterung von Objective-C ein (genannt Objective-C 2.0). Neu waren unter anderem Properties (Punkt-Notation beim Zugriff auf Instanz-Variablen von Objekten, beispielsweise meinObjekt.wert=5 statt [meinObjekt setWert:5]), verbessertes Durchlaufen von Objekt-Sammlungen sowie Code-Blöcke.

Auch wurde der Objective-C-Garbage-Collector eingeführt, so dass sich Entwickler nicht mehr selbst um die Speicherverwaltung kümmern mussten. Zur Laufzeit des Programmes analysierte der Garbage Collector, ob ein Speicherbereich noch benötigt wird oder nicht. Leider war dies sehr leistungsintensiv und fehleranfällig, weswegen Apple diese Technologie nicht weiter verfolgen konnte. Daher führte Apple mit OS X 10.8 eine Code-Analyse namens ARC (Automatic Reference Counting) ein, die beim Kompilieren bereits analysiert, wann welche Speicherbereiche nicht mehr benötigt werden. Mit ARC liegt es nicht mehr in der Verantwortung des Entwicklers, Speicher für Objekte wieder freizugeben.

Cocoa & Cocoa Touch

OS-X- und iOS-Entwicklern stehen mit Cocoa und Cocoa Touch mächtige Frameworks zur Verfügung. Die gute Nachricht ist, dass sich diese Frameworks auch aus Swift heraus vollständig nutzen lassen. Umsteiger von Objective-C müssen also nicht bei Stunde Null anfangen, sondern nur eine neue Syntax lernen.



Ein Blick auf Swift, Apples neue Programmiersprache

Die Syntax erinnert an eine Mischung aus verschiedenen anderen objektorientierten Sprachen wie C# und Java. Es wird auf explizite Header-Dateien verzichtet, die Definition einer Klasse und die Implementierung finden sich in der selben Datei wieder (mit der Endung .swift). Eine gewöhnliche Klasse sieht wie folgt aus:

class Shape {
    var numberOfSides = 0
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

Dies definiert die Klasse namens "Shape", die eine Instanz-Variable mit dem Namen numberOfSides mitbringt. Ferner wird eine Funktion definitiert (simpleDescription), die eine Zeichenkette mit der Seiten zurückliefert. Rückgabewerte werden mit "- >" gekennzeichnet (in diesem Fall ein String), in den Klammern nach dem Funktionsnamen können benannte Parameter übergeben werden (die Funktion simpleDescription hat in diesem Fall keine). Eine gute Entscheidung von Apple war die Beibehaltung von benannten Parameternamen bei Funktionen - dies erhöht die Lesbarkeit und die Verständlichkeit von Code deutlich.

Etwas gewöhnungsbedüftig ist, dass Variablen zwar typisiert sind, dies aber nicht in allen Fällen explizit angegeben werden muss. So kann beispielsweise eine Ganzzahl (in Swift auch ein Objekt, anders als in Objective-C) in einer Variable gespeichert werden, ohne explizit angegeben zu müssen, dass die Variable eine Ganzzahl sein soll:

var meinInt = 60

Der Compiler erkennt, dass 60 ein Ganzzahl ist und weist meinInt automatisch diesen Typ zu. Glücklicherweise ist es aber auch möglich, durch einen Doppelpunkt explizit anzugeben, um welchen Typ es sich handelt:

var meinInt: Int = 60

Die Behandlung von Variablen, die entweder einen Verweis auf eine Klasseninstanz oder explizit auf kein Objekt zeigen, ist in Swift zwar sicher gelöst, aber umständlich zu nutzen ("Optional Chaining"). Mittels Fragezeichen lassen sich Variablen als Optional markieren, hier muss der Programmierer damit rechnen, dass diese auch nicht zugewiesen sein können. Will man beispielsweise auf die optionale Variable "meineVar" im Objekt nach "meinObjekt" nach "datum" fragen (meineVar ist Optional), hilft folgender code weiter:

if let meinDatum = meinObjekt.meineVar?.datum {
    println("Das Datum ist \(meinDatum).")
}

Nur wenn in meinObjekt die Variable meineVar gesetzt ist, bekommt die Konstante meinDatum einen Wert und der Code in der If-Bedingung wird überhaupt ausgeführt.

Komplexität von Swift

Viele weitere Sprachkonstrukte wie Beispielsweise Tuples (Variablen, die mehrere Werte beinhalten können; besonders bei Rückgabewerten von Vorteil), Subscripts (der schnelle Zugriff auf Objektsammlung mittels eckiger Klammern) und deutlich flexiblere Enums sind sehr sinnvolle Bestandteile von Swift - führen aber auch zu Problemen. Die Komplexität der Sprache ist besonders im Vergleich zu der ersten Objective-C-Version enorm gestiegen. Gab es in Objective-C meist nur wenige sprachliche Möglichkeiten, bietet Swift mehrere, teils redundante Ansätze zur Problemlösung. Besonders bei der Zusammenarbeit in Entwickler-Teams kann dies zu Konflikten führen, wenn die Entwickler verschiedene Code-Stile verwenden.

Erst in den kommenden Monaten und Jahren wird sich zeigen, ob Swift das sehr bewährte Objective-C ablösen kann. Objective-C hat sich selbst bei sehr großen Projekten bewährt, diese wartbar und verständlich zu halten. Die Anforderungen an Swift sind enorm: Moderne Sprachfeatures unterstützen, grundsätzlich kompatibel mit Objective-C bleiben, weiterhin die Zusammenarbeit mit C-Programmierbibliotheken zu ermöglichen und bei großen Projekten die Übersichtlichkeit des Codes zu gewährleisten.

Migration und Integration von bestehendem Programmiercode

Apple hebt in der Dokumentation zu Swift deutlich hervor, dass sich Swift-Code gut mit Objective-C und C mischen lässt. Zwar ist es nicht möglich, aus Objective-C heraus die modernen Sprachfunktionen von Swift zu nutzen, aber es ist möglich, Swift-Klassen von Objective-C abzuleiten und Funktionen in beide Richtungen aufzurufen. Auch kann der Entwickler mit C-Programmierschnittstellen interagieren, dies ist aber deutlich mühseliger und unübersichtlicher als in Objective-C. So soll es möglich sein, größere Objective-C-Projekte nach und nach auf Swift umzustellen, ohne das man das gesamte Projekt auf einmal neu programmieren muss. Sobald die ersten Entwickler anfangen, Teile von größeren Projekten auf Swift umzustellen, wird sich zeigen, ob der von Apple vorgeschlagene Weg sich tatsächlich in der Praxis bewährt.

Umstieg auf Swift

Viele Entwickler dürften sich die Frage stellen, ob es sinnvoll ist, ein neues Projekt jetzt in Swift oder in Objective-C zu beginnen. Swift ist gerade erst auf den Markt gekommen und wird mit Sicherheit noch einige Fehler aufweisen und diverse Probleme bei dem Umgang mit den bestehenden Cocoa- und Cocoa-Touch-Frameworks bereiten. Wenn das Projekt eine Laufzeit von weniger als drei Jahren haben soll, bevor eine Neuentwicklung ansteht, wird der Entwickler mit Objective-C besser beraten sein. Soll die Code-Basis länger als drei Jahre eingesetzt werden, könnte der Wechsel zu Swift sinnvoll sein. Apple schweigt sich momentan noch darüber aus, wann neue Programmierschnittstellen nicht mehr für Objective-C, sondern nur noch für Swift zur Verfügung stehen.

Weiterführende Links:

Kommentare

Navier-Stokes
Navier-Stokes03.06.14 15:17
Bei manchen Dingen (ob alt oder neu) graut es mir nach wie vor ganz gewaltig:

Garbage collection: Resourcenverschwendung auf Kosten von Kontrolle
ARC:
... die beim Kompilieren bereits analysiert, wann welche Speicherbereiche nicht mehr benötigt werden...
Wer glaubt, dass ein Compiler hellsehen kann...
Implizite Typisierung: bringt meiner Meinung nach mehr menschliche Fehler als Vorteile; dem Programmierer wird das Bewusstsein für Daten genommen
Optionale Variablen: Schmuddelstil wird legalisiert; kann auch irgendwie nicht effizient sein, denn irgendwer muss ja protokollieren und verwalten, ob ein Klassenmember initialisiert worden ist oder nicht.

Eigentlich schade, dass mit solchen Sprachfeatures dem "Programmierer" jegliches Gefühl und Bewusstsein für Daten und die verarbeitenden Befehle verloren geht.
Z.B.: über so eine Zeile wie hier
return "A shape with 3 sides."
denkt doch kaum ein Mensch mehr nach. Ich kenne die Details der Swift-Standards nicht aber vermutlich würde hier (wenn's C++ wäre) der String-Konstruktor mit einem Literal vom typ const char* aufgerufen, der ein String-Objekt auf dem Heap erzeugt, welches anschließend durch die return-Anweisung (hoffentlich mithilfe eines überladenen Zuweisungsoperators) nach "draußen" kopiert wird. Das ist schnell hingeschmiert aber total ineffizient. Es handelt sich zwar nur um einen Beispielcode von oben, aber wenn man sich manchmal andere Quellen durchliest, sind diese voll von solchen und anderen "Dummheiten".

Und wenn Apple behauptet, Swift sei um den Faktio X schneller als Objective-C, dann liegt das mit Sicherheit nicht an der Sprache, sondern an einer besseren Implementierung und Verzahnung mit dem Framework.
Computer Science is no more about computers than astronomy is about telescopes. (Edsger W. Dijkstra)
0
Mendel Kucharzeck
Mendel Kucharzeck03.06.14 15:33
Navier-Stokes
Zu ARC: Das funktioniert recht gut, hast du es mal ausprobiert? Kannst auch mittels Instruments überwachen ob alles "wegfliegt" was nicht mehr benötigt wird.

Optionale vars: Naja, in ObjC sind ALLE variablen optional. Hier musst die sie als nicht required markieren, sonst müssen sie einen wert enthalten. Der Umgang bei der if-abfrage ist aber irgendwie gruselig

Performance: Swift bringt ein paar mehr hints für den compiler mit, z.b. mittels let und var (konstante und "wiederbeschreibbare" variable). Daher kann der compiler mehr optimieren. Ob das natürlich um 10, 20 oder 30% schneller ist kann ich noch nicht beurteilen.
0
adiga
adiga03.06.14 15:37
Tuples war mit Objective-C nicht machbar? Echt?

Was habe ich den vor 25 Jahren auf den VAXen mit Oracle V gemacht ausser mit Tuples gearbeitet?

Oder wurde hier wieder mal ein lange eingeführter Begriff zweckentfremdet?
0
Mendel Kucharzeck
Mendel Kucharzeck03.06.14 15:43
adiga
Hier ist ein Beispiel:

func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
getGasPrices()
0
phrankster200003.06.14 15:45
Navier-Stokes
Bei manchen Dingen (ob alt oder neu) graut es mir nach wie vor ganz gewaltig:
Garbage collection: Resourcenverschwendung auf Kosten von Kontrolle

Swift bietet keine Garbage collection.
Navier-Stokes
ARC: ...
Wer glaubt, dass ein Compiler hellsehen kann...

ARC ist gut verstanden und funktioniert hervorragend, wenn der Entwickler die wenigen zu beachtenden Regeln einhält. Es ist wesentlich effizienter als Garbage collection, erfordert aber ein wenig mehr mitdenken. Klar, wenn man das Memory-Management selber macht, kann man in C nocch performanter arbeiten. Aber: Die Fehlerwahrscheinlichkeit ist um mehrere Größenordnungen höher. Außerdem sind die zu erwartenden Performancevorteile nur in sehr seltenen Fällen relevant. ARC ist ein sehr guter Kompromiss in der Abwägung Sicherheit, Fehlertoleranz und Skalierbarkeit (der Projektgröße) gegenüber Performance.
Navier-Stokes
Implizite Typisierung: bringt meiner Meinung nach mehr menschliche Fehler als Vorteile; dem Programmierer wird das Bewusstsein für Daten genommen

Type-Inference ist state of the art und Bestandteil aller mir bekannten neuen statisch typisierten Programmiersprachen. Es überwindet schwer lesbaren Boilerplate-Code und behält die Vorteile statischer Typisierung bei.
Navier-Stokes
Optionale Variablen: Schmuddelstil wird legalisiert; kann auch irgendwie nicht effizient sein, denn irgendwer muss ja protokollieren und verwalten, ob ein Klassenmember initialisiert worden ist oder nicht.

Keineswegs Schmuddelstil, sondern ein mehr an Sicherheit: In Swift müssen Variablen, denen nil zugewiesen werden kann, explizit gekennzeichnet werden.
Navier-Stokes
return "A shape with 3 sides."
denkt doch kaum ein Mensch mehr nach. Ich kenne die Details der Swift-Standards nicht aber vermutlich würde hier (wenn's C++ wäre) der String-Konstruktor...

Soweit ich das anhand der veröffentlichten Dokumentation überblicken kann, implementiert Swift behind the scenes ein äußerst ausgeklügeltes String-Management. Wenn man so etwas heutzutage noch alles selbst ausimplementieren will... naja dann viel Spaß!

Selbst Skript-Sprachen - insbesondere JavaScript auf V8 oder anderen modernen VMs - liefern beim Thema Strings unglaublich hohe Performance und vermeiden Redundanz wo's nur geht.

Meine Einschätzung zum Thema:

Gegenüber Objective C ist Swift ein guter Neuanfang. Vor allem für Entwickler, die keinen Objective C-Hintergrund haben, gut zu erlernen

Ich hätte mir allerdings gewünscht, dass Apple Go adaptiert oder zumindest sich eher an den Konzepten von Go orientiert. Mir fehlt das Thema Concurrency. Protocols und Extensions sind nett, aber das Duck-Typing-System von Go gefällt mir deutlich besser.

Was mir überhaupt nicht in den Kopf will und mE eine große Fehlerquelle darstellt, ist die merkwürdige Copy-Semantik bei Arrays. Und warum Dictionaries by value sind ist mir auch nicht klar.

Insgesamt habe ich den Eindruck, dass in Swift zu viele Konzepte vereint wurden. Sieht irgendwie aus wie ne aufgepimpte Mischung aus Java und Ruby mit ARC.
0
ExMacRabbitPro03.06.14 15:49
phrankster2000
Insgesamt habe ich den Eindruck, dass in Swift zu viele Konzepte vereint wurden. Sieht irgendwie aus wie ne aufgepimpte Mischung aus Java und Ruby mit ARC.

... verquirlt mit ein bisschen JavaScript und C# ... was nich negativ gemeint ist.
Ich denke es ist einfach noch viel zu früh, irgend etwas zu beurteilen. Das ganze Thema "Swift" ist noch mit viel zu vielen Fragezeichen behaftet...
0
ExMacRabbitPro03.06.14 15:57
Ehrlich gesagt ging in allen Berichten zur WWDC Keynote eine gezeigte Sache total unter die ich wirklich für einen großen Durchbruch halte: nämlich Metal. Game Console Graphics Performance auf dem iPad? Das wird einige Leute unruhig machen....
0
Quickmix
Quickmix03.06.14 19:38
ExMacRabbitPro
Ehrlich gesagt ging in allen Berichten zur WWDC Keynote eine gezeigte Sache total unter die ich wirklich für einen großen Durchbruch halte: nämlich Metal. Game Console Graphics Performance auf dem iPad? Das wird einige Leute unruhig machen....

+1
0
Weia
Weia03.06.14 20:56
Was die Fähigkeiten von Swift betrifft, muss man sicher erst mal auf detailliertere Informationen warten und selbst testen.

Was sich aber jetzt schon beurteilen lässt, ist die Syntax, und die empfinde ich als deutliche Verschlechterung.

Ein prominentes Beispiel: Eine aus meiner Sicht herausragende Eigenschaft von Objective-C war die „selbst-dokumentierende“ Lesbarkeit des Codes:

[myShape setNumberOfSides:7 setLengthOfSides:25];

Das ist mehr oder weniger als englischer Satz lesbar, und in seiner Syntax völlig homogen und stringent.

Die Swift-Variante wäre:

myShape.setNumberOfSides(7, setLengthOfSides: 25)

Ja, das kann man auch noch irgendwie lesen, aber die Klarheit ist futsch. Sematisch ist vollkommen unklar, warum setNumberOfSides anders behandelt werden sollte als setLengthOfSides. Es ist wie ein Herabsteigen auf eine niedrigere Abstrakationsebene; die Syntax spiegelt viel mehr von der internen Implementierung als der objektorientierten Abstraktion, dem Objekt eine Nachricht zu senden.

Vor allem könnte man, wenn ich die Dokumentation richtig verstehe (probieren konnte ich es noch nicht) nach Lust und Laune ebenso schreiben:

myShape.setNumberOfSides(7, 25)

Sollte das stimmen, müsste man in Zukunft nicht nur mit jeder Menge nicht selbstdokumentierendem Code rechnen, es wäre mir dann auch gar nicht mehr klar, wie sich z.B. setNumberOfSides:setLengthOfSides: von setNumberOfSides:setCircumference: unterscheiden lässt.

Für meinen Geschmack ist hier bei der Syntax leider dasselbe passiert wie bei der GUI von iOS 8 und OS X 10.10: eine unselige Anpassung an das, was im Moment en vogue ist (deutlich sichtbar an so einer Sache wie der Dot-Syntax). Nachdem Apple seinerzeit bei der Umstellung auf OS X am Ende der Versuchung wiederstanden hat, Objective-C durch Java zu ersetzen, verstehe ich nicht recht, wieso es jetzt, unvergleichlich viel fester im Sattel, sein Fähnchen nach dem Wind hängt. Doch fehlender Steve Jobs?

Eine andere Sache, die mir noch völlig unklar ist: Swift kann keine Objective-C-Subklassen erstellen. Heißt das nun, dass bereits alle Cocoa-Frameworks als Swift-Versionen vorliegen? Das kann ich mir angesichts der Code-Mengen nur schwer vorstellen. Wenn aber nicht, dann ist Swift bis auf weiteres doch schon deshalb zum Spielzeug degradiert.
“I don’t care” is such an easy lie. (The Warning, “Satisfied”)
0
lehn03.06.14 21:00
Mendel Kucharzeck
Navier-Stokes
Zu ARC: Das funktioniert recht gut, hast du es mal ausprobiert? Kannst auch mittels Instruments überwachen ob alles "wegfliegt" was nicht mehr benötigt wird.

Ich kenne mich überhaupt nicht aus mit Objective-C und schon gar nicht Swift. Aber wie ARC angeblich funktionieren soll kann nicht stimmen.

Ein Compiler weiss bei der Code Generierung nicht, wann ein Object zur Laufzeit nicht mehr benötigt wird. Wie Navier-Stokes richtig bemerkt, er kann nicht hellsehen. Der Compiler fügt aber automatisch Code hinzu, der das Hoch- und Runterzählen des Referenzecounters übernimmt. Das ist natürlich weniger fehleranfällig als dies von Hand zu tun.
0
Weia
Weia03.06.14 21:04
lehn
Aber wie ARC angeblich funktionieren soll kann nicht stimmen.

Ein Compiler weiss bei der Code Generierung nicht, wann ein Object zur Laufzeit nicht mehr benötigt wird. Wie Navier-Stokes richtig bemerkt, er kann nicht hellsehen. Der Compiler fügt aber automatisch Code hinzu, der das Hoch- und Runterzählen des Referenzecounters übernimmt. Das ist natürlich weniger fehleranfällig als dies von Hand zu tun.
Ja, aber das ist genau die Funktonsweise von ARC. Was soll daran nicht stimmen?
“I don’t care” is such an easy lie. (The Warning, “Satisfied”)
0
lehn03.06.14 21:06
Weia
lehn
Aber wie ARC angeblich funktionieren soll kann nicht stimmen.

Ein Compiler weiss bei der Code Generierung nicht, wann ein Object zur Laufzeit nicht mehr benötigt wird. Wie Navier-Stokes richtig bemerkt, er kann nicht hellsehen. Der Compiler fügt aber automatisch Code hinzu, der das Hoch- und Runterzählen des Referenzecounters übernimmt. Das ist natürlich weniger fehleranfällig als dies von Hand zu tun.
Ja, aber das ist genau die Funktonsweise von ARC. Was soll daran nicht stimmen?

Dass das eben nicht im Artikel steht. Da steht der Compiler erkennt wann das Objekt nicht benötigt wird. Tut er eben nicht. Kann er auch nicht.
0
Weia
Weia03.06.14 21:15
lehn
Dass das eben nicht im Artikel steht. Da steht der Compiler erkennt wann das Objekt nicht benötigt wird.
Naja, das ist eine etwas unscharfe Ausdrucksweise für „Der Compiler erkennt, wo er Code zum Rauf- und Runterzählen einsetzen muss, weil ein Objekt einmal mehr benötigt/nicht benötigt wird.“

Das kann man mit etwas gutem Willen schon so lesen.
“I don’t care” is such an easy lie. (The Warning, “Satisfied”)
0
lehn03.06.14 21:21
Zu wissen, ob etwas zur Compiler-Zeit oder erst dynamisch zur Laufzeit getan wird ist *wesentlich* wenn es um Performance geht.

Wenn man schon speziell über Compiler, Programmiersprachen und Performance schreibt, dann sollten die Grundlagen schon stimmen.
0
Mendel Kucharzeck
Mendel Kucharzeck04.06.14 08:53
lehn
Ich wollte in meinem Artikel keinen Exkurs über die Feinheiten der Funktionsweise von ARC schreiben, sondern über Swift. Wie genau ARC funktioniert, kannst du gerne hier nachlesen:
0
LoCal
LoCal04.06.14 09:49
Weia
Was sich aber jetzt schon beurteilen lässt, ist die Syntax, und die empfinde ich als deutliche Verschlechterung.

Das geht mir genauso.
Ich habe mich gestern abend etwas mehr mit Swift befasst und die Behauptung von Apple, dass Swift wie ObjC selbstdokumentierend ist halte ich für falsch.

Alleine schon, weil die Namen der Parameter optional werden. Denn das bedeutet nichts anderes, das sich viele Entwickler dazu hinreissen lassen, die Namen einfach wegzulassen.
Wenn ich eine Schulung halte, dann mache ich meinen Teilnehmer gerade am Beispielen wie UIColor

[UIColor colorWithRed:0.38f green:0.54f blue:0.83f alpha:1.0f];

klar, wie klar ObjC doch ist.
Die Sache mit den Klammern verwirrt schon am 2 Tag keinen mehr.

Auch die Sache mit den Optionals klingt im ersten Moment gut, aber ich stelle mal die steile These auf, dass viele Entwickler die zu oft und falsch einsetzten... einfach aus Faulheit.

Ich werde keine schwierigkeiten haben, mit Swift zu arbeiten und werde es auch parallel zu ObjC einsetzen, aber ich glaube schon, dass bis min OS X10.11/iOS 9 oder gar OS X 10.12/iOS 10 ObjC noch die Hauptsprache ist.
Ich hab zwar keine Lösung, doch ich bewundere dein Problem
0
lehn04.06.14 10:02
Mendel Kucharzeck
lehn
Ich wollte in meinem Artikel keinen Exkurs über die Feinheiten der Funktionsweise von ARC schreiben, sondern über Swift.

Muss ja kein Exkurs sein. Vor allem sollte es aber nicht falsch sein. Ist ja so wie wenn man Kindern Sachen wie den Regenbogen oder den blauen Himmel falsch erklärt. Dann kann man es gleich lassen.

Ich habe mich noch nie mit Objective-C beschäftigt. Aber wenn man bei einem Artikel gleich über Dinge stolpert, die unmöglich so funktionieren können, dann weiß man nicht was vom Rest zu halten ist.

Schau doch mal bei Wikipedia, wie man das Konzept in zwei Sätzen vereinfacht *aber immer noch richtig* erklärt.
0
Mecki
Mecki04.06.14 10:30
Apple schweigt sich momentan noch darüber aus, wann neue Programmierschnittstellen nicht mehr für Objective-C, sondern nur noch für Swift zur Verfügung stehen.
Wer hat bitte wo behauptet, dass das überhaupt irgendwann der Fall sein wird? Apple hatte auch mal Java als vollwertige Sprache unterstützt (mit direkter Cocoa Anbindung) und dann doch wieder entsorgt.

Und zu Tupeln:

Das Problem an Tuples sind, dass die Bedeutung von Werten sich nur über ihre Position im Tuple ergibt. Da kann man genauso gut Arrays zurück geben (ja, ja, die müssten dann auf dem Heap gealloced werden, schon klar, ich meine vom Konzept her).
func getGasPrices() -> (Double, Double, Double) {
    return (3.59, 3.69, 3.79)
}
Mal abgesehen davon, dass jeder Azubi im ersten Jahr lernt, dass man niemals float/double benutzt für Geldbeträge, habe ich hier drei Preise... und welcher ist jetzt bitte was?
typedef struct {
        double super;
        double superPlus;
        double diesel;
} GasPrices;

// ...

- (GasPrices)getGasPrices
{
        return (GasPrices){3.59, 3.69, 3.79};
        // Alternativ geht auch:
        // return (GasPrices){ 
        //    .super=3.59, 
        //    .superPlus=3.69, 
        //    .diesel=3.79
        //};
        // In dem Fall kann man die Preise auch in
        // einer andere Reihenfolge angeben.
}

// ...

printf("Preis für Super Plus ist %f.\n", 
    [obj getGasPrices].superPlus);
Das ist alles valides C (ISO konform), bis auf die Obj-C Methode (hier müsste man in C einen Funktion verweden)
0
zonk04.06.14 12:01
Properties (Punkt-Notation beim Zugriff auf Instanz-Variablen von Objekten, beispielsweise meinObjekt.wert=5 statt [meinObjekt setWert:5])
Was haben properties mit der Punkt Notation zu tun? Rein gar nichts.
0
PaulMuadDib04.06.14 22:21
lehn
Ich habe mich noch nie mit Objective-C beschäftigt. Aber wenn man bei einem Artikel gleich über Dinge stolpert, die unmöglich so funktionieren können, dann weiß man nicht was vom Rest zu halten ist.
An Deiner Stelle würde ich mir die entsprechenden Tools starten, Code schreiben und gucken. Oder nix mehr sagen.

PS: Wo ist denn so eine Stelle?
0
lehn04.06.14 23:04
PaulMuadDib
lehn
Ich habe mich noch nie mit Objective-C beschäftigt. Aber wenn man bei einem Artikel gleich über Dinge stolpert, die unmöglich so funktionieren können, dann weiß man nicht was vom Rest zu halten ist.
An Deiner Stelle würde ich mir die entsprechenden Tools starten, Code schreiben und gucken. Oder nix mehr sagen.

PS: Wo ist denn so eine Stelle?

Also ich verstehe schon wie ARC funktioniert. Da muss ich nichts ausprobieren und mit Tools rumspielen. Scheint aber der neue Informatiker Trend zu sein. Alles ein bisschen verstehen, probieren, rumspielen und hoffen dass es klappt. Programmieren wird zu Voodoo-Alchemie-Hexerei.

Es geht darum, dass ARC nicht so funktioniert wie im Artikel behauptet wird. Was genau falsch ist habe ich genau beschrieben.
0
PaulMuadDib04.06.14 23:11
lehn
Es geht darum, dass ARC aber nicht so funktioniert wie im Artikel behauptet wird.
Wenn dem so wäre, dann müsste sich doch irgendwo Nachweise darüber geben. Ansonsten bleibt es eine Behauptung.
0
lehn04.06.14 23:30
PaulMuadDib
lehn
Es geht darum, dass ARC aber nicht so funktioniert wie im Artikel behauptet wird.
Wenn dem so wäre, dann müsste sich doch irgendwo Nachweise darüber geben. Ansonsten bleibt es eine Behauptung.

Sowohl im Link von Mendel (s.o.) als auch bei Wikipedia sind die Nachweise. Es hat mir ja auch keiner (der sich mit der Materie auskennt) inhaltlich widersprochen oder meine Aussage in Frage gestellt. Wenn man sich ein bisschen damit auskennt wie ein Compiler funktioniert ist die Sache auch klar.

Es geht um die grundsätzliche Frage, ob man Leuten die vom Programmieren keine Ahnung hat das richtig oder "halb-richtig" beschreiben soll. Siehe mein Vergleich mit der "Erklärung für Kinder" bei Regenbögen.
0
Weia
Weia05.06.14 03:31
Apple schweigt sich momentan noch darüber aus, wann neue Programmierschnittstellen nicht mehr für Objective-C, sondern nur noch für Swift zur Verfügung stehen.
Laut Chefentwickler von Swift wird das gar nicht der Fall sein:
“I don’t care” is such an easy lie. (The Warning, “Satisfied”)
0

Kommentieren

Sie müssen sich einloggen, um die News kommentieren zu können.