パスワードを忘れた? アカウント作成
10317533 story
プログラミング

プログラミング言語間の相互運用性を高める取り組み 29

ストーリー by hylom
C/C++となにか、なら話は早いのだが 部門より
insiderman 曰く、

近年では目的に応じてさまざまなプログラミングが使われるようになっている。そのような状況の下、異なる言語間での相互運用性を高める取り組みが注目されているようだ(本家/.)。

複数の言語を組み合わせてアプリケーションを作るというのは最近では珍しくないが、その場合、「親」となっているプログラムから「子」となっているプログラムをサブルーチンとして呼び出す、という形が一般的だ。しかし、たとえばC++とJavaの組み合わせのように、言語の組み合わせによってはさまざまな障害があり、これが難しい場合がある。

ACM Queueに掲載されている元ネタの論文では、障害の一例としてオブジェクトモデルの違い、メモリモデルの違い、例外処理やエラー処理の違い、ミュータビリティや「副作用」の有無などが挙げられているのだが、残念ながらそれらへの汎用的案対処法は明確には示されていない(個々の障害への対策法は示されているが)。

長らくソフトウェア開発においてはコードの再利用性や保守性などを高める手法が注目されていたが、今後はほかのプログラミング言語と組み合わせて使うための手法などが注目・開発されるのかもしれない。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2013年12月06日 15時34分 (#2507298)

    これって、1996年公開のSWIGの主な機能だよね。
    まあSWIGは、各種スクリプト言語→C or C++ なので、若干限定されてるけど。

  • by Anonymous Coward on 2013年12月06日 15時49分 (#2507307)

    (記事はネイティブプログラムの話だと思うけど、、、)
    複数の言語間で接続するのってCORBAとかなかったけ?

    最近だと、システムとシステムとつなぐのに、プログラムの直接呼び出しではなくて、ウェブAPI等で接続するのが一般的になっている気が。
    メモリやデータベースを直接いじらせなくて済むので、アクセスを制限して、接続を求めてくるシステムを信用する必要がなくて済むし。
    ニコニコ動画なんか、ベースの部分はPHP、メッセージングはC++、大百科はRuby、他のサブシステムはPythonみたいな。
    内部のウェブAPIで統一されてるんでサブシステムは何言語でもOK。

    • by Anonymous Coward on 2013年12月06日 16時28分 (#2507337)

      CORBA以外だと、MicrosoftのDCOMがそうですね。元ネタはCORBAですが。
      あと、XMLベースのSOAPとかもありましたね。

      これらのプロトコルは独自の型システムを持つ大掛かりなものでしたが、複雑すぎて結局使われませんでした。
      いまでは、がんばって包括的なスキームを構築するより、
      個々のアプリをサービスとして設計してウェブAPIで結合するのが一般的になってますね。

      ウェブAPIでは主にテキストベースになりますので、ある意味、古き良きUNIX的なテキスト志向の勝利といえなくもないかな?

      親コメント
      • by Anonymous Coward on 2013年12月06日 17時40分 (#2507394)

        > 複雑すぎて結局使われませんでした

        Mozilla系で使われているXPCOMはCORBA準拠で、C++とJavaScriptを共通のIDL(xpidl)で制御している。今でも。

        あるいは、単純なデータのやりとりなら、最終的にはプロセス間通信すりゃいいわけで、d-busみたいなメッセージバスが屋台骨じゃないかな。速度的な問題はあるだろうけど。あと、今だと、ctypesをスクリプト言語で読むのが流行しているような。

        python-ctypes [python.jp]
        DL::Importer [ruby-lang.org]
        js-ctypes [mozilla.org]
        とりあえず、Cでライブラリを作っておけば、読めないスクリプト言語はない、という感じで。この辺、ヘッダ(*.h)をスクリプト言語に変換する機能とかがあれば猶いいんだろうけれど。

        親コメント
        • by Anonymous Coward on 2013年12月06日 19時36分 (#2507474)

          GnomeもCORBA使ってる。D-BUSも。
          WindowsもターミナルサービスとかDCOM使ってるんじゃないの?
          でもって、さらに遡ればいくつかRPCがあるし。
          でもってXML-RPCとか。

          元記事を踏まえると、密結合するのは色々面倒くさくて、歴史的には疎結合へ流れたってところですか。

          親コメント
      • by Anonymous Coward

        複雑すぎてと言うより、ネットが遅くて分散処理するのは現実的じゃなかった。

    • by Anonymous Coward

      汎用的な話としていっているならば、「ああ、あそこで作ったあの仕組み使いたいなぁ…」っていうときに、公開APIを作ってなかったらいちいちWEB APIを作り、IOコストをかけてリクエストをおくらなきゃいけない。しかも別環境のデータを使わなきゃいけない時にはそれなりに改修を加えたりシなきゃいけない…というのが利便性や要件との適合性の観点で欠点なような…。
      相互のメンテナンススケジュールを意識しあわなきゃいけないとか、やり始めるとそっちはそっちでも問題出てきますよね。

      ところで、元ネタの話し的には、ActiveScriptingって先進的な事やってたよね…という話になるんじゃないかと思ったわけですが、あまり一般的ではないのかしら。

      # VBとRubyをActiveScriptingで結合して作った物を本番に出そうとして上から怒られたなぁという十数年前の事を思い出しつつ、AC

  • by Anonymous Coward on 2013年12月06日 15時46分 (#2507306)

    すべての言語をCLIで動かせば...

    • by Anonymous Coward on 2013年12月06日 16時15分 (#2507331)

      全てのブログラムをC++で書けばいいのだ
      Cの様に低級な操作が出来て、javaやC#の様にメモリー管理を自動化でき、スクリプト言語のように型に依存しないプログラミングも出来る、黒魔術言語

      親コメント
      • Re:CLI (スコア:2, 興味深い)

        by Anonymous Coward on 2013年12月06日 16時50分 (#2507357)

        > 全てのブログラムをC++で書けばいいのだ

        全てC++って、ごく限られたメンバーからなる小規模なプロジェクトならまあまあ合理的ですけど、
        ある程度規模が大きくなると適切な解とはいえないでしょうね。
        C++って、(ほぼC言語に対し上位互換なので仕方ないんですが)C言語の落とし穴の
        ほとんどがある上に、C++特有の落とし穴も沢山あり、おそらく利用者のスキルレベルが
        もっともバラつく言語でしょうから。
        たとえばGoogleって、ある程度以上のサイズの企業の中では、優れた開発者が占める割合が高い
        企業だと思いますし、しかも現行システムの基幹部をC++で構築してきているわけですが、その
        Googleでさえ、以下のような状況のようですから。
        http://blogger.ukai.org/2013/12/code-readability.html [ukai.org]
        こうなるのは、C++という言語の複雑さ、難しさが大きな理由でしょう。

        > 黒魔術言語

        黒魔術というのは、言いえて妙だと思います。
        とても強力で、うまくやるとそこそこコンパクトに書ける言語だというのは間違いないですが、
        スクリプト言語の代替として使うのに適切な言語だとは全く言えないと思います。

        親コメント
        • by Anonymous Coward

          GoがGoogle内部だけでも継続的に使用されて洗練されていくなら、そのうちネイティブ開発でC++を引退させる事も
          できるようになるのかもしれない。言語の浸透には庇護する者が必要だから。
          C++は無茶苦茶複雑なようで、それなりに人の包容力もある言語だけど、やっぱり正しく使いこなすには覚えることが多すぎて
          入門者には勧め辛い。

          他に優れた選択肢がなければね、迷わずC++1択なんだけれど…そりゃ当たり前か。

          • by Anonymous Coward

            GCが有る言語じゃ、C++の代替は無理、メモリー以外のリソースを掴んだオブジェクトはGCの有る言語では管理できない、
            いつ開放されるかプログラマーが管理できないから、

            • by Anonymous Coward

              GCがある言語でも明示的に開放すればいいだけ

      • by Anonymous Coward on 2013年12月06日 18時21分 (#2507434)

        いいかげん制御文くらいは仕様統一してほしいよな
        forとかifとかもう何言語分覚えたかわからん
        つまらん個性を出さなくていいのに、とは思う

        親コメント
  • by Anonymous Coward on 2013年12月06日 16時51分 (#2507361)
    言語間の相互利用っていうと、.NET という最適解が10年前に出てるわけだが、、、
    静的型の言語でも、動的型も、関数型もそのまんま同居できるし、それぞれの言語間に親も子もありませんし。
    • by baldmage (45440) on 2013年12月06日 17時00分 (#2507367) 日記

      宗教上の理由でMS製品を使えないんでしょ

      親コメント
      • by Anonymous Coward on 2013年12月06日 19時27分 (#2507468)

        そのためのMonoだろ。

        親コメント
        • by Anonymous Coward

          オープンソース界隈では毛嫌いしてる人が多いね。個人的にはGTKベースのアプリなんか開発し易くて結構重宝してるんだけど。

      • by Anonymous Coward

        > 宗教上の理由でMS製品を使えないんでしょ

        その場合でも JVM 使うって手もありますね。
        # CLRには設計時から言語独立って目標があったけど、現状見ると、むしろJVMの方が
        # その上で走る言語が多い状況にある印象があるけど、気のせいかしら。

        で、リンク先のACM Queueの記事でも、CLRやJVMは、ちゃんと言及されてますね。

    • by Egtra (38265) on 2013年12月07日 2時56分 (#2507658)

      WinMD (Windows Metadata)もこの種の取り組みですね。型情報を.NETと同じデータ構造で記述・公開して、ただし実装は.NET以外(ネイティブC++)でもできるようにしているというもの。

      私の中でマイクロソフトは、COM、.NETと、多言語での相互利用を昔から大事に考えている印象がある。

      親コメント
    • by Anonymous Coward

      みなさんCLIのせいで
      F#にはnullやダウンキャストが入った
      型推論の完全性も失った
      処女膜から声が出てない

  • Fortran2008程度の機能は、すべての言語が備えるべき。

  • by Anonymous Coward on 2013年12月08日 19時40分 (#2508481)

    pythonなら言語間の相互運用も割と簡単に実装できるんですんが。

    100年後の言語ってどうなっているんでしょうねぇ。

  • by Anonymous Coward on 2013年12月08日 21時41分 (#2508529)

    仕様はどんな感じになるのだろう?
    メモリ間の共有より、プロセス間のメッセージ通信みたいになるの?

  • by Anonymous Coward on 2013年12月09日 10時20分 (#2508695)

    実はGObjectはその為に開発されたんだよね。
    GTK+を知ってる人でもC言語で無理やりオブジェクト指向をする為だけのものと思っている人も
    いるかも知れないけど、実は崇高な理念の下に作られている。
    (実際、PythonとかJavaScriptとかでメソッド毎にラッパーを作らずにGTK+を使えたりしている)
    ただ、無理やりオブジェクト指向をする所でのパフォーマンスの問題とかあって評判が良くないのが悲しいけど…

typodupeerror

未知のハックに一心不乱に取り組んだ結果、私は自然の法則を変えてしまった -- あるハッカー

読み込み中...