{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:17:16Z","timestamp":1750306636796,"version":"3.41.0"},"reference-count":8,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2014,1,1]],"date-time":"2014-01-01T00:00:00Z","timestamp":1388534400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Queue"],"published-print":{"date-parts":[[2014,1]]},"abstract":"<jats:p>When you call functions in an API, you expect them to work correctly; sometimes this expectation is called a contract between the caller and the implementation. Callers also have performance expectations about these functions, and often the success of a software system depends on the API meeting these expectations. So there\u2019s a performance contract as well as a correctness contract. The performance contract is usually implicit, often vague, and sometimes breached (by caller or implementation). How can this aspect of API design and documentation be improved?<\/jats:p>","DOI":"10.1145\/2576966.2576968","type":"journal-article","created":{"date-parts":[[2014,2,4]],"date-time":"2014-02-04T14:16:21Z","timestamp":1391523381000},"page":"10-20","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":2,"title":["The API Performance Contract"],"prefix":"10.1145","volume":"12","author":[{"given":"Robert","family":"Sproull","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]},{"given":"Jim","family":"Waldo","sequence":"additional","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"320","published-online":{"date-parts":[[2014,1]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"Bentley J. Personal communication.  Bentley J. Personal communication."},{"key":"e_1_2_1_2_1","unstructured":"GNU C Library; http:\/\/www.gnu.org\/software\/libc\/manual\/html_node\/index.html.  GNU C Library; http:\/\/www.gnu.org\/software\/libc\/manual\/html_node\/index.html."},{"key":"e_1_2_1_3_1","unstructured":"Java Platform Standard Edition 7. API Specification; http:\/\/docs.oracle.com\/javase\/7\/docs\/api\/index.html.  Java Platform Standard Edition 7. API Specification; http:\/\/docs.oracle.com\/javase\/7\/docs\/api\/index.html."},{"volume-title":"Proceedings of the Summer '85 Usenix  Conference: 489-506","year":"1985","author":"Korn D. G.","key":"e_1_2_1_4_1"},{"key":"e_1_2_1_5_1","unstructured":"Oracle. Solaris Dynamic Tracing Guide; http:\/\/docs.oracle.com\/cd\/E19253-01\/817-6223\/.  Oracle. Solaris Dynamic Tracing Guide; http:\/\/docs.oracle.com\/cd\/E19253-01\/817-6223\/."},{"key":"e_1_2_1_6_1","unstructured":"Pthreads(7) manual page; http:\/\/man7.org\/linux\/man-pages\/man7\/pthreads.7.html.  Pthreads(7) manual page; http:\/\/man7.org\/linux\/man-pages\/man7\/pthreads.7.html."},{"key":"e_1_2_1_7_1","doi-asserted-by":"crossref","unstructured":"Saltzer J. H. Kaashoek M. F. 2009. Principle of least astonishment. In Principles of Computer System Design. Morgan Kaufmann: 85.  Saltzer J. H. Kaashoek M. F. 2009. Principle of least astonishment. In Principles of Computer System Design. Morgan Kaufmann: 85.","DOI":"10.1016\/B978-0-12-374957-4.00010-4"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.1002\/(SICI)1097-024X(199603)26:3<357::AID-SPE15>3.0.CO;2-#"}],"container-title":["Queue"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2576966.2576968","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/2576966.2576968","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T06:55:54Z","timestamp":1750229754000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/2576966.2576968"}},"subtitle":["How can the expected interactions between caller and implementation be guaranteed?"],"short-title":[],"issued":{"date-parts":[[2014,1]]},"references-count":8,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2014,1]]}},"alternative-id":["10.1145\/2576966.2576968"],"URL":"https:\/\/doi.org\/10.1145\/2576966.2576968","relation":{},"ISSN":["1542-7730","1542-7749"],"issn-type":[{"type":"print","value":"1542-7730"},{"type":"electronic","value":"1542-7749"}],"subject":[],"published":{"date-parts":[[2014,1]]},"assertion":[{"value":"2014-01-01","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}