Fermer le menu
 

Swift, un langage conçu par Apple pour Apple

Anthony Nelzin-... | | 19:00 |  93

Avec la nouvelle interface d’OS X Yosemite, les extensions d’iOS 8 et la « continuité » liant les deux, on en oublierait presque qu’Apple a présenté rien de moins qu’un nouveau langage de programmation. Swift, c’est son nom, est présenté comme « un Objective-C sans le barda du C ». Et il y a de ça.

Que les choses soient claires, Swift n’a pas été conçu comme un langage de programmation « universel » : il a clairement été conçu « pour le développement sur OS X et iOS », « pour Cocoa et Cocoa Touch ». Il repose sur la base du C et de l’Objective-C, « sans la contrainte de la compatibilité avec le C », mais avec toutes les technologies développées par les ingénieurs Apple ces dernières années (dont ARC et LLVM).

Swift se veut « moderne, sûr, interactif et performant ». Moderne, il l’est par sa syntaxe concise : oubliés les headers, envolés les points-virgules, Swift rappelle immanquablement les langages de script — Apple ne se lasse d’ailleurs pas de le comparer avec Python. Le simple exemple du « Hello world » est parlant. Ce code Objective-C :

#import <stdio.h>
#import <Foundation/Foundation.h>
 
int main(void)
{
    NSLog(@"Hello, world!\n");
    return 0;
}

Est équivalent à ce code Swift :

println("Hello world!")

La déduction du typage, l’interpolation de variables, les clôtures, les tuples et bien d’autres fonctions participent à cet allégement de la syntaxe du Swift. Il est incontestablement élégant, même si la concision va souvent de pair avec une certaine opacité. Apple fournit cependant une épaisse documentation d’une clarté exemplaire qui permettra aux développeurs de rapidement comprendre les particularités de Swift.

Apple assure avoir « des objectifs très ambitieux » pour Swift, en allant jusqu’à évoquer un système d’exploitation qui serait codé en Swift. Reste que pour le moment, il est d’abord et avant tout conçu pour développer des applications simples, ou les pans les plus simples d’une application.

Mais dans le même temps, l’idée est qu’il puisse se substituer de plus en plus à l’Objective-C et au C : le C sera toujours utilisé pour coder au plus près du matériel, mais il n’y a aucune raison de ne pas utiliser Swift pour le reste. Il peut donc déjà exploiter toute la richesse de Cocoa et Cocoa Touch, et il ne serait pas étonnant que les futures APIs d’OS X et iOS lui soient réservées.

LLVM a été particulièrement travaillé pour optimiser au mieux le code natif ARM ou x86-64 produit par la compilation d’un projet Swift — mais comme tous les autres langages « modernes », c’est sa syntaxe même qui assure que le développeur ne commette pas certaines erreurs communes ou tombe dans des pièges. Facilité d’appréhension du code et rapidité d’exécution vont main dans la main, alors qu’elles ont traditionnellement tendance à s’opposer.

Mais un des aspects les plus intéressants et les plus importants de Swift est sans doute son interactivité, qui rappelle celle des grandes heures du Lisp. En mode playground, le code Swift est compilé à la volée pour procurer un retour instantané au développeur — quelque chose de « normal » pour les développeurs web, et dont l’implémentation rappelle les travaux de l’ancien ingénieur d’Apple Bret Victor.

Un tutoriel de découverte de Swift qui montre tout l'intérêt du playground. Via @GeekUnivers.

Cette fonction est extrêmement utile dans l’apprentissage du Swift, tout autant pour le développeur chevronné que le développeur débutant. Apple s’offre là l’occasion d’attirer de nouveaux publics à la programmation, donc de renforcer son écosystème. Et de le renforcer à long terme, puisque les développeurs Swift seront avant tout des développeurs OS X et iOS. Un langage conçu par Apple pour Apple, en somme.

