JP5936118B2 - コード変換方法、プログラム及びシステム - Google Patents
コード変換方法、プログラム及びシステム Download PDFInfo
- Publication number
- JP5936118B2 JP5936118B2 JP2012093355A JP2012093355A JP5936118B2 JP 5936118 B2 JP5936118 B2 JP 5936118B2 JP 2012093355 A JP2012093355 A JP 2012093355A JP 2012093355 A JP2012093355 A JP 2012093355A JP 5936118 B2 JP5936118 B2 JP 5936118B2
- Authority
- JP
- Japan
- Prior art keywords
- code
- iterator
- generator
- statement
- yield
- 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/40—Transformation of program code
- G06F8/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Description
-> filter ($ > 0)
というJaqlのイテレータのステートメントによる処理において、結果イテレータ$outは、図1のような状態遷移図であらわされる。$out.next()は例えば、前回が$.bの読み出しで終われば、次の読み出しは$.cのところから再開する。このような処理は既存のコンパイラでは処理しにくい。というのは、$out.next()のコールサイトが、制御フローがジョインする場所になってしまうからである。
iter -> transform e ⇒ for (x : iter) {yield e(x)}
iter -> expand e ⇒ for (x : iter) {for (y : e(x)) {yield y}}
iter -> filter e ⇒ for (x : iter) {if (e(x)) yield y}
iter -> union other ⇒ for (x : iter) {yield x}; for (x : other) {yield x}
iter -> group by key into agg ⇒
Map m;
for (x : iter) {
if (m.contains(key(x)) {m.put(key(x), agg(m.get(key(x)), x))}
else {m.put(key(x), x)}}
for ((k,v) : map) {yield v}
iter -> tee e ⇒ for (x : iter) {e(x); yield x}
iter -> top k ⇒ int c = 0; for (x : iter) {if (c++ >= k) return; yield x}
if e then iter1 else iter2 ⇒
if e {for (x : iter1) {yield x}} else {for ( x: iter2) {yield x}}
[e0, e1, ..] ⇒ yield e0; yield e1; …
next() {
do {
if (this.cur == null) {
this.cur = $in.next();
if (this.cur == null) return null;
this.index = 0;
}
if (this.index == 0) x = this.cur.a;
if (this.index == 1) x = this.cur.b;
if (this.index == 2) x = this.cur.c;
if (this.index == 3) x = this.cur.d;
this.index++;
if (this.index == 4) {
this.cur = null;
}
} while(x > 0);
return x;
}
for (cur in $in) {
if (cur.a > 0) yield cur.a;
if (cur.b > 0) yield cur.b;
if (cur.c > 0) yield cur.c;
if (cur.d > 0) yield cur.d;
}
先ず、イテレータをジェネレータに変換した次のようなコードがあるとする。
for (JsonValue x : in ) {
if ( toInt(x) > 0) {
yield x;
yield x;
yield x;
}
}
return;
for (sonValue x : out ) {
println(x);
}
for (JsonValue x : in ) {
if ( toInt(x) > 0) {
println(x);
println(x);
println(x);
}
}
return;
206 ジョブ・トラッカ
210a、・・・、210n ラック型サーバ
212 クライアント・コンピュータ
304 ソースコード
306 変換モジュール
308 中間言語コード
310 コンパイラ
Claims (18)
- コンピュータの処理により、イテレータを用いて入力されたデータのデータ変換を記述可能なプログラミング言語を処理する方法であって、
前記プログラミング言語のイテレータのコードを、ジェネレータをオペレータとして含む中間言語上のジェネレータで記述されたコード(以下、ジェネレータ記述コードという)に変換するステップであって、前記イテレータのコード中の各ステートメントを読み出して、各ステートメントが所定のイテレータ部分式であることに応じて当該部分式を再帰的に処理してジェネレータ記述コードに変換し、当該再帰的に処理して変換された各ジェネレータ記述コードが1以上のyield文を含むように、当該yield文を挿入するステップを含む、前記変換するステップと、
消費側のコードを読み込むステップと、
前記消費側のコードと前記ジェネレータ記述コードとの間でインライン置換によるコード書き換えを行うステップと
を含む、前記方法。 - 前記イテレータを含むプログラミング言語においてオペレータが連結して書かれており、前記連結された一連のオペレータが前記インライン置換によって単一のコードにコンパイルされる、請求項1に記載の方法。
- 前記コード書き換えから得られたプログラムの為のコンパイラを使用して前記コード書き換えから得られたプログラムをコンパイルするステップをさらに含む、請求項1又は2に記載の方法。
- 前記イテレータを含むプログラミング言語がJaqlであり、
前記変換されたコードを更に、Javaバイトコードに変換するステップをさらに含む、請求項1〜3のいずれか一項に記載の方法。 - 前記インライン置換によるコード書き換えを行うステップが、ジェネレータgがfor (x:g) {e}文の形で消費されるとき、gの定義中のyieldの出現をeで置き換えたもので、for (x:g) {e}自体を置き換えるステップを含む、請求項1〜4のいずれか一項に記載の方法。
- 前記各ステップが、Hadoopフレームワークにおける、ジョブ・トラッカ又はタスク・トラッカで実行される、請求項1〜5のいずれか一項に記載の方法。
- コンピュータの処理により、イテレータを用いて入力されたデータのデータ変換を記述可能なプログラミング言語を処理するプログラムであって、前記コンピュータに、
前記プログラミング言語のイテレータのコードを、ジェネレータをオペレータとして含む中間言語上のジェネレータで記述されたコード(以下、ジェネレータ記述コードという)に変換するステップであって、前記イテレータのコード中の各ステートメントを読み出して、各ステートメントが所定のイテレータ部分式であることに応じて当該部分式を再帰的に処理してジェネレータ記述コードに変換し、当該再帰的に処理して変換された各ジェネレータ記述コードが1以上のyield文を含むように、当該yield文を挿入するステップを含む、前記変換するステップと、
消費側のコードを読み込むステップと、
前記消費側のコードと前記ジェネレータ記述コードとの間でインライン置換によるコード書き換えを行うステップと
を実行させる、前記プログラム。 - 前記イテレータを含むプログラミング言語においてオペレータが連結して書かれており、前記連結された一連のオペレータが前記インライン置換によって単一のコードにコンパイルされる、請求項7に記載のプログラム。
- 前記コンピュータに、前記コード書き換えから得られたプログラムの為のコンパイラを使用して前記コード書き換えから得られたプログラムをコンパイルするステップをさらに実行させる、請求項7〜8のいずれか一項に記載のプログラム。
- 前記イテレータを含むプログラミング言語がJaqlであり、
前記コンピュータに、前記変換されたコードを更に、Javaバイトコードに変換するステップをさらに実行させる、請求項7〜9のいずれか一項に記載のプログラム。 - 前記インライン置換によるコード書き換えを行うステップが、ジェネレータgがfor (x:g) {e}文の形で消費されるとき、gの定義中のyieldの出現をeで置き換えたもので、for (x:g) {e}自体を置き換えるステップを含む、請求項7〜10のいずれか一項に記載のプログラム。
- 前記各ステップが、Hadoopフレームワークにおける、ジョブ・トラッカ又はタスク・トラッカで実行される、請求項7〜11のいずれか一項に記載のプログラム。
- コンピュータの処理により、イテレータを用いて入力されたデータのデータ変換を記述可能なプログラミング言語を処理するシステムであって、
前記プログラミング言語のイテレータのコードを、ジェネレータをオペレータとして含む中間言語上のジェネレータで記述されたコード(以下、ジェネレータ記述コードという)に変換する手段であって、前記イテレータのコード中の各ステートメントを読み出して、各ステートメントが所定のイテレータ部分式であることに応じて当該部分式を再帰的に処理してジェネレータ記述コードに変換し、当該再帰的に処理して変換された各ジェネレータ記述コードが1以上のyield文を含むように、当該yield文を挿入する、前記変換する手段と、
消費側のコードを読み込む手段と、
前記消費側のコードと前記ジェネレータ記述コードとの間でインライン置換によるコード書き換えを行う手段と
を備えている、前記システム。 - 前記イテレータを含むプログラミング言語においてオペレータが連結して書かれており、前記連結された一連のオペレータが前記インライン置換によって単一のコードにコンパイルされる、請求項13に記載のシステム。
- 前記コード書き換えから得られたプログラムの為のコンパイラを使用して前記コード書き換えから得られたプログラムをコンパイルするコンパイル手段をさらに含む、請求項13又は14に記載のシステム。
- 前記イテレータを含むプログラミング言語がJaqlであり、
前記変換されたコードを更に、Javaバイトコードに変換する手段をさらに備えている、請求項13〜15のいずれか一項に記載のシステム。 - 前記インライン置換によるコード書き換えを行う手段が、ジェネレータgがfor (x:g) {e}文の形で消費されるとき、gの定義中のyieldの出現をeで置き換えたもので、for (x:g) {e}自体を置き換える手段を含む、請求項13〜15のいずれか一項に記載のシステム。
- 前記各ステップが、Hadoopフレームワークにおける、ジョブ・トラッカ又はタスク・トラッカで実行される、請求項13〜15のいずれか一項に記載のシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012093355A JP5936118B2 (ja) | 2012-04-16 | 2012-04-16 | コード変換方法、プログラム及びシステム |
US13/835,849 US9280332B2 (en) | 2012-04-16 | 2013-03-15 | Code converting method, program, and system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012093355A JP5936118B2 (ja) | 2012-04-16 | 2012-04-16 | コード変換方法、プログラム及びシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2013222303A JP2013222303A (ja) | 2013-10-28 |
JP5936118B2 true JP5936118B2 (ja) | 2016-06-15 |
Family
ID=49513640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012093355A Expired - Fee Related JP5936118B2 (ja) | 2012-04-16 | 2012-04-16 | コード変換方法、プログラム及びシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US9280332B2 (ja) |
JP (1) | JP5936118B2 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10853356B1 (en) | 2014-06-20 | 2020-12-01 | Amazon Technologies, Inc. | Persistent metadata catalog |
US9910888B2 (en) | 2014-10-01 | 2018-03-06 | Red Hat, Inc. | Map-reduce job virtualization |
CN104391957A (zh) * | 2014-12-01 | 2015-03-04 | 浪潮电子信息产业股份有限公司 | 一种针对混合型大数据处理系统的数据交互分析方法 |
JP6516110B2 (ja) | 2014-12-01 | 2019-05-22 | 日本電気株式会社 | SQL−on−Hadoopシステムにおける複数クエリ最適化 |
US10198185B2 (en) | 2014-12-31 | 2019-02-05 | Samsung Electronics Co., Ltd. | Computing system with processing and method of operation thereof |
US10216501B2 (en) * | 2015-06-04 | 2019-02-26 | The Mathworks, Inc. | Generating code in statically typed programming languages for dynamically typed array-based language |
US9881055B1 (en) * | 2015-10-13 | 2018-01-30 | Numerify, Inc. | Language conversion based on S-expression tabular structure |
US9959295B1 (en) * | 2015-10-13 | 2018-05-01 | Numerify, Inc. | S-expression based computation of lineage and change impact analysis |
US11677809B2 (en) * | 2015-10-15 | 2023-06-13 | Usablenet Inc. | Methods for transforming a server side template into a client side template and devices thereof |
US10496768B2 (en) | 2016-09-01 | 2019-12-03 | Paypal, Inc. | Simulating a production environment using distributed computing technologies |
US10459829B2 (en) * | 2017-06-07 | 2019-10-29 | M/S. Cigniti Technologies Limited | Overall test tool migration pipeline |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3956131B2 (ja) * | 2002-12-26 | 2007-08-08 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラム変換装置、プログラム変換方法及びプログラム |
US7937694B2 (en) * | 2004-02-13 | 2011-05-03 | Microsoft Corporation | Fast flattening of nested streams |
US7921418B2 (en) * | 2006-08-15 | 2011-04-05 | International Business Machines Corporation | Compile time evaluation of library functions |
US8914782B2 (en) * | 2010-11-10 | 2014-12-16 | Microsoft Corporation | Optimization of declarative queries |
US9372890B2 (en) * | 2011-11-23 | 2016-06-21 | Infosys Technologies, Ltd. | Methods, systems, and computer-readable media for providing a query layer for cloud databases |
-
2012
- 2012-04-16 JP JP2012093355A patent/JP5936118B2/ja not_active Expired - Fee Related
-
2013
- 2013-03-15 US US13/835,849 patent/US9280332B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20130298111A1 (en) | 2013-11-07 |
JP2013222303A (ja) | 2013-10-28 |
US9280332B2 (en) | 2016-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5936118B2 (ja) | コード変換方法、プログラム及びシステム | |
US10417036B2 (en) | Evaluation techniques for fast access to structured, semi-structured and unstructured data using a virtual machine that provides support for dynamic code generation | |
US9645803B2 (en) | Methods and systems for forming an adjusted perform range | |
US8607206B2 (en) | Automatic synchronous-to-asynchronous software application converter | |
US9684493B2 (en) | R-language integration with a declarative machine learning language | |
US9733912B2 (en) | Optimizing intermediate representation of script code for fast path execution | |
US9552195B2 (en) | Enlarging control regions to optimize script code compilation | |
US20090328016A1 (en) | Generalized expression trees | |
US9152400B2 (en) | Eliminating redundant reference count operations in intermediate representation of script code | |
JP2011065220A (ja) | コンパイラ・プログラム、コンパイル方法及びコンピュータ・システム | |
US20160283400A1 (en) | Cache management in a multi-threaded environment | |
JP7344259B2 (ja) | 深層学習フレームワークにおけるパターン変換方法、装置、電子デバイス、コンピューター記憶媒体およびコンピュータープログラム製品 | |
US10684873B2 (en) | Efficient data decoding using runtime specialization | |
US11599478B2 (en) | Reduced instructions to generate global variable addresses | |
Komatsu et al. | Translation of large-scale simulation codes for an OpenACC platform using the Xevolver framework | |
Li et al. | J2M: a Java to MapReduce translator for cloud computing | |
Kobeissi et al. | Rec2poly: Converting recursions to polyhedral optimized loops using an inspector-executor strategy | |
Komatsu et al. | Xevolver: A code transformation framework for separation of system‐awareness from application codes | |
Noack et al. | KART–a runtime compilation library for improving HPC application performance | |
Chang et al. | An approach of performance comparisons with OpenMP and CUDA parallel programming on multicore systems | |
Doroshenko et al. | Automated design of parallel programs for heterogeneous platforms using algebra-algorithmic tools | |
Jo et al. | Memory-Access-Pattern Analysis Techniques for OpenCL Kernels | |
US8621447B1 (en) | Systems and methods for dynamic struct variable creation including inline declaration with dynamic keys | |
Lin et al. | Vector data flow analysis for SIMD optimizations on OpenCL programs | |
Komatsu et al. | Directive translation for various HPC systems using the Xevolver framework |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20141001 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20151014 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20151110 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20160204 Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20160204 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20160204 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20160204 |
|
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: 20160408 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20160411 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20160411 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160428 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5936118 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |