JP5425715B2 - プログラム実行方法、システム及びプログラム - Google Patents
プログラム実行方法、システム及びプログラム Download PDFInfo
- Publication number
- JP5425715B2 JP5425715B2 JP2010128092A JP2010128092A JP5425715B2 JP 5425715 B2 JP5425715 B2 JP 5425715B2 JP 2010128092 A JP2010128092 A JP 2010128092A JP 2010128092 A JP2010128092 A JP 2010128092A JP 5425715 B2 JP5425715 B2 JP 5425715B2
- Authority
- JP
- Japan
- Prior art keywords
- class
- programming language
- program
- php
- property
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Description
<?php
...
$map = new Java("java.util.HashMap");
$map->put("title","Java Bridge");
...
echo $map->get("title")."\n";
...
?>
PHPのクラスCに対応してJava(R)のクラスC'を生成するステップにおいては、
a) クラスC'はクラスB'をスーパークラスとする(extendsする)ように宣言し、
b) PHPのクラスの各プロパティ宣言に対応してそれぞれJava(R)のクラスにフィールドを用意し、
c) 上記インターフェース・クラスI(p)を実装する(implementsする)ようにJava(R)のクラスを宣言して、当該インターフェースに備わったメソッドの実装として、Java(R)のフィールドへのアクセスとしてプロパティ・アクセスのコードを備えさせることにより、インターフェースを通じたプロパティアクセスを可能にするステップが実行される。
a) アクセスされているプロパティpに対応するインターフェース・クラスI(p)を実装している場合には、そのオブジェクトの当該インターフェース経由で高速なプロパティ・アクセスのためのメソッド呼び出しを行うステップと、
b) 実装していない場合には、従来の表探索などの手法による低速なプロパティ・アクセスを行うステップによりコード生成時に未知の型のオブジェクトへのインターフェースを通じた高速なフィールドアクセスを実現するステップ(実行時プロパティ・インターフェース検査)からなる。
<?php
include "view/C.php"
$o = new C;
$v = $o->p;
?>
但し、view/C.phpは、下記のようなコードだとする。
<?php
class C extends B {
var $p;
}
すると、$v = $o->p; のところは、下記のようなJavaコードとなるように、PHP用バイトコード生成器406によってバイトコードが生成される。
PHPValue v = (o instanceof PropertyHolder_p) ?
((PropertyHolder_p) o).get_p() :
Op.shPROPERTY_R(o,runtime,"p");
すなわち、oが、PropertyHolder_pのインスタンスであるときは、((PropertyHolder_p) o).get_p()が実行され、これはgetterアクセスであるので、相対的に高速である。
Op.shPROPERTY_R(o,runtime,"p")が実行され、これは相対的に時間がかかる。
というのは、shPROPERTY_R()を詳細に書き下すと、
PHPValue shPROPERTY_R(PHPValue o, Runtime r, String propertyName) {
if (o instanceof PHPObject) {
return ((PHPObject) o).getNotDeclared(propertyName);
} else {
....
}
であり、さらに、PHPObjectの宣言は図12の1202のとおりであり、
properties.get(propertyName);
のようなpropertyNameによるハッシュ検索に時間がかかる。
という重い処理の実行を回避することを可能ならしめる。
PHPValue v = (o instanceof PropertyHolder_p) ?
((PropertyHolder_p) o).get_p() :
Op.shPROPERTY_R(o,runtime,"p");
に対応するバイトコードは、次のとおりである。
aload <o>
dup
instanceof PropertyHolder_p
ifeq general
checkcast PropertyHolder_p
invokeinstance PropertyHolder_p.get_p()LPHPValue
goto done
general:
.. Op.shPROPERTY_R(o,runtime,<propertyref p>);
done
astore <v>
304 CPU
306 主記憶
308 ハードディスク・ドライブ
310 キーボード
312 マウス
314 ディスプレイ
316 通信インターフェース
402 オペレーティング・システム
404 Java VM
406 PHP用バイトコード生成器
408 ローダ
410 実行時ライブラリ
412 ソースコード
Claims (9)
- コンピュータの処理によって、クラスのプロパティ宣言を持つ動的スクリプト言語である第1のプログラミング言語のプログラムを、第2のプログラミング言語の実行系上で仮想的に実行するための方法であって、
前記コンピュータの処理によって、前記第1のプログラミング言語の前記プログラムのプロパティ名から一意的に決まるインターフェース・クラスを生成してロードするステップと、
前記コンピュータの処理によって、前記第1のプログラミング言語の前記プログラムの実行中に出現した前記第1のプログラミング言語の第2のクラスに対し、前記第1のプログラミング言語の該第2のクラスが、前記第1のプログラミング言語の第1のクラスを直接継承しているときに、前記第1のプログラミング言語の前記第1のクラスに対応させた前記第2のプログラミング言語の第1のクラスをキーとして、前記第2のプログラミング言語の第1のクラスを継承した前記第2のプログラミング言語の第2のクラスをキャッシュすることにより、動的に作られる前記第1のプログラミング言語の前記プログラム上のクラス階層と対応するように、前記第2のプログラミング言語の実行系上のクラス階層を用意するステップを有し、
前記第1のプログラミング言語の前記プログラムの前記第1及び第2のクラスのプロパティ宣言に対応して、前記第2のプログラミング言語の前記第1及び第2のクラスにフィールドが用意され、
前記インターフェース・クラスを実装するように用意された前記第2のプログラミング言語のクラスにより、前記インターフェース・クラスを通じたプロパティ・アクセス・ステップが可能ならしめられる、
プログラム実行方法。 - 前記インターフェースを通じたプロパティ・アクセス・ステップは、該プロパティに対応するインターフェース・クラスが実装されているかどうかを判断し、もしそうなら、該インターフェース・クラス経由でフィールドへのアクセスを実現するステップを有する、請求項1に記載のプログラム実行方法。
- 前記第1のプログラミング言語がPHPであり、前記第2のプログラミング言語がJava(R)である、請求項1に記載のプログラム実行方法。
- コンピュータの処理によって、クラスのプロパティ宣言を持つ動的スクリプト言語である第1のプログラミング言語のプログラムを、第2のプログラミング言語の実行系上で仮想的に実行するためのプログラムであって、
前記コンピュータに、
前記第1のプログラミング言語の前記プログラムのプロパティ名から一意的に決まるインターフェース・クラスを生成してロードするステップと、
前記第1のプログラミング言語の前記プログラムの実行中に出現した前記第1のプログラミング言語の第2のクラスに対し、前記第1のプログラミング言語の該第2のクラスが、前記第1のプログラミング言語の第1のクラスを直接継承しているときに、前記第1のプログラミング言語の前記第1のクラスに対応させた前記第2のプログラミング言語の第1のクラスをキーとして、前記第2のプログラミング言語の第1のクラスを継承した前記第2のプログラミング言語の第2のクラスをキャッシュすることにより、動的に作られる前記第1のプログラミング言語の前記プログラム上のクラス階層と対応するように、前記第2のプログラミング言語の実行系上のクラス階層を用意するステップを実行させ、
前記第1のプログラミング言語の前記プログラムの前記第1及び第2のクラスのプロパティ宣言に対応して、前記第2のプログラミング言語の前記第1及び第2のクラスにフィールドが用意され、
前記インターフェース・クラスを実装するように用意された前記第2のプログラミング言語のクラスにより、前記インターフェース・クラスを通じたプロパティ・アクセス・ステップが可能ならしめられる、
プログラム実行プログラム。 - 前記インターフェースを通じたプロパティ・アクセス・ステップは、該プロパティに対応するインターフェース・クラスが実装されているかどうかを判断し、もしそうなら、該インターフェース・クラス経由でフィールドへのアクセスを実現するステップを有する、請求項4に記載のプログラム。
- 前記第1のプログラミング言語がPHPであり、前記第2のプログラミング言語がJava(R)である、請求項4に記載のプログラム。
- コンピュータの処理によって、クラスのプロパティ宣言を持つ動的スクリプト言語である第1のプログラミング言語のプログラムを、第2のプログラミング言語の実行系上で仮想的に実行するためのシステムであって、
前記第1のプログラミング言語の前記プログラムのプロパティ名から一意的に決まるインターフェース・クラスを生成してロードする手段と、
前記第1のプログラミング言語の前記プログラムの実行中に出現した前記第1のプログラミング言語の第2のクラスに対し、前記第1のプログラミング言語の該第2のクラスが、前記第1のプログラミング言語の第1のクラスを直接継承しているときに、前記第1のプログラミング言語の前記第1のクラスに対応させた前記第2のプログラミング言語の第1のクラスをキーとして、前記第2のプログラミング言語の第1のクラスを継承した前記第2のプログラミング言語の第2のクラスをキャッシュすることにより、動的に作られる前記第1のプログラミング言語の前記プログラム上のクラス階層と対応するように、前記第2のプログラミング言語の実行系上のクラス階層を用意する手段を有し、
前記第1のプログラミング言語の前記プログラムの前記第1及び第2のクラスのプロパティ宣言に対応して、前記第2のプログラミング言語の前記第1及び第2のクラスにフィールドが用意され、
前記インターフェース・クラスを実装するように用意された前記第2のプログラミング言語のクラスにより、前記インターフェース・クラスを通じたプロパティ・アクセス・ステップが可能ならしめられる、
プログラム実行システム。 - 前記インターフェースを通じたプロパティ・アクセス・ステップは、該プロパティに対応するインターフェース・クラスが実装されているかどうかを判断し、もしそうなら、該インターフェース・クラス経由でフィールドへのアクセスを実現するステップを有する、請求項7に記載のシステム。
- 前記第1のプログラミング言語がPHPであり、前記第2のプログラミング言語がJava(R)である、請求項7に記載のシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010128092A JP5425715B2 (ja) | 2010-06-03 | 2010-06-03 | プログラム実行方法、システム及びプログラム |
US13/151,300 US8806432B2 (en) | 2010-06-03 | 2011-06-02 | Method, system, and program for executing program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010128092A JP5425715B2 (ja) | 2010-06-03 | 2010-06-03 | プログラム実行方法、システム及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011253437A JP2011253437A (ja) | 2011-12-15 |
JP5425715B2 true JP5425715B2 (ja) | 2014-02-26 |
Family
ID=45065484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010128092A Expired - Fee Related JP5425715B2 (ja) | 2010-06-03 | 2010-06-03 | プログラム実行方法、システム及びプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8806432B2 (ja) |
JP (1) | JP5425715B2 (ja) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102339219B (zh) * | 2010-07-20 | 2016-08-24 | 甲骨文国际公司 | 用于支持面向对象脚本工具的系统和方法 |
JP6223002B2 (ja) * | 2013-06-10 | 2017-11-01 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | コンピュータにおけるオブジェクトの処理方法、プログラム及びシステム |
US10120661B2 (en) * | 2015-07-16 | 2018-11-06 | Sugarcrm Inc. | Multi-flavored software execution from a singular code base |
US11044365B1 (en) | 2016-06-23 | 2021-06-22 | 8X8, Inc. | Multi-level programming/data sets with decoupling VoIP communications interface |
US10404759B1 (en) | 2016-06-23 | 2019-09-03 | 8×8, Inc. | Client-specific control of shared telecommunications services |
US10348902B1 (en) | 2016-06-23 | 2019-07-09 | 8X8, Inc. | Template-based management of telecommunications services |
US11412084B1 (en) | 2016-06-23 | 2022-08-09 | 8X8, Inc. | Customization of alerts using telecommunications services |
US11671533B1 (en) | 2016-06-23 | 2023-06-06 | 8X8, Inc. | Programming/data sets via a data-communications server |
CN108376072A (zh) * | 2016-11-14 | 2018-08-07 | 平安科技(深圳)有限公司 | 类名更改方法和装置 |
US10749938B1 (en) * | 2017-06-23 | 2020-08-18 | 8×8, Inc. | Switchboard server using a high-level programming interface |
US10951484B1 (en) | 2017-06-23 | 2021-03-16 | 8X8, Inc. | Customized call model generation and analytics using a high-level programming interface |
US10447861B1 (en) | 2017-06-23 | 2019-10-15 | 8X8, Inc. | Intelligent call handling and routing based on numbering plan area code |
US10425531B1 (en) | 2017-06-23 | 2019-09-24 | 8X8, Inc. | Customized communication lists for data communications systems using high-level programming |
US10846202B2 (en) * | 2018-07-17 | 2020-11-24 | Oracle International Corporation | Multi-language heap analyzer |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4712512B2 (ja) | 2005-10-14 | 2011-06-29 | 富士通株式会社 | プログラム変換プログラム、プログラム変換装置、プログラム変換方法 |
US20080163167A1 (en) | 2006-12-29 | 2008-07-03 | Motorola, Inc. | Incorporating an arbitrary scripting language with native support for java objects |
JP5419033B2 (ja) | 2008-11-21 | 2014-02-19 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 未知のオブジェクトにアクセスする方法 |
US9003380B2 (en) * | 2010-01-12 | 2015-04-07 | Qualcomm Incorporated | Execution of dynamic languages via metadata extraction |
-
2010
- 2010-06-03 JP JP2010128092A patent/JP5425715B2/ja not_active Expired - Fee Related
-
2011
- 2011-06-02 US US13/151,300 patent/US8806432B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2011253437A (ja) | 2011-12-15 |
US20110302557A1 (en) | 2011-12-08 |
US8806432B2 (en) | 2014-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5425715B2 (ja) | プログラム実行方法、システム及びプログラム | |
US11366643B2 (en) | Generating dynamic modular proxies | |
JP5466601B2 (ja) | コード生成方法、システム及びプログラム | |
US7870546B2 (en) | Collaborative classloader system and method | |
US8615750B1 (en) | Optimizing application compiling | |
US20110131556A1 (en) | Method, computer program and computer system for converting source code written in dynamically typed language into target code written in statically typed language and executing target code | |
JP6182160B2 (ja) | 実行中のプロセスへのコードの動的挿入 | |
US11366684B2 (en) | Import mechanism for hardware intrinsics | |
US11726849B2 (en) | Executing a parametric method within a specialized context | |
US20100058338A1 (en) | Callbacks in virtual machines | |
EP2511820A1 (en) | Bypassing user mode redirection | |
US9921858B2 (en) | Apparatus and method for realizing runtime system for programming language | |
US10521200B2 (en) | Unambiguous proxying of interface methods | |
US20050010934A1 (en) | Native code isolation in a multi-tasking java virtual machine | |
US9471341B1 (en) | Optimizing latest user defined class loader | |
US9015728B2 (en) | Methods, apparatus, and systems to access runtime values of object instances | |
JP6223002B2 (ja) | コンピュータにおけるオブジェクトの処理方法、プログラム及びシステム | |
Peck et al. | Ghost: A uniform and general-purpose proxy implementation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130218 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20130723 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131018 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20131105 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131127 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 5425715 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |