JP2011508317A5 - - Google Patents
Download PDFInfo
- Publication number
- JP2011508317A5 JP2011508317A5 JP2010539586A JP2010539586A JP2011508317A5 JP 2011508317 A5 JP2011508317 A5 JP 2011508317A5 JP 2010539586 A JP2010539586 A JP 2010539586A JP 2010539586 A JP2010539586 A JP 2010539586A JP 2011508317 A5 JP2011508317 A5 JP 2011508317A5
- Authority
- JP
- Japan
- Prior art keywords
- api
- contract
- application
- assertions
- computer program
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims 25
- 238000004590 computer program Methods 0.000 claims 13
Claims (20)
- 第2のプログラミング言語で記述されたアプリケーションAPIを拡大するための、第1のプログラミング言語で記述されたコントラクトAPI(application programming interface)を有するコンピュータ可読記録媒体であって、前記アプリケーションAPIは1つまたは複数のコントラクトを含み、前記コンピュータ可読記録媒体はコンピュータ実行可能命令を備え、前記コンピュータ実行可能命令は、コンピューティングシステムの1つまたは複数のプロセッサにより実行されるときに前記コンピュータシステムに方法を実施させ、前記方法は、
前記第1のプログラミング言語で記述された前記コントラクトAPIからのコントラクトを用いて前記アプリケーションAPIを拡大するというユーザの意図を示す、前記第2のプログラミング言語で記述されたソフトウェアコードを受け取る動作であって、前記ソフトウェアコードは前記コントラクトAPIへの参照を含み、前記コントラクトは前記アプリケーションAPIの適切な使用を示す1つまたは複数のアサーションを含む動作と、
前記ソフトウェアコード内の前記参照に従って、前記コントラクトAPIの一部にアクセスする動作と、
前記受け取ったソフトウェアコードおよび前記コントラクトAPIの前記参照された部分を前記受け取ったソフトウェアコードの中間言語バージョンにコンパイルする動作であって、前記中間言語バージョンは前記第1のプログラミング言語および前記第2のプログラミング言語の両方に共通の中間言語におけるものであり、前記中間言語バージョンは前記アプリケーションAPIの適切な使用を示す1つまたは複数のアサーションを含む動作と
を含むことを特徴とするコンピュータ可読記録媒体。 - 1つまたは複数のソフトウェアツールを用いて前記コンパイルされた中間言語バージョンにアクセスする動作と、
1つまたは複数のランタイムチェックへの1つまたは複数の参照を前記コントラクトの内の少なくとも1つに挿入して、前記ランタイムチェックが前記対応する参照に従ってアプリケーションコードに注入されることを可能にする動作と
をさらに含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。 - 前記挿入されたランタイムチェックを含む前記中間言語バージョンを実行する動作と、
前記コントラクト内の前記アサーションの内の少なくとも1つが前記中間言語バージョンの実行中に違反されたと判定する動作と、
前記判定に基づき、前記アサーションの内の少なくとも1つが違反されたという表示を与える動作と、
をさらに含むこと特徴とする請求項2に記載の方法を実行するよう構成されたAPIのためのコンピュータプログラム。 - 前記挿入されたランタイムチェックを含む前記中間言語バージョンを実行する動作と、
前記コントラクト内の前記アサーションのいずれも前記中間言語バージョンの実行中に
違反されなかったと判定する動作と、
前記判定に基づき、前記アサーションのいずれも違反されなかったという表示を与える動作と
をさらに含むこと特徴とする請求項2に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。 - 前記アプリケーションAPIのコントラクトの内の少なくとも1つを静的にチェックして、前記コントラクトのアサーションのいずれかが違反されたかどうかを判定する動作をさらに含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記アサーションは、呼び出し側がメソッドを呼び出すことを許可される前に満たされ
るべき項目を特定する1つまたは複数の前提条件を含むこと特徴とする請求項1に記載の
方法を実施するよう構成されたAPIのためのコンピュータプログラム。 - 前記アサーションは、前記メソッドの通常の終了および前記メソッドの例外的な終了の
内の少なくとも一方の際、前記メソッドのリターン時に有効である1つまたは複数の保証
を特定する1つまたは複数の事後条件を含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。 - 前記アサーションは、ロック宣言の内の少なくとも1つを含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記アサーションは、少なくとも1つのチェックされる例外を含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記アサーションは、オブジェクト不変条件の内の少なくとも1つを含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記コントラクトは、前記コントラクトAPIの結果として拡張可能であり、前記拡張性は、新しいメソッドを前記コントラクトAPIに追加することを可能にして、1つまたは複数のクライアントが前記第2のプログラミング言語で記述された前記コントラクト内の前記新しいメソッドを使用することができるように、新しい種類のコントラクトを記述することを可能にすること特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記コントラクト内の前記アサーションの内の少なくとも1つは宣言型であること特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記拡大されたコントラクトに基づき、前記ソフトウェアアプリケーションのAPIのドキュメンテーションを自動的に生成する動作さらに含むこと特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- 前記コントラクトAPIを使用して記述された前記コントラクトは複数のダウンストリームツールに対して維持されること特徴とする請求項1に記載の方法を実施するよう構成されたAPIのためのコンピュータプログラム。
- プロセッサを有するコンピュータシステムにおいて、アプリケーションAPIを拡大するための方法であって、前記アプリケーションAPIは1つまたは複数のコントラクトを含み、
前記プロセッサにより、コントラクトAPIからのコントラクトを用いて前記アプリケーションAPIを拡大するというユーザの意図を示すソフトウェアコードを、コンピュータユーザから受け取る動作であって、前記ソフトウェアコードは前記コントラクトAPIへの参照を含み、前記コントラクトは前記アプリケーションAPIの適切な使用を示す1つまたは複数のアサーションを含む動作と、
前記プロセッサにより、前記ソフトウェアコード内の前記参照に従って前記コントラクトAPIの一部にアクセスする動作と、
前記プロセッサにより、前記受け取ったソフトウェアコードおよび前記コントラクトAPIの前記参照された部分を、前記アプリケーションAPIの適切な使用を示す1つまたは複数のアサーションを含む前記受け取ったソフトウェアコードの中間言語バージョンにコンパイルする動作と、
前記プロセッサにより、前記ソフトウェアコードの前記コンパイルされた中間言語バージョンを前記コンピュータユーザに提供する動作と
を含むことを特徴とする方法。 - 前記アサーションは、前提条件、事後条件、ロック宣言、チェックされる例外、使用プロトコル、およびオブジェクト不変条件の内の1つまたは複数を含むことを特徴とする請求項15に記載の方法。
- 前記コントラクトは、前記コントラクトを完全汎用のプログラミング言語で記述することができるように拡張可能であることを特徴とする請求項15に記載の方法。
- APIコントラクトを修正するためのコンピュータシステムであって、前記システムは、
コンパイラおよびリライタとして動作するプロセッサを有し、
前記コンパイラは、
ソフトウェアアプリケーションコードとどのように相互作用するかを特定する1つまたは複数のアサーションを識別する少なくとも1つのコントラクトを有するAPIを含む、前記ソフトウェアアプリケーションコードを受け取るステップであって、前記コントラクトは1つの値と交換されるべきアプリケーションコードの一部を示す1つまたは複数の参照を含むよう拡張可能であり、前記コントラクトは汎用のプログラム言語で記述されるステップと、
1つまたは複数のアサーションを前記ソフトウェアアプリケーションコード内の対応するメソッドに統合するステップと
を実施するよう構成され、
前記リライタは、
前記コンパイラからバイナリを受け取るステップであって、前記バイナリは少なくとも1つの前記ソフトウェアアプリケーションコードと、前記少なくとも1つのコントラクトとを含むステップと、
前記コントラクト内の前記参照により示される前記アプリケーションコードの一部がある値と交換されるように、前記受け取ったバイナリを書き換えるステップと、
前記書き換えたバイナリを実行可能バイナリとして出力するステップと
を実施するよう構成される
ことを特徴とするシステム。 - 前記コンパイラは1つまたは複数の前記バイナリを受け取るよう構成されることを特徴とする請求項18に記載のシステム。
- 前記アサーションは、前提条件、事後条件、ロック宣言、チェックされる例外、使用プロトコル、およびオブジェクト不変条件の内の少なくとも1つであることを特徴とする請求項18に記載のシステム。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11/963,346 US8250524B2 (en) | 2007-12-21 | 2007-12-21 | Contract programming for code error reduction |
| PCT/US2008/084994 WO2009085521A1 (en) | 2007-12-21 | 2008-11-26 | Contract programming for code error reduction |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2011508317A JP2011508317A (ja) | 2011-03-10 |
| JP2011508317A5 true JP2011508317A5 (ja) | 2012-01-12 |
Family
ID=40790201
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2010539586A Pending JP2011508317A (ja) | 2007-12-21 | 2008-11-26 | コードエラーを減らすためのコントラクトプログラミング |
Country Status (8)
| Country | Link |
|---|---|
| US (1) | US8250524B2 (ja) |
| EP (1) | EP2238532A4 (ja) |
| JP (1) | JP2011508317A (ja) |
| AU (1) | AU2008343555B2 (ja) |
| BR (1) | BRPI0819716A2 (ja) |
| CA (1) | CA2704980C (ja) |
| TW (1) | TWI465902B (ja) |
| WO (1) | WO2009085521A1 (ja) |
Families Citing this family (23)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9645915B2 (en) | 2006-12-27 | 2017-05-09 | The Mathworks, Inc. | Continuous evaluation of program code and saving state information associated with program code |
| US8392762B2 (en) * | 2008-02-04 | 2013-03-05 | Honeywell International Inc. | System and method for detection and prevention of flash corruption |
| US8782607B2 (en) | 2009-02-20 | 2014-07-15 | Microsoft Corporation | Contract failure behavior with escalation policy |
| US8074117B2 (en) * | 2009-09-25 | 2011-12-06 | Microsoft Corporation | Inference of contract using declarative program definition |
| US10089119B2 (en) | 2009-12-18 | 2018-10-02 | Microsoft Technology Licensing, Llc | API namespace virtualization |
| US8910133B2 (en) | 2010-06-07 | 2014-12-09 | Microsoft Corporation | Library conformity checker |
| US9189211B1 (en) * | 2010-06-30 | 2015-11-17 | Sony Computer Entertainment America Llc | Method and system for transcoding data |
| US8745641B1 (en) * | 2011-07-14 | 2014-06-03 | Google Inc. | Automatic verification and anomaly detection in a representational state transfer (REST) application programming interface |
| US8776094B2 (en) | 2011-08-11 | 2014-07-08 | Microsoft Corporation | Runtime system |
| US8695021B2 (en) | 2011-08-31 | 2014-04-08 | Microsoft Corporation | Projecting native application programming interfaces of an operating system into other programming languages |
| US20130339929A1 (en) * | 2012-06-14 | 2013-12-19 | Microsoft Corporation | Program repair |
| US9286039B2 (en) * | 2013-03-14 | 2016-03-15 | Microsoft Technology Licensing, Llc | Operating system support for contracts |
| US9053228B1 (en) * | 2013-10-22 | 2015-06-09 | The Mathworks, Inc. | Determining when to evaluate program code and provide results in a live evaluation programming environment |
| US10635504B2 (en) * | 2014-10-16 | 2020-04-28 | Microsoft Technology Licensing, Llc | API versioning independent of product releases |
| US10230571B2 (en) | 2014-10-30 | 2019-03-12 | Equinix, Inc. | Microservice-based application development framework |
| US9459840B1 (en) | 2015-03-31 | 2016-10-04 | Toyota Jidosha Kabushiki Kaisha | Timing-oriented and architecture-centric system design using contracts |
| US10089089B2 (en) * | 2015-06-03 | 2018-10-02 | The Mathworks, Inc. | Data type reassignment |
| US10331425B2 (en) * | 2017-06-28 | 2019-06-25 | Google Llc | Automated source code adaption to inject features between platform versions |
| US11275624B2 (en) * | 2018-06-14 | 2022-03-15 | Qliktech International Ab | Methods and systems for application program interface management |
| CN111179086B (zh) * | 2019-12-31 | 2024-01-02 | 杭州趣链科技有限公司 | 一种基于WebAssembly的智能合约虚拟机 |
| US11782814B2 (en) | 2021-01-05 | 2023-10-10 | Oracle International Corporation | Visualizations for learned software interfaces |
| US11934810B2 (en) * | 2022-05-19 | 2024-03-19 | Microsoft Technology Licensing, Llc | Translating an edit from a child computer language to a parent computer language while maintaining a semantic meaning of the edit |
| US20240220266A1 (en) * | 2022-12-29 | 2024-07-04 | Samsung Electronics Co., Ltd. | Systems, methods, and apparatus for intermediary representations of workflows for computational devices |
Family Cites Families (39)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US6336148B1 (en) | 1996-09-25 | 2002-01-01 | Sun Microsystems, Inc. | Automatic checking of public contracts and private constraints on distributed objects |
| US6442750B1 (en) | 1999-07-20 | 2002-08-27 | Xerox Corporation | Design by contract with aspect-oriented programming |
| US6836883B1 (en) * | 2000-06-21 | 2004-12-28 | Microsoft Corporation | Method and system for compiling multiple languages |
| GB2373073A (en) * | 2001-03-08 | 2002-09-11 | Escher Technologies Ltd | Process and system for developing validated and optimised object-oriented software |
| US6836884B1 (en) * | 2001-06-04 | 2004-12-28 | Microsoft Corporation | Method and system for editing software programs |
| US7017162B2 (en) * | 2001-07-10 | 2006-03-21 | Microsoft Corporation | Application program interface for network software platform |
| US7165239B2 (en) * | 2001-07-10 | 2007-01-16 | Microsoft Corporation | Application program interface for network software platform |
| US7216338B2 (en) | 2002-02-20 | 2007-05-08 | Microsoft Corporation | Conformance execution of non-deterministic specifications for components |
| US7039898B2 (en) | 2002-07-12 | 2006-05-02 | Netspective Communications, Llc | Computer system for performing reusable software application development from a set of declarative executable specifications |
| US7346897B2 (en) * | 2002-11-20 | 2008-03-18 | Purenative Software Corporation | System for translating programming languages |
| US7065745B2 (en) * | 2002-12-16 | 2006-06-20 | Sun Microsystems, Inc. | System and method for evaluating and executing hierarchies of rules |
| US8032860B2 (en) * | 2003-02-26 | 2011-10-04 | Oracle International Corporation | Methods for type-independent source code editing |
| US7895589B2 (en) * | 2003-02-26 | 2011-02-22 | International Business Machines Corporation | Dynamic data-driven application integration adapters |
| US20050108682A1 (en) * | 2003-02-26 | 2005-05-19 | Bea Systems, Inc. | Systems for type-independent source code editing |
| US7216337B2 (en) * | 2003-04-14 | 2007-05-08 | Microsoft Corporation | Automatic determination of invalid call sequences in software components |
| US7168063B2 (en) | 2003-06-10 | 2007-01-23 | Microsoft Corporation | Systems and methods for employing tagged types in a dynamic runtime environment |
| US7219329B2 (en) * | 2003-06-13 | 2007-05-15 | Microsoft Corporation | Systems and methods providing lightweight runtime code generation |
| US20050010895A1 (en) | 2003-07-09 | 2005-01-13 | Mr. Parama Reddappagari | Software Specification Processing System |
| US7421680B2 (en) * | 2003-09-22 | 2008-09-02 | Microsoft Corporation | Persisted specifications of method pre-and post-conditions for static checking |
| US7584458B2 (en) | 2003-10-02 | 2009-09-01 | Microsoft Corporation | Source code annotation language |
| US7526755B2 (en) | 2003-10-08 | 2009-04-28 | Microsoft Corporation | Plug-in pre- and postconditions for static program analysis |
| US7421682B2 (en) | 2003-11-10 | 2008-09-02 | Microsoft Corporation | Instrumentation injection for common language runtime |
| US20060253844A1 (en) * | 2005-04-21 | 2006-11-09 | Holt John M | Computer architecture and method of operation for multi-computer distributed processing with initialization of objects |
| US7571428B2 (en) | 2004-05-14 | 2009-08-04 | Microsoft Corporation | Reliability contracts |
| US7574692B2 (en) * | 2004-11-19 | 2009-08-11 | Adrian Herscu | Method for building component-software for execution in a standards-compliant programming environment |
| US7844958B2 (en) * | 2005-03-11 | 2010-11-30 | Aptana, Inc. | System and method for creating target byte code |
| US7707547B2 (en) * | 2005-03-11 | 2010-04-27 | Aptana, Inc. | System and method for creating target byte code |
| US20070039010A1 (en) | 2005-08-15 | 2007-02-15 | Microsoft Corporation | Automatic generation of software code to facilitate interoperability |
| US7743363B2 (en) * | 2005-10-13 | 2010-06-22 | Microsoft Corporation | Extensible meta-data |
| US7844951B2 (en) | 2005-12-30 | 2010-11-30 | Microsoft Corporation | Specification generation from implementations |
| US20070220370A1 (en) * | 2006-01-12 | 2007-09-20 | International Business Machines Corporation | Mechanism to generate functional test cases for service oriented architecture (SOA) applications from errors encountered in development and runtime |
| US8136102B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
| US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
| US8561034B2 (en) * | 2006-06-22 | 2013-10-15 | Infosys Technologies, Ltd. | Software fault injection in java enterprise applications |
| US7934207B2 (en) * | 2006-12-19 | 2011-04-26 | Microsoft Corporation | Data schemata in programming language contracts |
| US20080209395A1 (en) * | 2007-02-27 | 2008-08-28 | Advance 9 Group Llc | Automatic code replacement |
| US8327327B2 (en) * | 2007-03-21 | 2012-12-04 | Carnegie Mellon University | Method for statically checking an object-oriented computer program module |
| US8266685B2 (en) * | 2007-05-18 | 2012-09-11 | Microsoft Corporation | Firewall installer |
| WO2008155779A2 (en) * | 2007-06-20 | 2008-12-24 | Sanjeev Krishnan | A method and apparatus for software simulation |
-
2007
- 2007-12-21 US US11/963,346 patent/US8250524B2/en active Active
-
2008
- 2008-11-26 WO PCT/US2008/084994 patent/WO2009085521A1/en not_active Ceased
- 2008-11-26 JP JP2010539586A patent/JP2011508317A/ja active Pending
- 2008-11-26 AU AU2008343555A patent/AU2008343555B2/en not_active Ceased
- 2008-11-26 BR BRPI0819716-4A patent/BRPI0819716A2/pt not_active IP Right Cessation
- 2008-11-26 CA CA2704980A patent/CA2704980C/en not_active Expired - Fee Related
- 2008-11-26 EP EP08867832A patent/EP2238532A4/en not_active Ceased
- 2008-12-15 TW TW097148827A patent/TWI465902B/zh not_active IP Right Cessation
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP2011508317A5 (ja) | ||
| Ali et al. | Averroes: Whole-program analysis without the whole program | |
| US7856624B2 (en) | Automated safe secure techniques for eliminating undefined behavior in computer software | |
| Humer et al. | A domain-specific language for building self-optimizing AST interpreters | |
| CA2704980C (en) | Contract programming for code error reduction | |
| US8719802B2 (en) | Interprocedural exception method | |
| Chalin et al. | Non-null references by default in Java: Alleviating the nullity annotation burden | |
| US20060130021A1 (en) | Automated safe secure techniques for eliminating undefined behavior in computer software | |
| Allende et al. | Gradual typing for Smalltalk | |
| Cameron et al. | A model for Java with wildcards | |
| JP2014501412A5 (ja) | ||
| Zhang et al. | Accepting blame for safe tunneled exceptions | |
| JP2016537755A5 (ja) | ||
| Lam et al. | Lift-off: Trustworthy ARMv8 semantics from formal specifications | |
| Hutchins et al. | C/C++ thread safety analysis | |
| Smans et al. | VeriFast for Java: A tutorial | |
| Rebêlo et al. | Implementing java modeling language contracts with aspectj | |
| Ernst et al. | Locking discipline inference and checking | |
| Barik et al. | Optimization of swift protocols | |
| Carvalho et al. | Formal Verification of kLIBC with the WP Frama-C Plug-in | |
| De Jonge et al. | A language generic solution for name binding preservation in refactorings | |
| Ali | The separate compilation assumption | |
| Kiniry | Exceptions in Java and Eiffel: Two extremes in exception design and application | |
| Spoto et al. | Inference of field initialization | |
| Altidor et al. | Refactoring Java generics by inferring wildcards, in practice |