オルタナティブ・ブログ > 吉政忠志のベンチャービジネス千里眼 >

IT業界でベンチャービジネスの支援をしている執筆者が日々の活動ログと感じたことを、徒然なるままに書き綴っていきます。

【Cisco IOS vs. JUNOS(前編)】&【(続)Java SE 7 登場】(テクニカル・コラム)

»

皆さん、こんにちは。吉政創成の吉政でございます。弊社のお客様であるCTC教育サービス様が標記のテクニカルコラム2本を収録したメールマガジンを発行しましたので、お伝えします。

今号の内容は以下の通りです。

■ニュース   資料ダウンロード・資料送付申込み サービス開始
■新人研修   CTC教育サービスの新人研修
■トピック   Inst. Tech View~ Cisco IOS vs. JUNOS(前編) ~
■コラム    スーパーエンジニアの独り言 “(続)Java SE 7 登場”

※メルマガのお申し込みは以下をご覧ください。
 http://www.school.ctc-g.co.jp/mailmagazine/index.php

※メルマガの全文は以下をご覧ください。
 ctc201108.pdfをダウンロード

標記テクニカルコラムは以下をそのままお読みください。

◆◇ 『 Inst. Tech View~第5回“Cisco IOS vs. JUNOS”(前編)~ 』 ◇◆

今回のInst. Tech Viewは、ネットワーク機器に搭載されているOSについての話題です。

ネットワーク機器に搭載されているOSと言えば、Cisco Systemsの機器に搭載されているOS「Cisco IOS」が有名です。このコラムの読者にも「Cisco IOSは設定できます」と言う方は多いと思います。

一方、ネットワーク機器のOSとして、Cisco IOS以外に「JUNOS」(ジュノス)と言う名を聞いた、あるいは知っているという方もいらっしゃるかと思います。「JUNOS」とは、Juniper Networksの機器に搭載されているOSの名称です。

Juniper Networks, Inc.は、Cisco Systems, Inc.を退職したメンバーが中心となって1996年に設立されました。まだ設立されてから15年ほどですが、世界の通信キャリア向けルータ市場では、Cisco Systemsに続く第2位のシェアを持っています。Juniper Networksは、元々通信キャリア向けのハイエンドルータを主力商品としていましたが、最近では一般的な企業で使用するスイッチやFirewallなどの販売も行っています。その結果、通信キャリア以外のネットワークでもJUNOSを搭載した機器が導入され、JUNOSと言う言葉が身近になってきました。

しかし、JUNOSが身近になってきたとはいえ、Cisco IOSとはOSの考え方や設定方法も全く異なりますし、初めてJUNOSを使用するエンジニアにとっては敷居が高く感じる面もあるかと思います。

そこで、こちらのコラムではCisco IOSとJUNOSの違いについて、2回に分けてご紹介したいと思います。

◆◇Cisco IOSとJUNOSの違い◆◇

●その1:「コマンドラインインタフェース」
Cisco IOSの設定コマンドは、UNIXやLinux等と異なるCisco IOS独自コマンドになっており、Cisco IOSのコマンド体系を覚える必要があります。一方JUNOSでは、JUNOS独自のコマンド体系を備えているだけではなく、JUNOSからUNIX(シェルモードと呼びます)にアクセスすることも可能です。UNIXコマンドでJUNOSを操作したり、状態を確認(なんとviを立ち上げることも
可能!)することが可能で、UNIX系の技術者にも親しみやすいOSです。

●その2:「設定ファイル」
Cisco IOSでは、設定したコマンドが設定ファイルにそのまま記載されます。一方JUNOSでは、設定したコマンドがC言語のプログラムソースファイルのように記載されます。例えば、設定ファイルのホスト名(CTCT)部分を表示するとそれぞれ以下のようになります。

[Cisco IOSの例]
CTCT# show run
Building configuration...
!
hostname CTCT
!

[JUNOSの例]
CTCT@SRX240# show
## Last changed: 2011-08-06 09:54:32 JST
version 10.0R3.10;
system {
    host-name CTCT;
}

その3~その5は、次回のメルマガでお届けします!

コースの詳細情報はこちら:
http://www.school.ctc-g.co.jp/juniper/index.html

