{"id":"https://openalex.org/W3006196819","doi":"https://doi.org/10.22152/programming-journal.org/2020/4/17","title":"Implementing a Language for Distributed Systems: Choices and Experiences with Type Level and Macro Programming in Scala","display_name":"Implementing a Language for Distributed Systems: Choices and Experiences with Type Level and Macro Programming in Scala","publication_year":2020,"publication_date":"2020-02-14","ids":{"openalex":"https://openalex.org/W3006196819","doi":"https://doi.org/10.22152/programming-journal.org/2020/4/17","mag":"3006196819"},"language":"en","primary_location":{"id":"doi:10.22152/programming-journal.org/2020/4/17","is_oa":false,"landing_page_url":"https://doi.org/10.22152/programming-journal.org/2020/4/17","pdf_url":null,"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":"green","oa_url":"https://arxiv.org/pdf/2002.06184","any_repository_has_fulltext":true},"authorships":[{"author_position":"first","author":{"id":null,"display_name":"Pascal Weisenburger","orcid":null},"institutions":[{"id":"https://openalex.org/I31512782","display_name":"Technical University of Darmstadt","ror":"https://ror.org/05n911h24","country_code":"DE","type":"education","lineage":["https://openalex.org/I31512782"]}],"countries":["DE"],"is_corresponding":true,"raw_author_name":"Pascal Weisenburger","raw_affiliation_strings":["TU Darmstadt, Germany"],"affiliations":[{"raw_affiliation_string":"TU Darmstadt, Germany","institution_ids":["https://openalex.org/I31512782"]}]},{"author_position":"last","author":{"id":null,"display_name":"Guido Salvaneschi","orcid":null},"institutions":[{"id":"https://openalex.org/I31512782","display_name":"Technical University of Darmstadt","ror":"https://ror.org/05n911h24","country_code":"DE","type":"education","lineage":["https://openalex.org/I31512782"]}],"countries":["DE"],"is_corresponding":false,"raw_author_name":"Guido Salvaneschi","raw_affiliation_strings":["TU Darmstadt, Germany"],"affiliations":[{"raw_affiliation_string":"TU Darmstadt, Germany","institution_ids":["https://openalex.org/I31512782"]}]}],"institutions":[],"countries_distinct_count":1,"institutions_distinct_count":2,"corresponding_author_ids":[],"corresponding_institution_ids":["https://openalex.org/I31512782"],"apc_list":null,"apc_paid":null,"fwci":0.2743,"has_fulltext":false,"cited_by_count":2,"citation_normalized_percentile":{"value":0.62227555,"is_in_top_1_percent":false,"is_in_top_10_percent":false},"cited_by_percentile_year":{"min":89,"max":94},"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.6184999942779541,"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.6184999942779541,"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/T11986","display_name":"Scientific Computing and Data Management","score":0.08969999849796295,"subfield":{"id":"https://openalex.org/subfields/1802","display_name":"Information Systems and Management"},"field":{"id":"https://openalex.org/fields/18","display_name":"Decision Sciences"},"domain":{"id":"https://openalex.org/domains/2","display_name":"Social Sciences"}},{"id":"https://openalex.org/T12490","display_name":"Software Engineering and Design Patterns","score":0.03999999910593033,"subfield":{"id":"https://openalex.org/subfields/3303","display_name":"Development"},"field":{"id":"https://openalex.org/fields/33","display_name":"Social Sciences"},"domain":{"id":"https://openalex.org/domains/2","display_name":"Social Sciences"}}],"keywords":[{"id":"https://openalex.org/keywords/scala","display_name":"Scala","score":0.666100025177002},{"id":"https://openalex.org/keywords/compiler","display_name":"Compiler","score":0.5852000117301941},{"id":"https://openalex.org/keywords/serialization","display_name":"Serialization","score":0.5612000226974487},{"id":"https://openalex.org/keywords/macro","display_name":"Macro","score":0.5239999890327454},{"id":"https://openalex.org/keywords/code-generation","display_name":"Code generation","score":0.4537999927997589},{"id":"https://openalex.org/keywords/abstraction","display_name":"Abstraction","score":0.4309999942779541},{"id":"https://openalex.org/keywords/data-type","display_name":"Data type","score":0.42559999227523804},{"id":"https://openalex.org/keywords/type-safety","display_name":"Type safety","score":0.41429999470710754},{"id":"https://openalex.org/keywords/language-construct","display_name":"Language construct","score":0.3995000123977661},{"id":"https://openalex.org/keywords/high-level-programming-language","display_name":"High-level programming language","score":0.3903000056743622}],"concepts":[{"id":"https://openalex.org/C41008148","wikidata":"https://www.wikidata.org/wiki/Q21198","display_name":"Computer science","level":0,"score":0.8812999725341797},{"id":"https://openalex.org/C199360897","wikidata":"https://www.wikidata.org/wiki/Q9143","display_name":"Programming language","level":1,"score":0.7601000070571899},{"id":"https://openalex.org/C109701466","wikidata":"https://www.wikidata.org/wiki/Q460584","display_name":"Scala","level":3,"score":0.666100025177002},{"id":"https://openalex.org/C169590947","wikidata":"https://www.wikidata.org/wiki/Q47506","display_name":"Compiler","level":2,"score":0.5852000117301941},{"id":"https://openalex.org/C52723943","wikidata":"https://www.wikidata.org/wiki/Q1127410","display_name":"Serialization","level":2,"score":0.5612000226974487},{"id":"https://openalex.org/C166955791","wikidata":"https://www.wikidata.org/wiki/Q629579","display_name":"Macro","level":2,"score":0.5239999890327454},{"id":"https://openalex.org/C133162039","wikidata":"https://www.wikidata.org/wiki/Q1061077","display_name":"Code generation","level":3,"score":0.4537999927997589},{"id":"https://openalex.org/C124304363","wikidata":"https://www.wikidata.org/wiki/Q673661","display_name":"Abstraction","level":2,"score":0.4309999942779541},{"id":"https://openalex.org/C138958017","wikidata":"https://www.wikidata.org/wiki/Q190087","display_name":"Data type","level":2,"score":0.42559999227523804},{"id":"https://openalex.org/C44779574","wikidata":"https://www.wikidata.org/wiki/Q736866","display_name":"Type safety","level":2,"score":0.41429999470710754},{"id":"https://openalex.org/C48859967","wikidata":"https://www.wikidata.org/wiki/Q6486712","display_name":"Language construct","level":2,"score":0.3995000123977661},{"id":"https://openalex.org/C19024347","wikidata":"https://www.wikidata.org/wiki/Q211496","display_name":"High-level programming language","level":3,"score":0.3903000056743622},{"id":"https://openalex.org/C2776760102","wikidata":"https://www.wikidata.org/wiki/Q5139990","display_name":"Code (set theory)","level":3,"score":0.35249999165534973},{"id":"https://openalex.org/C41608201","wikidata":"https://www.wikidata.org/wiki/Q980509","display_name":"Embedding","level":2,"score":0.35040000081062317},{"id":"https://openalex.org/C124577441","wikidata":"https://www.wikidata.org/wiki/Q558937","display_name":"Low-level programming language","level":5,"score":0.34950000047683716},{"id":"https://openalex.org/C168167062","wikidata":"https://www.wikidata.org/wiki/Q1117970","display_name":"Component (thermodynamics)","level":2,"score":0.3443000018596649},{"id":"https://openalex.org/C25343380","wikidata":"https://www.wikidata.org/wiki/Q277521","display_name":"Relation (database)","level":2,"score":0.33079999685287476},{"id":"https://openalex.org/C47487241","wikidata":"https://www.wikidata.org/wiki/Q5227230","display_name":"Data access","level":2,"score":0.32330000400543213},{"id":"https://openalex.org/C172086080","wikidata":"https://www.wikidata.org/wiki/Q62270","display_name":"Remote procedure call","level":2,"score":0.3122999966144562},{"id":"https://openalex.org/C34165917","wikidata":"https://www.wikidata.org/wiki/Q188267","display_name":"Programming paradigm","level":2,"score":0.30630001425743103},{"id":"https://openalex.org/C162319229","wikidata":"https://www.wikidata.org/wiki/Q175263","display_name":"Data structure","level":2,"score":0.3010999858379364},{"id":"https://openalex.org/C201997060","wikidata":"https://www.wikidata.org/wiki/Q4117406","display_name":"Programming language implementation","level":5,"score":0.29910001158714294},{"id":"https://openalex.org/C147358964","wikidata":"https://www.wikidata.org/wiki/Q1200992","display_name":"Abstraction layer","level":3,"score":0.2944999933242798},{"id":"https://openalex.org/C175971053","wikidata":"https://www.wikidata.org/wiki/Q827335","display_name":"Abstract data type","level":2,"score":0.29269999265670776},{"id":"https://openalex.org/C120314980","wikidata":"https://www.wikidata.org/wiki/Q180634","display_name":"Distributed computing","level":1,"score":0.2919999957084656},{"id":"https://openalex.org/C570499","wikidata":"https://www.wikidata.org/wiki/Q1289116","display_name":"First-generation programming language","level":3,"score":0.28940001130104065},{"id":"https://openalex.org/C97686452","wikidata":"https://www.wikidata.org/wiki/Q7604153","display_name":"Static analysis","level":2,"score":0.28839999437332153},{"id":"https://openalex.org/C43126263","wikidata":"https://www.wikidata.org/wiki/Q128751","display_name":"Source code","level":2,"score":0.2865000069141388},{"id":"https://openalex.org/C80444323","wikidata":"https://www.wikidata.org/wiki/Q2878974","display_name":"Theoretical computer science","level":1,"score":0.2777999937534332},{"id":"https://openalex.org/C126831891","wikidata":"https://www.wikidata.org/wiki/Q221673","display_name":"Host (biology)","level":2,"score":0.27709999680519104},{"id":"https://openalex.org/C184337299","wikidata":"https://www.wikidata.org/wiki/Q1437428","display_name":"Semantics (computer science)","level":2,"score":0.2635999917984009},{"id":"https://openalex.org/C193702766","wikidata":"https://www.wikidata.org/wiki/Q1414548","display_name":"Concurrency","level":2,"score":0.2623000144958496},{"id":"https://openalex.org/C115903868","wikidata":"https://www.wikidata.org/wiki/Q80993","display_name":"Software engineering","level":1,"score":0.2590999901294708}],"mesh":[],"locations_count":3,"locations":[{"id":"doi:10.22152/programming-journal.org/2020/4/17","is_oa":false,"landing_page_url":"https://doi.org/10.22152/programming-journal.org/2020/4/17","pdf_url":null,"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.06184","is_oa":true,"landing_page_url":"http://arxiv.org/abs/2002.06184","pdf_url":"https://arxiv.org/pdf/2002.06184","source":{"id":"https://openalex.org/S4306400194","display_name":"arXiv (Cornell University)","issn_l":null,"issn":null,"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:tubiblio.ulb.tu-darmstadt.de:120224","is_oa":false,"landing_page_url":"http://programming-journal.org/2020/4/17/","pdf_url":null,"source":{"id":"https://openalex.org/S4377196390","display_name":"TUbilio (Technical University of Darmstadt)","issn_l":null,"issn":null,"is_oa":false,"is_in_doaj":false,"is_core":false,"host_organization":"https://openalex.org/I31512782","host_organization_name":"Technische Universit\u00e4t Darmstadt","host_organization_lineage":["https://openalex.org/I31512782"],"host_organization_lineage_names":[],"type":"repository"},"license":null,"license_id":null,"version":"submittedVersion","is_accepted":false,"is_published":false,"raw_source_name":"","raw_type":"Artikel"}],"best_oa_location":{"id":"pmh:oai:arXiv.org:2002.06184","is_oa":true,"landing_page_url":"http://arxiv.org/abs/2002.06184","pdf_url":"https://arxiv.org/pdf/2002.06184","source":{"id":"https://openalex.org/S4306400194","display_name":"arXiv (Cornell University)","issn_l":null,"issn":null,"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"},"sustainable_development_goals":[],"awards":[],"funders":[],"has_content":{"pdf":false,"grobid_xml":false},"content_urls":null,"referenced_works_count":0,"referenced_works":[],"related_works":[],"abstract_inverted_index":{"Multitier":[0],"programming":[1,151],"languages":[2],"reduce":[3],"the":[4,12,24,27,30,33,58,66,88,92,98,122,161,169,174,192],"complexity":[5],"of":[6,32,124,146,196,198],"developing":[7,11],"distributed":[8,13,34],"systems":[9],"by":[10,107],"system":[14,155,189],"in":[15],"a":[16,138,144],"single":[17],"coherent":[18],"code":[19,28,94],"base.":[20],"The":[21,85],"compiler":[22,86],"or":[23],"runtime":[25],"separate":[26],"for":[29,178,185],"components":[31,60,103,113],"system,":[35],"enabling":[36],"abstraction":[37],"over":[38],"low":[39],"level":[40,150],"implementation":[41,123,181],"details":[42],"such":[43,193],"as":[44,137],"data":[45,110],"representation,":[46],"serialization":[47],"and":[48,61,75,78,95,127,152,173,182],"network":[49],"protocols.":[50],"Our":[51],"ScalaLoci":[52],"language":[53,133,162],"allows":[54],"developers":[55],"to":[56,159,190],"declare":[57],"different":[59],"their":[62],"architectural":[63],"relation":[64],"at":[65],"type":[67,81,149],"level,":[68],"allowing":[69],"static":[70,80],"reasoning":[71],"about":[72,73],"distribution":[74],"remote":[76],"communication":[77,99],"guaranteeing":[79],"safety":[82],"across":[83],"components.":[84],"splits":[87],"multitier":[89],"program":[90],"into":[91,135],"component-specific":[93],"automatically":[96],"generates":[97],"boilerplate.":[100],"Communication":[101],"between":[102,112],"can":[104,156],"be":[105,157],"modeled":[106],"declaratively":[108],"specifying":[109],"flows":[111],"using":[114],"reactive":[115],"programming.&#13;\\n&#13;\\nIn":[116],"this":[117],"paper,":[118],"we":[119,171,176],"report":[120],"on":[121,168],"our":[125,128,132,179],"design":[126],"experience":[129],"with":[130,163],"embedding":[131,197],"features":[134],"Scala":[136],"host":[139],"language.":[140],"We":[141,166],"show":[142],"how":[143],"combination":[145],"Scala\u2019s":[147],"advanced":[148],"its":[153],"macro":[154,188],"used":[158],"enrich":[160],"new":[164],"abstractions.":[165,200],"comment":[167],"challenges":[170],"encountered":[172],"solutions":[175],"developed":[177],"current":[180],"outline":[183],"suggestions":[184],"an":[186],"improved":[187],"support":[191],"use":[194],"cases":[195],"domain-specific":[199]},"counts_by_year":[{"year":2022,"cited_by_count":1},{"year":2021,"cited_by_count":1}],"updated_date":"2026-03-20T23:20:44.827607","created_date":"2020-02-24T00:00:00"}
