{"id":"https://openalex.org/W1973020382","doi":"https://doi.org/10.1145/1377492.1377493","title":"Checking type safety of foreign function calls","display_name":"Checking type safety of foreign function calls","publication_year":2008,"publication_date":"2008-07-01","ids":{"openalex":"https://openalex.org/W1973020382","doi":"https://doi.org/10.1145/1377492.1377493","mag":"1973020382"},"language":"en","primary_location":{"id":"doi:10.1145/1377492.1377493","is_oa":true,"landing_page_url":"https://doi.org/10.1145/1377492.1377493","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/1377492.1377493","source":{"id":"https://openalex.org/S41449414","display_name":"ACM Transactions on Programming Languages and Systems","issn_l":"0164-0925","issn":["0164-0925","1558-4593"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"ACM Transactions on Programming Languages and Systems","raw_type":"journal-article"},"type":"article","indexed_in":["crossref"],"open_access":{"is_oa":true,"oa_status":"bronze","oa_url":"https://dl.acm.org/doi/pdf/10.1145/1377492.1377493","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":"https://openalex.org/A5084401345","display_name":"Michael Furr","orcid":null},"institutions":[{"id":"https://openalex.org/I66946132","display_name":"University of Maryland, College Park","ror":"https://ror.org/047s2c258","country_code":"US","type":"education","lineage":["https://openalex.org/I66946132"]}],"countries":["US"],"is_corresponding":true,"raw_author_name":"Michael Furr","raw_affiliation_strings":["University of Maryland, College Park, MD"],"affiliations":[{"raw_affiliation_string":"University of Maryland, College Park, MD","institution_ids":["https://openalex.org/I66946132"]}]},{"author_position":"last","author":{"id":"https://openalex.org/A5038702707","display_name":"Jeffrey S. Foster","orcid":"https://orcid.org/0000-0001-8043-1166"},"institutions":[{"id":"https://openalex.org/I66946132","display_name":"University of Maryland, College Park","ror":"https://ror.org/047s2c258","country_code":"US","type":"education","lineage":["https://openalex.org/I66946132"]}],"countries":["US"],"is_corresponding":false,"raw_author_name":"Jeffrey S. Foster","raw_affiliation_strings":["University of Maryland, College Park, MD"],"affiliations":[{"raw_affiliation_string":"University of Maryland, College Park, MD","institution_ids":["https://openalex.org/I66946132"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":2,"corresponding_author_ids":["https://openalex.org/A5084401345"],"corresponding_institution_ids":["https://openalex.org/I66946132"],"apc_list":null,"apc_paid":null,"fwci":4.6926,"has_fulltext":true,"cited_by_count":33,"citation_normalized_percentile":{"value":0.94275641,"is_in_top_1_percent":false,"is_in_top_10_percent":true},"cited_by_percentile_year":{"min":89,"max":98},"biblio":{"volume":"30","issue":"4","first_page":"1","last_page":"63"},"is_retracted":false,"is_paratext":false,"is_xpac":false,"primary_topic":{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.9993000030517578,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},"topics":[{"id":"https://openalex.org/T10126","display_name":"Logic, programming, and type systems","score":0.9993000030517578,"subfield":{"id":"https://openalex.org/subfields/1702","display_name":"Artificial Intelligence"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10260","display_name":"Software Engineering Research","score":0.9991000294685364,"subfield":{"id":"https://openalex.org/subfields/1710","display_name":"Information Systems"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}},{"id":"https://openalex.org/T10743","display_name":"Software Testing and Debugging Techniques","score":0.9991000294685364,"subfield":{"id":"https://openalex.org/subfields/1712","display_name":"Software"},"field":{"id":"https://openalex.org/fields/17","display_name":"Computer Science"},"domain":{"id":"https://openalex.org/domains/3","display_name":"Physical Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/computer-science","display_name":"Computer science","score":0.8973857164382935},{"id":"https://openalex.org/keywords/programming-language","display_name":"Programming language","score":0.7466821670532227},{"id":"https://openalex.org/keywords/type-inference","display_name":"Type inference","score":0.5782044529914856},{"id":"https://openalex.org/keywords/java","display_name":"Java","score":0.5717009902000427},{"id":"https://openalex.org/keywords/memory-safety","display_name":"Memory safety","score":0.5640093684196472},{"id":"https://openalex.org/keywords/static-analysis","display_name":"Static analysis","score":0.5476138591766357},{"id":"https://openalex.org/keywords/garbage-collection","display_name":"Garbage collection","score":0.46773582696914673},{"id":"https://openalex.org/keywords/scala","display_name":"Scala","score":0.43531396985054016},{"id":"https://openalex.org/keywords/control-flow","display_name":"Control flow","score":0.42393845319747925},{"id":"https://openalex.org/keywords/theoretical-computer-science","display_name":"Theoretical computer science","score":0.3734337091445923},{"id":"https://openalex.org/keywords/compiler","display_name":"Compiler","score":0.3377472758293152},{"id":"https://openalex.org/keywords/inference","display_name":"Inference","score":0.2310371696949005},{"id":"https://openalex.org/keywords/artificial-intelligence","display_name":"Artificial intelligence","score":0.11172515153884888}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.8973857164382935},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.7466821670532227},{"id":"https://openalex.org/C198370458","wikidata":"https://www.wikidata.org/wiki/Q586459","display_name":"Type inference","level":3,"score":0.5782044529914856},{"id":"https://openalex.org/C548217200","wikidata":"https://www.wikidata.org/wiki/Q251","display_name":"Java","level":2,"score":0.5717009902000427},{"id":"https://openalex.org/C28180684","wikidata":"https://www.wikidata.org/wiki/Q4080983","display_name":"Memory safety","level":3,"score":0.5640093684196472},{"id":"https://openalex.org/C97686452","wikidata":"https://www.wikidata.org/wiki/Q7604153","display_name":"Static analysis","level":2,"score":0.5476138591766357},{"id":"https://openalex.org/C105122174","wikidata":"https://www.wikidata.org/wiki/Q322202","display_name":"Garbage collection","level":3,"score":0.46773582696914673},{"id":"https://openalex.org/C109701466","wikidata":"https://www.wikidata.org/wiki/Q460584","display_name":"Scala","level":3,"score":0.43531396985054016},{"id":"https://openalex.org/C160191386","wikidata":"https://www.wikidata.org/wiki/Q868299","display_name":"Control flow","level":2,"score":0.42393845319747925},{"id":"https://openalex.org/C80444323","wikidata":"https://www.wikidata.org/wiki/Q2878974","display_name":"Theoretical computer science","level":1,"score":0.3734337091445923},{"id":"https://openalex.org/C169590947","wikidata":"https://www.wikidata.org/wiki/Q47506","display_name":"Compiler","level":2,"score":0.3377472758293152},{"id":"https://openalex.org/C2776214188","wikidata":"https://www.wikidata.org/wiki/Q408386","display_name":"Inference","level":2,"score":0.2310371696949005},{"id":"https://openalex.org/C154945302","wikidata":"https://www.wikidata.org/wiki/Q11660","display_name":"Artificial intelligence","level":1,"score":0.11172515153884888},{"id":"https://openalex.org/C75403996","wikidata":"https://www.wikidata.org/wiki/Q5521979","display_name":"Garbage","level":2,"score":0.0}],"mesh":[],"locations_count":6,"locations":[{"id":"doi:10.1145/1377492.1377493","is_oa":true,"landing_page_url":"https://doi.org/10.1145/1377492.1377493","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/1377492.1377493","source":{"id":"https://openalex.org/S41449414","display_name":"ACM Transactions on Programming Languages and Systems","issn_l":"0164-0925","issn":["0164-0925","1558-4593"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"ACM Transactions on Programming Languages and Systems","raw_type":"journal-article"},{"id":"pmh:oai:drum.lib.umd.edu:1903/3021","is_oa":true,"landing_page_url":"http://hdl.handle.net/1903/3021","pdf_url":"https://drum.lib.umd.edu/bitstreams/2b011c93-8045-4ed0-a22f-b734c877b6b6/download","source":{"id":"https://openalex.org/S4306402644","display_name":"Digital Repository at the University of Maryland (University of Maryland College Park)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I66946132","host_organization_name":"University of Maryland, College Park","host_organization_lineage":["https://openalex.org/I66946132"],"host_organization_lineage_names":[],"type":"repository"},"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":null,"raw_type":"Technical Report"},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.110.1432","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.110.1432","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://www.cs.umd.edu/~furr/papers/cs-tr-4845.pdf","raw_type":"text"},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.145.2944","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.145.2944","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://www.cs.umd.edu/~furr/papers/toplas-ffi.pdf","raw_type":"text"},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.188.293","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.188.293","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://www.cs.umd.edu/Grad/scholarlypapers/papers/furr-scholary.pdf","raw_type":"text"},{"id":"pmh:oai:CiteSeerX.psu:10.1.1.86.6338","is_oa":false,"landing_page_url":"http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.86.6338","pdf_url":null,"source":null,"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"http://www.cs.umd.edu/~jfoster/papers/toplas-ffi.pdf","raw_type":"text"}],"best_oa_location":{"id":"doi:10.1145/1377492.1377493","is_oa":true,"landing_page_url":"https://doi.org/10.1145/1377492.1377493","pdf_url":"https://dl.acm.org/doi/pdf/10.1145/1377492.1377493","source":{"id":"https://openalex.org/S41449414","display_name":"ACM Transactions on Programming Languages and Systems","issn_l":"0164-0925","issn":["0164-0925","1558-4593"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":"https://openalex.org/P4310319798","host_organization_name":"Association for Computing Machinery","host_organization_lineage":["https://openalex.org/P4310319798"],"host_organization_lineage_names":["Association for Computing Machinery"],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"ACM Transactions on Programming Languages and Systems","raw_type":"journal-article"},"sustainable_development_goals":[{"display_name":"Quality Education","id":"https://metadata.un.org/sdg/4","score":0.47999998927116394}],"awards":[{"id":"https://openalex.org/G2307661365","display_name":null,"funder_award_id":"CCF-0346982CCF-0430118","funder_id":"https://openalex.org/F4320337387","funder_display_name":"Division of Computing and Communication Foundations"},{"id":"https://openalex.org/G6940871907","display_name":"Collaborative Research:    Type Qualifiers for Software Security","funder_award_id":"0430118","funder_id":"https://openalex.org/F4320306076","funder_display_name":"National Science Foundation"},{"id":"https://openalex.org/G8648890131","display_name":"CAREER:  Programming Languages Techniques for Enhancing Software Quality","funder_award_id":"0346982","funder_id":"https://openalex.org/F4320306076","funder_display_name":"National Science Foundation"}],"funders":[{"id":"https://openalex.org/F4320306076","display_name":"National Science Foundation","ror":"https://ror.org/021nxhr62"},{"id":"https://openalex.org/F4320337387","display_name":"Division of Computing and Communication Foundations","ror":"https://ror.org/01mng8331"}],"has_content":{"pdf":true,"grobid_xml":true},"content_urls":{"pdf":"https://content.openalex.org/works/W1973020382.pdf","grobid_xml":"https://content.openalex.org/works/W1973020382.grobid-xml"},"referenced_works_count":43,"referenced_works":["https://openalex.org/W4015096","https://openalex.org/W62642215","https://openalex.org/W76287021","https://openalex.org/W1487112335","https://openalex.org/W1493349649","https://openalex.org/W1499965119","https://openalex.org/W1514258760","https://openalex.org/W1560840983","https://openalex.org/W1595637483","https://openalex.org/W1605670610","https://openalex.org/W1809751277","https://openalex.org/W1855973055","https://openalex.org/W1873039666","https://openalex.org/W1963914916","https://openalex.org/W1964952791","https://openalex.org/W1998765795","https://openalex.org/W2006691463","https://openalex.org/W2014472261","https://openalex.org/W2074954052","https://openalex.org/W2078954295","https://openalex.org/W2089424085","https://openalex.org/W2099587209","https://openalex.org/W2105444926","https://openalex.org/W2107089133","https://openalex.org/W2121038016","https://openalex.org/W2125519938","https://openalex.org/W2133231960","https://openalex.org/W2137946574","https://openalex.org/W2140611647","https://openalex.org/W2149568035","https://openalex.org/W2151716725","https://openalex.org/W2153489748","https://openalex.org/W2159388995","https://openalex.org/W2162053995","https://openalex.org/W2170830071","https://openalex.org/W2188944230","https://openalex.org/W2912089137","https://openalex.org/W4205113694","https://openalex.org/W4232645513","https://openalex.org/W4234020632","https://openalex.org/W4245120671","https://openalex.org/W4246553962","https://openalex.org/W6602574077"],"related_works":["https://openalex.org/W2111320546","https://openalex.org/W2809457911","https://openalex.org/W2182829270","https://openalex.org/W4232645513","https://openalex.org/W2104656753","https://openalex.org/W2948598708","https://openalex.org/W2159388995","https://openalex.org/W4233008630","https://openalex.org/W2031192129","https://openalex.org/W2951608268"],"abstract_inverted_index":{"Foreign":[0],"function":[1],"interfaces":[2],"(FFIs)":[3],"allow":[4],"components":[5],"in":[6,183,243],"different":[7],"languages":[8],"to":[9,94,107,135,171,191,197,217],"communicate":[10],"directly":[11],"with":[12],"each":[13],"other.":[14],"While":[15],"FFIs":[16,83,237],"are":[17,176,201],"useful,":[18],"they":[19],"often":[20],"require":[21],"writing":[22,244],"tricky":[23],"low-level":[24,97],"code":[25,79],"and":[26,58,67,101,104,113,141,215,222,226],"include":[27],"little":[28],"or":[29],"no":[30],"static":[31,234],"safety":[32,53],"checking,":[33],"thus":[34],"providing":[35],"a":[36,69,123,153,218,240],"rich":[37],"source":[38],"of":[39,50,71,99,220,236],"hard-to-find":[40],"programming":[41],"errors.":[42],"In":[43],"this":[44],"article,":[45],"we":[46],"study":[47],"the":[48,55,59,142,165,198,209],"problem":[49],"enforcing":[51],"type":[52,73,114],"across":[54],"OCaml-to-C":[56],"FFI":[57,167],"Java":[60,102,120],"Native":[61],"Interface":[62],"(JNI).":[63],"We":[64,211],"present":[65],"O-Saffire":[66,185,214],"J-Saffire,":[68,118],"pair":[70],"multilingual":[72,246],"inference":[74,89],"systems":[75,90],"that":[76,80,193,233],"ensure":[77,192],"C":[78,195],"uses":[81,122,152],"these":[82],"accesses":[84],"high-level":[85],"data":[86,182],"safely.":[87],"Our":[88],"use":[91],"representational":[92],"types":[93,106],"model":[95,137],"C's":[96],"view":[98],"OCaml":[100,150,166,181,199],"values,":[103],"singleton":[105],"track":[108,172],"integers,":[109],"strings,":[110],"memory":[111],"offsets,":[112],"tags":[115],"through":[116],"C.":[117,184],"our":[119,149],"system,":[121,151],"polymorphic":[124],"flow-insensitive,":[125],"unification-based":[126],"analysis.":[127],"Polymorphism":[128],"is":[129,160,169,205],"important":[130,163],"because":[131],"it":[132],"allows":[133],"us":[134],"precisely":[136],"user-defined":[138],"wrapper":[139],"functions":[140],"more":[143],"than":[144],"200":[145],"JNI":[146],"functions.":[147],"O-Saffire,":[148],"monomorphic":[154],"flow-sensitive":[155],"analysis":[156],"because,":[157],"while":[158],"polymorphism":[159],"much":[161],"less":[162],"for":[164,208],"flow-sensitivity":[168],"critical":[170],"conditional":[173],"branches,":[174],"which":[175,204],"used":[177],"when":[178],"pattern":[179],"matching":[180],"also":[186],"tracks":[187],"garbage":[188],"collection":[189],"information":[190],"local":[194],"pointers":[196],"heap":[200],"registered":[202],"properly,":[203],"not":[206],"necessary":[207],"JNI.":[210],"have":[212],"applied":[213],"J-Saffire":[216],"set":[219],"benchmarks":[221],"found":[223],"many":[224],"bugs":[225],"questionable":[227],"coding":[228],"practices.":[229],"These":[230],"results":[231],"suggest":[232],"checking":[235],"can":[238],"be":[239],"valuable":[241],"tool":[242],"correct":[245],"software.":[247]},"counts_by_year":[{"year":2025,"cited_by_count":2},{"year":2024,"cited_by_count":2},{"year":2023,"cited_by_count":2},{"year":2022,"cited_by_count":2},{"year":2021,"cited_by_count":3},{"year":2018,"cited_by_count":1},{"year":2017,"cited_by_count":2},{"year":2016,"cited_by_count":2},{"year":2015,"cited_by_count":1},{"year":2014,"cited_by_count":5},{"year":2013,"cited_by_count":1}],"updated_date":"2026-04-10T15:06:20.359241","created_date":"2025-10-10T00:00:00"}
