• このエントリーをはてなブックマークに追加

今なら、継続入会で月額会員費が1ヶ月分無料!

MacOS 10.10 Yosemite、新プログラミング言語Swiftが発表!さてさて・・・
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

MacOS 10.10 Yosemite、新プログラミング言語Swiftが発表!さてさて・・・

2014-06-03 08:13
  • 4
  • 6
1dc2ed78a4b6b69a8346a148329498e9619c3d37 shi3zです。

 昨夜はWWDCのKeynoteで眠れない人もいたみたいだけど、新しいiPhoneも新しいMacBookも出なくてちょっと肩すかしだったかな?

 とはいえ、MacOS 10.10の発表はAppleとしてはかなり大きな発表だったし、それ以上に全く新しいプログラミング言語環境Swiftはドギモを抜く、と呼ぶのに相応しい内容だったんじゃないかと思う。

 個人的にはWebGLがついに公式サポートされたことは非常に大きい。
 これでついにgl.enchant.jsが残念な子じゃなくなる!

 まあ詳しい内容はエンガジェかなんかで


 特に目を引くのはSwiftで、長年続いたObjective-Cにさようなら、こんにちはSwift、という話なんだけど、これは驚天動地の発表なんじゃないかと思う。


 というのは、今回、WWDC(世界開発者会議)に来ているのは当然、全てがObjective-Cの開発者たちなわけで、そういう人たちを一同のもとに集めて「ごめん、やっぱObjective-Cは消え行く言語だよ」と言ってるのに等しい。


 Swiftは一見、かなり良さそうな言語に見える(デモをみた感じでは)。


 が、プログラミング言語を変えるというのは、そんな気軽なことでは全くない。


 特にObjective-Cに関しては、iPhoneが登場してから初めて学んだ、という人が大半のはずで、そういう人たちにしてみれば、「たった五年前に覚えたややこしい言語が、もう古くさくなってしまうのか!」というある種の絶望感があるのではないだろうか。


 また、名称の非連続性にも注目したい。Swift。あまりにも名前が新し過ぎる。


 ふつう、プログラミング言語は、ベースとなる言語の名前を一部継承したり、雰囲気を継承したりするものだ。


 例えばAlgolやAPLの次に産まれたB言語、B言語をベースに洗練させたC言語、C言語にオブジェクト指向を加えたObjective-CとC++、C++を洗練させたC#、などだ。Rubyも、Perlから派生しているため宝石の名前がついている。


 ところがSwift。どこも似ていない。
 似たケースではJavaという言語があった。これも本来はC++の拡張系でありながら非連続的な名前だった。

 全く新しい名前にしたことで新しい世界観を築けるチャンスはあるかもしれない。

 そして気になるのが、Objective-CやC言語よりもSwiftが「高速に動作する」ということだ。Engadgetの誤訳でなければ、これはとんでもないことだ。


 本来、そんなことはあり得ない。
 キーノートを直接見たわけではないので、この「高速に動作する」というのが、どういう意味なのかちょっとわからないが、棒グラフが出てるところを見るとなんらかのベンチマークの結果があるのだろう。


 可能性としてあり得るのは、GPUを活用して普通のプログラムが部分的にGPUで実行されるなどだが、普通に考えたらそんなことをしても意味がないし、GPU上で実行できるプログラムも限られるし、仮にもしGPUを利用していたら二倍なんていう速度差ではなくなるのでたぶん違う。


 なぜあり得ないかというと、C言語は本来、最強の言語だからだ。
 プログラミング言語は通常、コンピュータが直接理解できる機械語をどんどん人間が解りやすくしていくものだ。


 機械語から、アセンブリ言語、そしてC言語、C++、Java、Ruby、JavaScriptなど簡単になればなるほどそれは機械語から離れて行くし、簡単になったが故に機械の負担が大きくなる。これが「オーバーヘッド」だ。


 しかし最近の高度化したCPUは、人間が効率的なアセンブリ言語を直接プログラミングすることはかなり難しくなっている。特にIntel系のCPUだとそれが顕著だ。


 そこでC言語程度の抽象化をしたものをコンパイラが機械語に翻訳するときに独自のチューニングを施して最適化して高速に実行するというのが最近の主流だ。それがC言語が最強の言語であるという理由で、iOSだろうがAndroidだろうがLinuxだろうがWIndowsだろうが、OSの根幹の本当に根っこの部分は単なるC言語で書かれている(Objective-CもC++もC言語のコードをそのまま実行できる上位互換性がある)。


 にもかかわらず、C言語よりも「高速」なプログラミング言語環境がSwiftなのだという。
 見た感じは、JavaScriptに近い。

 SwiftがC言語やObejctive-Cよりも「素早く」プログラミングできる環境である、というのはかなり信憑性がある。しかし実行速度がCよりも速いというのはどういうことなのか。


 どうやらそのからくりは、「(C言語ではなく)Obejctive-Cよりも高速」ということらしい。
 それならば合点が行く。


 Objective-CやC++は、元々オブジェクト指向ではないC言語でオブジェクト指向を実現するためのオーバーヘッド(論理的負荷)が掛かっていた。


 その部分を見直せば、確かに(Objective-Cよりは)高速化するのかもしれない、と思ったが、しかしよく読むとSwiftは「Objective-C without C(Objective-CからCを抜いたもの)」らしい。


 ちょっと待て。Cを抜いてオブジェクト指向だけを残したら、オーバーヘッドしか残らないじゃないか。


 それどころか近年のモダンな言語仕様に対応しているらしい。
 どうもわからない。



 すると変態官僚のsakaimaからツッコミが