GitHub regorge déjà de projets développés en Swift. Notre développeur Nyx0uf s’est fait la main sur ce langage avec son éditeur de texte mimant les fonctions de Writer Pro : vous pouvez télécharger la version Objective-C ici, et la version Swift là, de quoi comparer les deux.

Catégories: 
Tags : 

Les derniers dossiers

Ailleurs sur le Web


93 Commentaires Signaler un abus dans les commentaires

avatar rondex8002 03/06/2014 - 19:40

Je ne suis pas développeur. Je ne connais pas grand-chose à la programmation, à part des mémoires et une thèse avec LaTeX, si on peut vraiment appeler cela de la programmation !

Bref, il existe une base commune entre OS X et iOS. Pour créer une application pour iOS ou pour Mac, il y a une grosse différence de programmation ? Par exemple pour quelqu'un qui souhaite développer la même appli sur Mac et sur iOS. Hormis bien sûr que l'interaction avec l'utilisateur ne soit pas la même sur iOS et sur Mac.

Et qu'apporte dans ce cas, ce nouveau langage ?

avatar Hasgarn 04/06/2014 - 13:12

Tu demandes un cours, presque ^^

C'est loin d'être aisé à expliquer, mais en gros, une app OSX est utilisable sous iOS, en se basant sur les fonctions et le moteur de l'application. Par contre, tout l'enrobage et les problématiques de chaque plate forme demanderont un certains nombres de remaniement. La plus grosse barrière de l'un a l'autre est la gestion de la connexion au réseau téléphonique, après l'IHM (Interface Homme Machine) ou interface graphique qui représente le plus gros du travail.
Je passe sur les bonnes pratiques qui diffèrent d'une plate forme à l'autre.

Pour ce qui est de l'apport de Swift, c'est, de ce que j'en vois, une accessibilité accrue. Savoir qu'un mec qui n'y avait jamais touché a su refaire un Flappy Bird en moins de 24h le démontre. Le gars n'est probablement pas un manchot non plus ^^

Du coup, ça va pas être facile de t'expliquer par le menu le pourquoi du comment, mais en gros :
[quote]Pour créer une application pour iOS ou pour Mac, il y a une grosse différence de programmation ?[/quote]
Oui et non. Le moteur peut être semblable, mais il faudra réadapter.

[quote]Et qu'apporte dans ce cas, ce nouveau langage ?[/quote]
Plus facile, plus sur, plus rapide...
C'est top moumoute si ça se vérifie.

avatar Yool66 03/06/2014 - 19:13 via iGeneration pour iOS

Un rapport avec http://swift-lang.org?

Je sais pas si une personne connais le sujet.



avatar John Maynard Keynes 03/06/2014 - 19:20

@Yool66

Ce Swift là est conçu pour relever le défis du parallélisme dans la programmation sur des architectures distribuées.

Apple a étrangement réutilisé le même nom.

avatar tleveque 03/06/2014 - 19:24

Et le logo!!! Avez-vous vu les oiseaux dans leur logo? Le même qu'Apple!!!

avatar Niarlatop 03/06/2014 - 20:20

Swift est le nom d'une espèce d'oiseau, le martinet.
D'où la très relative ressemblance du logo.

avatar iRobot 5S 03/06/2014 - 23:21 via iGeneration pour iOS

@tleveque :
Je trouve que l'oiseau et la couleur ça fait Hunger games (celui dessiné sur le bouquin).

avatar Lemmings 03/06/2014 - 20:23

edit : erreur

avatar Kriskool 03/06/2014 - 19:24 via iGeneration pour iPad

Après les clients, c'est au tour des développeurs de devenir les plus captifs possibles ??? avec ce nouveau langage de programmation aux abords très attrayants mais à terme, si je comprends bien, totalement propriétaire, les développeurs eux aussi ne se retrouveront ils pas dans une belle prison dorée ? Et ensuite devront ils subir les politiques ultérieures d'Apple ?
Je reconnais bien là encore la stratégie fondamentale d'Apple qui a fait son succès jusqu'à présent....

avatar tleveque 03/06/2014 - 19:25

Sauf que l'Objective-C aussi est pas mal propriétaire. (à ce que je sache?). Seul Apple l'utilise.... donc c'est pareil.

avatar amnesic 03/06/2014 - 22:36

Non l'Objective-C est un langage ouvert (aka licence libre)

http://fr.wikipedia.org/wiki/Objective-C

avatar Mithrandir 03/06/2014 - 19:57 via iGeneration pour iOS

@Kriskool :
C'est sûr qu'avec le Java de Google sur Android on n'est pas captif du tout...

avatar FreeDa 03/06/2014 - 19:26 via iGeneration pour iOS

Wahou ! J'ai rien compris ahah ^^ Les devs qui codent parlent entre eux en messages codés :-) Ce que j'ai compris au moins, c'est que cela a l'air de vous plaire, donc tant mieux...

avatar rondex8002 03/06/2014 - 19:38 (edité)

C'est clair. Je suis largué. Déjà en lisant l'article. Pas mieux avec les commentaires. ;-)
Dommage, j'aurai aimé un peu mieux comprendre. À moins que ça ne soit pas vraiment facile à vulgariser.

avatar Silverscreen 03/06/2014 - 19:29 via iGeneration pour iOS

Il y avait un lien indiqué sur l'une des pages web d'Apple dédiées à Swift et renvoyant sur l'"autre" langage. Ils sont visiblement au courant de la possible confusion à Cupertino.

On a quand même impression que maintenant qu'Apple a la masse critique de développeurs qui vont bien, ils vont jouer à fond la carte de ma synergie soft-hard quitte à déborder les standards si nécessaire (Metal pour OpenGl/ES, Swift par rapport aux dérivés du C) quand ceux-ci ont trop de gras (de code conçu pour la retrocompatibilité ou des architectures étrangères à Apple).

C'est la même démarche que Google avec Blink en somme...

avatar free00 03/06/2014 - 19:38

Ah ah, les gens qui vont chercher code swift vont bien rigoler !

avatar babgond 03/06/2014 - 19:40 via iGeneration pour iPad

Dans l'exemple,
En objective-c on affiche : Hello Word!

Comment swift devine qu'il y a un point d'exclamation ?

avatar redchou 05/06/2014 - 12:23

En objective-C cette ligne: NSLog(@"Hello, world!\n");
Aurait pu s'écrire : NSLog(@"Hello, world!");
Le \n est un caractère spécial qui permet d'aller à la ligne, mais un appel de la fonction NSLog va à la ligne automatiquement.

Swift sait qu'il y a un point d'exclamation de la manière que l'Objective-C...
Dans : println("Hello world!")

Entre les " " il y a un point d'exclamation...

En Swift, println() va écrire ce qui est entre guillemet dans une ligne en sortie standard , ici :
Hello World!

avatar pecos 03/06/2014 - 19:43

Hm... A première vue ça a l'air fréquentable Mais j'y vois déjà comme un tout petit problème Ou est passé le point virgule C'est juste pour faire moderne qu'ils ont supprimé ça dans leur nouveau langage ou il y a une nécessité Je dis ça parce que ça aide bien le point virgule Surtout quand on a un écran qui ne fait pas 40000 pixels de large et qu'on a activé le word wrap automatique dans le code Juste pour savoir si on est au bout d'une instruction ou pas Le compilo il s'en fout mais moi comment je fais pour savoir ou commence la nouvelle instruction

Ce texte était écrit pour votre plus grand plaisir en n'utilisant pas le point à la fin des phrases.
...Pour que les non développeurs comprennent ma perplexitude face à du code sans point virgule à la fin des instructions.

Tiens, petite question à ceux qui ont déjà un peu testé : comment fait-on pour écrire un truc du genre

for(int i = 0; i < j; i++){}