◆◇ 『スーパーエンジニアの独り言 第2回“(続)Java SE 7 登場” 』 ◇◆

今回の話題も前回の続編で、先日7月28日に5年ぶりのメジャーバージョンアップ正式リリースが為された「Java SE 7 (JDK 7)」その続きです。Oracle が Sun Microsystems を買収して最初のメジャーリリースとなります。新機能として搭載が予定されている主要な機能は以下が挙げられます:

◇ もっと新 I/O ("NIO.2") (JSR 203)
◆ 細かな構文変更 (Project Coin) の一部 (JSR 334)
◇ JVMの動的型付け言語のサポート (JSR 292)
◆ G1ガベージコレクタの導入 (Garbage-First GC)
◇ クラスローダの拡張
◆ Unicode 6.0
◇ etc ...

前回ご紹介したのは、非同期入出力サポートされた「NIO.2」と、簡略表記などを可能とする「言語仕様の細かな変更(Project Coin)」でした。

今回取り上げる「Java仮想マシン(JVM)」への機能追加の一つである「動的型付け言語のサポート」は、JVMが更なる汎用プラットフォーム化を目指したものであり、無数にあるプログラミング言語に向けての誘致メッセージとも受け取れる機能であり、Javaの将来を左右する程に特に重要な変更といえましょう。

具体的には「invokedynamic命令」という新しいバイトコードが追加されることを意味しており、このバイトコードがいったい何をするのかは、「呼び出される実際の型に合わせて引数の型変換を試みる。」と、いうことらしいのです。つまり「動的型付け言語のサポート」という名前そのものの機能ですが、JVMにこの機能を搭載するためへの実装はとても困難であったことだと想像されます。
(参照実装プロジェクト "the Da Vinci Machine Project" があります。)

そうして新機能を搭載したJVMが登場したのですが、直接この機能を利用するのは、JVM上で動作する動的型付け言語のコンパイラを実装する方になります。各々の動的言語コンパイラを実装される際に、メソッド呼び出しの「invokedynamic命令」とこれに付随するメソッド・ハンドル(Method Handle)という新しいリンケージ・メカニズムを利用する事により、JVMで高速に動作するバイトコードを生成できるようになるのだそうです。

現在 Javaプラットフォーム上で動作する動的言語としては JRuby を筆頭に、Jython、Beanshell などあり、新機能がこれらコンパイラ開発を加速させる事が予想されます。またJVM上で動作する他の言語としては、Scala, Clojure, Groovy なども Java の有力な後継者として名乗りを挙げています。最近では、チェコ発の "Kotlin"(ロシアの島の名に由来)という新言語も登場しました。曳いては、将来も多種多様な所謂「JVM言語」の利用が期待されるのです。

これら恩恵に与るのは、プログラマのみならず、寧ろインフラエンジニアにこそ、大いに恩恵を賜ると言い換えることが出来るでしょう。

その意味合いとして下層のみならず上層への抽象化度合いを深めることで多様な言語が実行可能な中間層として顕著になれば、各種プログラムを実行するためのデファクト実行環境として更に重要な位置付けがされることになります。
(背景として幾つかの代替候補も成長しつつあるのが現状です。)

ところで Java のキャッチフレーズを覚えていらっしゃるでしょうか?
  "Write Once, Run Anyware."

Java SE 7 からの新キャッチフレーズとして言い換えれば、
  "Multiple Language, One Virtual Machine."

ともいえるかもしれません。

この機能「動的型付け言語のサポート」紹介に関しての補足事項ですが、既にご紹介したように現行では事実上、コンパイラ開発者向けの機能となっています。この機能を Java言語から利用するためには、文法レベルのサポート(とライブラリ)が必要と思われますが、JDK 7では未だ十分ではない様子です。これに関してはJDK 8 で機能追加で為されるとも聞き及んでいます。今後に更に期待して待ちましょう。(Project Lambda の一部になる予定。)

他の新機能についてのご紹介は、また次回ということで。

コースの詳細情報はこちら:

「Java」関連コース
http://www.school.ctc-g.co.jp/java/

「クラウド・仮想化」関連コース
http://www.school.ctc-g.co.jp/cldvir/

Comment(0)