ba64b2cb613cbc6317d800f25804169e59f93321

 LLVM!そういうのもあった。忘れてた。
 LLVM。かつてはローレベルバーチャルマシンと呼ばれたりしていたが最近はなんの略でもないらしい。

 つまりObjective-Cで書くとLLVM向けに最適化されたコードにコンパイルするのが難しい、ということなのか。それがレガシーか!(だったらLLVMやめればいいのに)
 
 もしくはLLVMやめてるのかな?
 どうもメモリー管理が複雑になりすぎたため、ARC(Automatic Reference Counter:自動参照カウンタ)という仕組みを導入したらしい。ここがひとつのポイントかな・・・・と思ったがARCはObjective-Cにもある機能だ。ううん、なぜ高速化するのかよくわからない。しかもARCは実行時ではなくコンパイル時にメモリ管理するからもともとObjective-Cでも高速らしい。一体どういうことなんだ。


 ベンチマークをよく見てみると、なんとDhrystoneじゃない。つまり整数演算が高速化するわけじゃない。

 比較されていたのは、Complex Object Sort(複雑なオブジェクトのソート)とRC4 Encryption(RC4暗号化)で、どちらもObjective-Cよりかなり高速だ。

 
 Object Sortの場合、再帰呼出しでQuicksortを処理しているとすれば、再帰に強い言語構造(コンパイルしやすい命令系統?)になってるのかなあ。CocoaフレームワークやObjective-Cのオブジェクトを扱えるLLVMに最適化された高級言語をゼロから設計したということなんだろうか。


 RC4がこんなに速いというのはObjective-CとSwiftでどのようなプログラムの書き方に差が出るのかみないことにはなんとも言えない。しかもなぜわざわざアルゴリズム非公開の暗号化アルゴリズムでベンチマークをとったのだろうか。「こんなに速いです」と説明するなら、どちらの言語でもどのように書いたプログラムがどのように高速化したのか説明しなければフェアじゃない。RC4のアルゴリズムは事実上公開されてしまっているが、公式には公開できないんじゃなかったっけ?あと、Pythonに比べて100倍速いとかはほとんど意味がない数字なんだけどなぜここでPythonなんだ。というかことは暗にPythonに近い言語なのか?ううむ。本当にわからない。


 しかし最も大切なことがある。
 それは、Objective-Cをニガテとしてきた僕でさえもが、「Swift、オモシロそうじゃん。触ってみたいじゃん」と思わせるに充分な「匂い」を持っていることだ。JavaScript風で超高速。インタラクティブにプログラムが書けるところはBASICやUnityの感覚も感じさせる。ふつう、全く新しいプログラミング言語を「よし、覚えてみるか」と思うまでには相当なハードルがある。なにしろ僕はいまだにObjective-Cで実用的なコードを書いたことがない(書きたくもない)。けど、Swiftは、なにか作ろうかな、と素直に思える素性の良さを感じるのだ。


 なかなかわくわくさせてくれるじゃないか。Apple。

 言語仕様についてのガイドブックがiBooksで既に無償配布されているらしいので、ちょっとこれを読んでみろ、ということなのか。


 モダンで高速。しかもインタラクティブ。まるで夢のような話だが、忘れちゃ行けない。AppleがObjective-Cを捨てようとしたのはコレが初めてじゃない。


 かつてはRubyを開発言語にしようとしていたし、そもそもプログラミング言語というのは一種の信仰のようなものなので、「こっちのほうがいいよ」と言われて「あ、そうですか」とホイホイ乗り換えるわけにはいかない。


 しかし凄い。
 個人的にはMacやiPhoneの新機種やiOSのアップデートよりもこれが一番驚いた。

 NDAに触れない範囲でこのブログでも紹介していきたい。
 次回の電脳空間カウボーイズのネタはこれかな











次回配信予定
  • 2016/09/01
    【機械学習】Chainer vs C++ AVX最終決戦
チャンネル会員ならもっと楽しめる!
  • 会員限定の新着記事が読み放題!※1
  • 動画や生放送などの追加コンテンツが見放題!※2
    • ※1、入会月以降の記事が対象になります。
    • ※2、チャンネルによって、見放題になるコンテンツは異なります。
ブログイメージ
電脳ヒッチハイクガイド
更新頻度: 毎週月曜日
最終更新日:
チャンネル月額: ¥1,080 (税込)

チャンネルに入会して購読

×
オブジェクト指向って、あらかじめ用意されている部品を使って組み立てるプラモデルのようなものですかね?
27ヶ月前
×
ライブで見てましたが、構文をシンプルにさせてLLVM 担当の最適化部分をでかくする、という風に捉えました。
なので、アプリをデバッグ実行しながらのプロファイリング値がリアルタイムにXCode エディタ上に出てくるところなんか、ちょいとビックリでした(マシン語での実行部分がリアルタイムでソース行番号までバックトラックできないと実現できなさそう)。感触的にベターC#(LLVM と.NETの近さから)ですね。
仮想マシンとの連携が密にできる、っていうメリットを享受できてる感じ。
27ヶ月前
×
JavaScript(ES6)に似てますね。
この発表は実はJSerにとって非常に嬉しいものでした。
JSは現在過渡期を迎えており、新しい機能がどんどん入っています。
例えば演算子オーバーロード等も、あと1,2年以内には概形が決められることになりますが、
その時Swift及びAppleの意見が参考になるからです。
27ヶ月前
×
あと、多値を返せるってところに、ややGOへのジャブ感がw
27ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。