{"id":"https://openalex.org/W3005911118","doi":"https://doi.org/10.22152/programming-journal.org/2020/4/16","title":"Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System","display_name":"Constructing Hybrid Incremental Compilers for Cross-Module Extensibility with an Internal Build System","publication_year":2020,"publication_date":"2020-02-14","ids":{"openalex":"https://openalex.org/W3005911118","doi":"https://doi.org/10.22152/programming-journal.org/2020/4/16","mag":"3005911118"},"language":"en","primary_location":{"id":"doi:10.22152/programming-journal.org/2020/4/16","is_oa":true,"landing_page_url":"https://doi.org/10.22152/programming-journal.org/2020/4/16","pdf_url":"https://arxiv.org/pdf/2002.06183v1","source":{"id":"https://openalex.org/S4210199781","display_name":"The Art Science and Engineering of Programming","issn_l":"2473-7321","issn":["2473-7321"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"The Art, Science, and Engineering of Programming","raw_type":"journal-article"},"type":"article","indexed_in":["arxiv","crossref"],"open_access":{"is_oa":true,"oa_status":"bronze","oa_url":"https://arxiv.org/pdf/2002.06183v1","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":null,"display_name":"Jeff Smits","orcid":null},"institutions":[{"id":"https://openalex.org/I98358874","display_name":"Delft University of Technology","ror":"https://ror.org/02e2c7k09","country_code":"NL","type":"education","lineage":["https://openalex.org/I98358874"]}],"countries":["NL"],"is_corresponding":false,"raw_author_name":"Jeff Smits","raw_affiliation_strings":["Delft University of Technology, Netherlands"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Delft University of Technology, Netherlands","institution_ids":["https://openalex.org/I98358874"]}]},{"author_position":"middle","author":{"id":null,"display_name":"Gabri\u00ebl D.P. Konat","orcid":null},"institutions":[{"id":"https://openalex.org/I98358874","display_name":"Delft University of Technology","ror":"https://ror.org/02e2c7k09","country_code":"NL","type":"education","lineage":["https://openalex.org/I98358874"]}],"countries":["NL"],"is_corresponding":false,"raw_author_name":"Gabri\u00ebl D.P. Konat","raw_affiliation_strings":["Delft University of Technology, Netherlands"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Delft University of Technology, Netherlands","institution_ids":["https://openalex.org/I98358874"]}]},{"author_position":"last","author":{"id":null,"display_name":"Eelco Visser","orcid":null},"institutions":[{"id":"https://openalex.org/I98358874","display_name":"Delft University of Technology","ror":"https://ror.org/02e2c7k09","country_code":"NL","type":"education","lineage":["https://openalex.org/I98358874"]}],"countries":["NL"],"is_corresponding":false,"raw_author_name":"Eelco Visser","raw_affiliation_strings":["Delft University of Technology, Netherlands"],"raw_orcid":null,"affiliations":[{"raw_affiliation_string":"Delft University of Technology, Netherlands","institution_ids":["https://openalex.org/I98358874"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":1,"corresponding_author_ids":[],"corresponding_institution_ids":["https://openalex.org/I98358874"],"apc_list":null,"apc_paid":null,"fwci":0.2681,"has_fulltext":true,"cited_by_count":4,"citation_normalized_percentile":{"value":0.64383105,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":{"min":90,"max":96},"biblio":{"volume":"4","issue":"3","first_page":null,"last_page":null},"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.5493999719619751,"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.5493999719619751,"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/T10639","display_name":"Advanced Software Engineering Methodologies","score":0.27619999647140503,"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/T11450","display_name":"Model-Driven Software Engineering Techniques","score":0.028300000354647636,"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/compiler","display_name":"Compiler","score":0.8999000191688538},{"id":"https://openalex.org/keywords/compiler-correctness","display_name":"Compiler correctness","score":0.8118000030517578},{"id":"https://openalex.org/keywords/compiler-construction","display_name":"Compiler construction","score":0.7369999885559082},{"id":"https://openalex.org/keywords/compile-time","display_name":"Compile time","score":0.5485000014305115},{"id":"https://openalex.org/keywords/interprocedural-optimization","display_name":"Interprocedural optimization","score":0.546500027179718},{"id":"https://openalex.org/keywords/optimizing-compiler","display_name":"Optimizing compiler","score":0.5338000059127808},{"id":"https://openalex.org/keywords/cache","display_name":"Cache","score":0.4271000027656555},{"id":"https://openalex.org/keywords/dynamic-compilation","display_name":"Dynamic compilation","score":0.42570000886917114}],"concepts":[{"id":"https://openalex.org/C169590947","wikidata":"https://www.wikidata.org/wiki/Q47506","display_name":"Compiler","level":2,"score":0.8999000191688538},{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.871999979019165},{"id":"https://openalex.org/C68366613","wikidata":"https://www.wikidata.org/wiki/Q5156378","display_name":"Compiler correctness","level":3,"score":0.8118000030517578},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.7800999879837036},{"id":"https://openalex.org/C9957790","wikidata":"https://www.wikidata.org/wiki/Q47506","display_name":"Compiler construction","level":3,"score":0.7369999885559082},{"id":"https://openalex.org/C200833197","wikidata":"https://www.wikidata.org/wiki/Q333707","display_name":"Compile time","level":3,"score":0.5485000014305115},{"id":"https://openalex.org/C111564260","wikidata":"https://www.wikidata.org/wiki/Q4288856","display_name":"Interprocedural optimization","level":5,"score":0.546500027179718},{"id":"https://openalex.org/C190902152","wikidata":"https://www.wikidata.org/wiki/Q1325106","display_name":"Optimizing compiler","level":3,"score":0.5338000059127808},{"id":"https://openalex.org/C115537543","wikidata":"https://www.wikidata.org/wiki/Q165596","display_name":"Cache","level":2,"score":0.4271000027656555},{"id":"https://openalex.org/C8767382","wikidata":"https://www.wikidata.org/wiki/Q1058454","display_name":"Dynamic compilation","level":3,"score":0.42570000886917114},{"id":"https://openalex.org/C128916667","wikidata":"https://www.wikidata.org/wiki/Q1343660","display_name":"Register allocation","level":3,"score":0.396699994802475},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.3538999855518341},{"id":"https://openalex.org/C2779343474","wikidata":"https://www.wikidata.org/wiki/Q3109175","display_name":"Context (archaeology)","level":2,"score":0.3089999854564667},{"id":"https://openalex.org/C2777904410","wikidata":"https://www.wikidata.org/wiki/Q7397","display_name":"Software","level":2,"score":0.29649999737739563},{"id":"https://openalex.org/C173608175","wikidata":"https://www.wikidata.org/wiki/Q232661","display_name":"Parallel computing","level":1,"score":0.28839999437332153},{"id":"https://openalex.org/C177264268","wikidata":"https://www.wikidata.org/wiki/Q1514741","display_name":"Set (abstract data type)","level":2,"score":0.2881999909877777},{"id":"https://openalex.org/C186644900","wikidata":"https://www.wikidata.org/wiki/Q194152","display_name":"Parsing","level":2,"score":0.28290000557899475},{"id":"https://openalex.org/C32833848","wikidata":"https://www.wikidata.org/wiki/Q4115054","display_name":"Extensibility","level":2,"score":0.2773999869823456},{"id":"https://openalex.org/C77660490","wikidata":"https://www.wikidata.org/wiki/Q244916","display_name":"Intermediate language","level":3,"score":0.274399995803833},{"id":"https://openalex.org/C26022165","wikidata":"https://www.wikidata.org/wiki/Q8091","display_name":"Grammar","level":2,"score":0.2621000111103058},{"id":"https://openalex.org/C2778361913","wikidata":"https://www.wikidata.org/wiki/Q7248437","display_name":"Program transformation","level":2,"score":0.26030001044273376},{"id":"https://openalex.org/C26517878","wikidata":"https://www.wikidata.org/wiki/Q228039","display_name":"Key (lock)","level":2,"score":0.25290000438690186},{"id":"https://openalex.org/C135257023","wikidata":"https://www.wikidata.org/wiki/Q691358","display_name":"Domain-specific language","level":2,"score":0.25060001015663147}],"mesh":[],"locations_count":3,"locations":[{"id":"doi:10.22152/programming-journal.org/2020/4/16","is_oa":true,"landing_page_url":"https://doi.org/10.22152/programming-journal.org/2020/4/16","pdf_url":"https://arxiv.org/pdf/2002.06183v1","source":{"id":"https://openalex.org/S4210199781","display_name":"The Art Science and Engineering of Programming","issn_l":"2473-7321","issn":["2473-7321"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"The Art, Science, and Engineering of Programming","raw_type":"journal-article"},{"id":"pmh:oai:arXiv.org:2002.06183","is_oa":true,"landing_page_url":"http://arxiv.org/abs/2002.06183","pdf_url":"https://arxiv.org/pdf/2002.06183","source":{"id":"https://openalex.org/S4306400194","display_name":"arXiv (Cornell University)","issn_l":"2331-8422","issn":["2331-8422"],"is_oa":true,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I205783295","host_organization_name":"Cornell University","host_organization_lineage":["https://openalex.org/I205783295"],"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":"text"},{"id":"pmh:oai:tudelft.nl:uuid:ec4a8679-daab-40bf-b4fc-170f1dd3e2fe","is_oa":false,"landing_page_url":"http://resolver.tudelft.nl/uuid:ec4a8679-daab-40bf-b4fc-170f1dd3e2fe","pdf_url":null,"source":{"id":"https://openalex.org/S4306400906","display_name":"Research Repository (Delft University of Technology)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I98358874","host_organization_name":"Delft University of Technology","host_organization_lineage":["https://openalex.org/I98358874"],"host_organization_lineage_names":[],"type":"repository"},"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"","raw_type":"journal article"}],"best_oa_location":{"id":"doi:10.22152/programming-journal.org/2020/4/16","is_oa":true,"landing_page_url":"https://doi.org/10.22152/programming-journal.org/2020/4/16","pdf_url":"https://arxiv.org/pdf/2002.06183v1","source":{"id":"https://openalex.org/S4210199781","display_name":"The Art Science and Engineering of Programming","issn_l":"2473-7321","issn":["2473-7321"],"is_oa":false,"is_in_doaj":false,"is_core":true,"host_organization":null,"host_organization_name":null,"host_organization_lineage":[],"host_organization_lineage_names":[],"type":"journal"},"license":null,"license_id":null,"version":"publishedVersion","is_accepted":true,"is_published":true,"raw_source_name":"The Art, Science, and Engineering of Programming","raw_type":"journal-article"},"sustainable_development_goals":[],"awards":[{"id":"https://openalex.org/G6376596738","display_name":"The Language Designer's Workbench: Automating Verification of Language Definitions","funder_award_id":"639.023.206","funder_id":"https://openalex.org/F4320321800","funder_display_name":"Nederlandse Organisatie voor Wetenschappelijk Onderzoek"}],"funders":[{"id":"https://openalex.org/F4320307904","display_name":"Oracle","ror":"https://ror.org/006c77m33"},{"id":"https://openalex.org/F4320321800","display_name":"Nederlandse Organisatie voor Wetenschappelijk Onderzoek","ror":"https://ror.org/04jsz6e67"}],"has_content":{"pdf":true,"grobid_xml":true},"content_urls":{"pdf":"https://content.openalex.org/works/W3005911118.pdf","grobid_xml":"https://content.openalex.org/works/W3005911118.grobid-xml"},"referenced_works_count":28,"referenced_works":["https://openalex.org/W1485665416","https://openalex.org/W1488454486","https://openalex.org/W1489879801","https://openalex.org/W1523535050","https://openalex.org/W1567378416","https://openalex.org/W1719385339","https://openalex.org/W1980885047","https://openalex.org/W1990529626","https://openalex.org/W1998897127","https://openalex.org/W2001186381","https://openalex.org/W2002805042","https://openalex.org/W2018009728","https://openalex.org/W2041587952","https://openalex.org/W2070821087","https://openalex.org/W2085439199","https://openalex.org/W2093927510","https://openalex.org/W2123646555","https://openalex.org/W2127581079","https://openalex.org/W2157036282","https://openalex.org/W2165230636","https://openalex.org/W2171029229","https://openalex.org/W2301545550","https://openalex.org/W2763230528","https://openalex.org/W2791446013","https://openalex.org/W2888590305","https://openalex.org/W3104155853","https://openalex.org/W4246734931","https://openalex.org/W4288400169"],"related_works":[],"abstract_inverted_index":{"Context":[0],"Compilation":[1],"time":[2,42],"is":[3,61,104,216,238,259,291,301,330,402],"an":[4,51,93,120,130,135,156,220,281,294,309,333,409,416],"important":[5],"factor":[6],"in":[7,80,151,240,272],"the":[8,48,59,126,146,160,188,196,227,232,246,252,257,299,323,354,364,382],"adaptability":[9],"of":[10,37,50,119,128,168,245,263,275,363,427],"a":[11,21,35,40,98,102,112,166,201,243,260,267,342,368,399,424],"software":[12],"project.Fast":[13],"recompilation":[14],"enables":[15],"cheap":[16],"experimentation":[17],"with":[18,84,176,336],"changes":[19,25],"to":[20,43,124,154,186,203,217,224,270,346,353,411],"project,":[22],"as":[23,71,182,242,332,367],"those":[24],"can":[26,96],"be":[27,97],"tested":[28],"quickly.Separate":[29],"and":[30,67,77,87,90,199,277,312,317,419],"incremental":[31,52,94,131,157,177,214,221,253,282,314,326,422],"compilation":[32,287],"has":[33,165,200],"been":[34],"topic":[36],"interest":[38],"for":[39,82,159,303,328,372],"long":[41],"facilitate":[44],"fast":[45],"recompilation.Inquiry":[46],"Despite":[47],"benefits":[49],"compiler,":[53],"such":[54,70],"compilers":[55,81],"are":[56,361],"usually":[57],"not":[58],"default.This":[60],"because":[62],"incrementalization":[63],"requires":[64],"cross-cutting,":[65],"complicated,":[66],"error-prone":[68],"techniques":[69],"dependency":[72,320],"tracking,":[73],"caching,":[74],"cache":[75],"invalidation,":[76],"change":[78,412],"detection.Especially":[79],"languages":[83,397],"cross-module":[85],"definitions":[86],"integration,":[88],"correctly":[89],"efficiently":[91],"implementing":[92],"compiler":[95,103,113,123,147,158,198,215,237,258,268,283,327,400,418],"challenge.Retrofitting":[99],"incrementality":[100],"into":[101,137,280,322],"even":[105],"harder.We":[106],"address":[107],"this":[108,152,193,337,392],"problem":[109],"by":[110,293,414],"developing":[111],"design":[114,148,379,407],"approach":[115,149,189,194,380,410],"that":[116,170,251,279,401],"reuses":[117],"parts":[118],"existing":[121,310,417],"non-incremental":[122],"lower":[125],"cost":[127],"building":[129],"compiler.It":[132],"also":[133,387],"gives":[134],"intuition":[136],"compiling":[138],"difficult-to-incrementalize":[139],"language":[140,164],"features":[141,169],"through":[142],"staging.Approach":[143],"We":[144],"use":[145,219,241],"presented":[150],"paper":[153],"develop":[155],"Stratego":[161,181,205,329,344,355,383],"term-rewriting":[162],"language.This":[163],"set":[167],"at":[171],"first":[172],"glance":[173],"look":[174],"incompatible":[175],"compilation.Therefore,":[178],"we":[179,211,229,376,386],"treat":[180],"our":[183,213,264,378],"critical":[184],"case":[185],"demonstrate":[187,377],"on.We":[190],"show":[191],"how":[192],"decomposes":[195],"original":[197,233,247],"solution":[202],"compile":[204],"incrementally.The":[206],"key":[207],"idea":[208],"on":[209,341,381],"which":[210],"build":[212,222,254,296,315],"internally":[218],"system":[223,255],"wire":[225],"together":[226],"components":[228],"extract":[230],"from":[231,357],"compiler.Knowledge":[234],"The":[235,325],"resulting":[236],"already":[239],"replacement":[244],"whole-program":[248],"compiler.We":[249],"find":[250],"inside":[256],"crucial":[261],"component":[262],"approach.This":[265],"allows":[266],"writer":[269],"think":[271],"multiple":[273],"steps":[274],"compilation,":[276],"combine":[278],"almost":[284],"effortlessly.Normally,":[285],"separate":[286],"\u00e0":[288],"la":[289],"C":[290],"facilitated":[292],"external":[295],"system,":[297,316],"where":[298],"programmer":[300],"responsible":[302],"managing":[304],"dependencies":[305],"between":[306],"files.We":[307],"reuse":[308],"sound":[311],"optimal":[313],"integrate":[318],"its":[319,348],"tracking":[321],"compiler.Grounding":[324],"available":[331],"artefact":[334],"along":[335],"article.We":[338],"evaluate":[339],"it":[340,389,421],"large":[343],"project":[345,356],"test":[347],"performance.The":[349],"benchmark":[350],"replays":[351],"edits":[352],"version":[358],"control.These":[359],"benchmarks":[360],"part":[362],"artefact,":[365],"packaged":[366],"virtual":[369],"machine":[370],"image":[371],"easy":[373],"reproducibility.Importance":[374],"Although":[375],"programming":[384,396],"language,":[385],"describe":[388],"generally":[390],"throughout":[391],"paper.Many":[393],"currently":[394],"used":[395],"have":[398],"much":[403],"slower":[404],"than":[405],"necessary.Our":[406],"provides":[408],"this,":[413],"reusing":[415],"making":[420],"within":[423],"reasonable":[425],"amount":[426],"time.":[428]},"counts_by_year":[{"year":2025,"cited_by_count":1},{"year":2024,"cited_by_count":1},{"year":2022,"cited_by_count":2}],"updated_date":"2026-08-05T07:39:15.569665","created_date":"2020-02-24T00:00:00"}