Sans les point virgules ????

avatar NicoTupe 03/06/2014 - 19:57

Les points virgules sont pas interdits, ils sont optionnels et justement indispensable quand tu as plusieurs instructions sur la même ligne alors

for(int i = 0; i < j; i++){}

tu l'écriras pareil. Mais tu aurais pu aussi l'écrire (si j'ai bien compris)

for i in 0..j {}

et là plus de points virgules. Après si tu adores les points virgules, optionnel veut dire que tu peux continuer à en mettre partout!

Mais bon on survit très très bien sans points virgules (et même sans parenthèses la plupart du temps... ;))

avatar pecos 03/06/2014 - 20:03

Quand j'ai commencé à programmer, il y a 20 ans, je détestais les points virgules.

C'est sûr que pour débuter, ça peut dérouter, surtout quand c'est un langage qui n'accepte pas l'absence de point virgule et dans un environnement de dev pas aussi bienveillant qu'XCode qui va nous dire immédiatement s'il en manque un (par exemple développer en PHP avec un viel éditeur de texte).

Donc si j'ai bien compris c'est comme en JS : le point virgule est optionnel.
Pourquoi pas...

avatar NicoTupe 03/06/2014 - 20:10

Comme Ruby aussi qui lui permet même d'ommetre les parenthèses et certaines accolades (et on le vit très bien).

JS est sans doute pas le meilleur exemple vu que même si théoriquement il le permet, ça ne permet plus de minimiser le code comme c'est monnaie courante sur les sites web.

avatar redchou 05/06/2014 - 12:28

Tu peux écrire avec la nouvelle ou l'ancienne syntaxe, dans la Doc c'est indiqué:

These two loops do the same thing:

var firstForLoop = 0
for i in 0..3 {
firstForLoop += i
}
firstForLoop // Affiche la valeur de firstForLoop dans le playground

var secondForLoop = 0
for var i = 0; i < 3; ++i {
secondForLoop += 1
}
secondForLoop // Affiche la valeur de secondForLoop dans le playground

- Je me suis permit de commenter deux lignes pour expliquer que le code ci dessus doit être coller dans Xcode en mode playground.

avatar John Maynard Keynes 03/06/2014 - 20:10

../.. réaction un peu vive désolé ;-)

avatar pecos 03/06/2014 - 20:16 (edité)

mmm... t'emballe pas.
J'ai jamais dis que j'étais un fanatique du point virgule.
Mais comme dans l'article, il y a écrit "envolés les points virgules", j'en ai déduit avec raison qu'il n'y en avait pas.

Par ailleurs, en effet, il y a bien des langages qui existent.
Pourquoi un nouveau ?
Le seul risque finalement c'est de se planter royalement en n'intéressant pas grand monde.
Dois-je rappeler qu'objective-C a attendu mac OSX, et dans un grande mesure, iOS, pour prendre son envol ?
Il me semble quand même qu'entre la date de sa sortie sous NEXT et les premiers softs pour mac OSX, il a passé de l'eau sous les ponts.. et pas beaucoup de devs.

Je ne crois pas non plus que les milliers de devs objective C vont passer, la fleur au fusil, à un nouveau langage juste parce qu'Apple le sort.
A moins qu'on y soit contraints et forcés.

En tous cas, moi ça m'excite pas plus que ça.
Je pense qu'il y a beaucoup plus intelligent à faire pour faire venir de nouveaux devs et avoir un langage simple, performant et moderne.

Par exemple, Apple aurait pu nous sortir un bon gros jeu d'APIs cocoa pour JAVA.
Ça m'aurait bien plus émoustillé : mon assez courte expérience de JAVA se limitant au développement d'apps pour Android, j'ai pu constater que si les APIs de Google sont bel et bien mal fichues (je trouve, surtout par rappoort à ce qu'on a dans les APIs cocoa), le langage, lui est particulièrement agréable.

Dommage.

Pages