Multitier programming: Difference between revisions

Content deleted Content added
WikiCleanerBot (talk | contribs)
m v2.05b - Bot T20 CW#61 - Fix errors for CW project (Reference before punctuation)
Citation bot (talk | contribs)
Removed URL that duplicated identifier. | Use this bot. Report bugs. | #UCB_CommandLine
 
(10 intermediate revisions by 5 users not shown)
Line 1:
{{Short description|Programming paradigm that unifies the development of different tiers in a single compilation unit}}
{{Programming paradigms}}
 
'''Multitier programming''' (or '''tierless programming''') is a [[programming paradigm]] for [[distributed computing|distributed software]], which typically follows a [[multitier architecture]], physically separating different functional aspects of the software into different ''tiers'' (e.g., the client, the server and the database in a Web application<ref>{{Cite journal|last1=Hull|first1=Richard|last2=Thiemann|first2=Peter|last3=Wadler|first3=Philip|date=2007|title=07051 Working Group Outcomes – Programming Paradigms for the Web: Web Programming and Web Services|url=http://drops.dagstuhl.de/opus/volltexte/2007/1127|journal=Programming Paradigms for the Web: Web Programming and Web Services|series=Dagstuhl Seminar Proceedings|___location=Dagstuhl, Germany|publisher=Internationales Begegnungs- und Forschungszentrum für Informatik (IBFI)|volume=07051}}</ref>). Multitier programming allows functionalities that span multiple of such tiers to be developed in a single compilation unit using a single [[programming language]]. Without multitier programming, tiers are developed using different languages, e.g., [[JavaScript]] for the Web client, [[PHP]] for the Web server and [[SQL]] for the database.<ref>{{cite journal|last1=Weisenburger|first1=Pascal|last2=Wirth|first2=Johannes|last3=Salvaneschi|first3=Guido|title=A Survey of Multitier Programming|journal=ACM Comput. Surv.|date=2020|volume=53|issue=4|pages=81:1–81:35|doi=10.1145/3397495|s2cid=218517772 |url=http://www.alexandria.unisg.ch/267228/1/2020_A-Survey-of-Multitier-Programming.pdf }}</ref> Multitier programming is often integrated into [[general-purpose language]]s by extending them with support for distribution.<ref>{{cite book|last1=Caldwell|first1=Sam |editor1-last=Miller|editor1-first=Heather|title=Programming Models for Distributed Computing|date=2016|chapter=General Purpose Languages Extended for Distribution|chapter-url=http://dist-prog-book.com/chapter/5/langs-extended-for-dist.html}}</ref>
 
Concepts from multitier programming were pioneered by the [[Hop (software)|Hop]]<ref name=":0">{{Cite journal|last=Serrano|first=Manuel|date=2012|title=Multitier programming in Hop.|url=https://dblp.org/rec/journals/cacm/SerranoB12.html|journal=Commun. ACM|volume=55|issue=8|pages=53–59|doi=10.1145/2240236.2240253|s2cid=2152326|url-access=subscription}}</ref> and [[Links (programming language)|Links]]<ref name=":1">{{Cite book|last=Cooper|first=Ezra|datetitle=2006Formal Methods for Components and Objects |titlechapter=Links: Web Programming Without Tiers. |date=2006|series=Lecture Notes in Computer Science|volume=4709|url=https://dblp.org/rec/conf/fmco/CooperLWY06.html|pages=266–296|doi=10.1007/978-3-540-74792-5_12|hdl=20.500.11820/ef5f100a-0366-4b85-8ef1-622fd7fbb53a |isbn=978-3-540-74791-8|s2cid=16397220 }}</ref> languages
and have found industrial adoption in solutions such as Ocsigen,<ref name=":2">{{Cite journal|last=Balat|first=Vincent|date=2006|title=Ocsigen: typing web interaction with objective Caml.|url=https://dblp.org/rec/conf/ml/Balat06.html|pages=84–94|doi=10.1145/1159876.1159889|s2cid=6131454|url-access=subscription}}</ref> [[Opa (programming language)|Opa]],<ref name=":3">Rajchenbach-Teller, D., & Sinot, Franois-Régis. (2010). Opa: Language support for a sane, safe and secure web. ''Proceedings of the OWASP AppSec Research'', ''2010''(1).</ref> [[WebSharper]],<ref name=":4">{{Cite journalbook|last1=Bjornson|first1=Joel|last2=Tayanovskyy|first2=Anton|last3=Granicz|first3=Adam|datetitle=2010Implementation and Application of Functional Languages |titlechapter=Composing Reactive GUIs in F# Using WebSharper |journaldate=Proceedings of the 22nd International Conference on Implementation and Application of Functional Languages2010|series=Lecture Notes in Computer Science |volume=6647 |page=49|___location=Berlin, Heidelberg|publisher=Springer-Verlag|doi=10.1007/978-3-642-24276-2_13|isbn=978-3-642-24275-5 }}</ref> [[Meteor (web framework)|Meteor]]<ref name=":5">{{Cite book|last=Strack, Isaac|url=https://www.worldcat.org/oclc/823718999|title=Getting started with Meteor JavaScript framework|date=January 2012|isbn=978-1-78216-083-0|___location=Birmingham|oclc=823718999}}</ref> or [[Google Web Toolkit|GWT]].<ref name=":6">{{Cite book|last=Kereki, Federico, 1960-|url=https://www.worldcat.org/oclc/606556208|title=Essential GWT: building for the web with Google Web toolkit 2|date=2011|publisher=Addison-Wesley|isbn=978-0-321-70563-1|___location=Upper Saddle River, NJ|oclc=606556208}}</ref>
 
Multitier programming is provides a ''global view'' on the distributed system. This aspect has been shown similar to other programming paradigms such as [[choreographic programming]],<ref>{{Cite journal |last1=Giallorenzo |first1=Saverio |last2=Montesi |first2=Fabrizio |last3=Peressotti |first3=Marco |last4=Richter |first4=David |last5=Salvaneschi |first5=Guido |last6=Weisenburger |first6=Pascal |date=2021 |editor-last=Møller |editor-first=Anders |editor2-last=Sridharan |editor2-first=Manu |title=Multiparty Languages: The Choreographic and Multitier Cases |url=https://drops.dagstuhl.de/opus/volltexte/2021/14065 |journal=35th European Conference on Object-Oriented Programming (ECOOP 2021) |series=Leibniz International Proceedings in Informatics (LIPIcs) |___location=Dagstuhl, Germany |publisher=Schloss Dagstuhl – Leibniz-Zentrum für Informatik |volume=194 |pages=22:1–22:27 |doi=10.4230/LIPIcs.ECOOP.2021.22 |doi-access=free |isbn=978-3-95977-190-0|s2cid=235748561 }}</ref> [[macroprogramming]],<ref name="Casadei 2023">{{cite journal | last=Casadei | first=Roberto | title=Macroprogramming: Concepts, State of the Art, and Opportunities of Macroscopic Behaviour Modelling | journal=ACM Computing Surveys | publisher=Association for Computing Machinery (ACM) | date=2023-01-11 | volume=55 | issue=13s | pages=1–37 | issn=0360-0300 | doi=10.1145/3579353 | pages2cid=245837830 | doi-access=free | arxiv=2201.03473 }}</ref> and [[aggregate computing]].<ref name="Beal Pianini Viroli 2015 pp. 22–30">{{cite journal | lastlast1=Beal | firstfirst1=Jacob | last2=Pianini | first2=Danilo | last3=Viroli | first3=Mirko | title=Aggregate Programming for the Internet of Things | journal=Computer | publisher=Institute of Electrical and Electronics Engineers (IEEE) | volume=48 | issue=9 | year=2015 | issn=0018-9162 | doi=10.1109/mc.2015.261 | pages=22–30| hdl=11585/520779 | s2cid=26413 | hdl-access=free }}</ref><ref>{{Cite journal |last1=Audrito |first1=Giorgio |last2=Casadei |first2=Roberto |last3=Damiani |first3=Ferruccio |last4=Salvaneschi |first4=Guido |last5=Viroli |first5=Mirko |date=2022 |editor-last=Ali |editor-first=Karim |editor2-last=Vitek |editor2-first=Jan |title=Functional Programming for Distributed Systems with XC |url=https://drops.dagstuhl.de/opus/volltexte/2022/16248 |journal=36th European Conference on Object-Oriented Programming (ECOOP 2022) |series=Leibniz International Proceedings in Informatics (LIPIcs) |___location=Dagstuhl, Germany |publisher=Schloss Dagstuhl – Leibniz-Zentrum für Informatik |volume=222 |pages=20:1–20:28 |doi=10.4230/LIPIcs.ECOOP.2022.20 |doi-access=free |isbn=978-3-95977-225-9|s2cid=249961384 }}</ref>
 
== Context ==
Line 99 ⟶ 98:
== List of multitier programming languages ==
 
* Hop/Hop.js<ref name=":0">{{Cite journal|last=Serrano|first=Manuel|date=2012|title=Multitier programming in Hop.|url=https://dblp.org/rec/journals/cacm/SerranoB12.html|journal=Commun. ACM|volume=55|issue=8|pages=53–59|doi=10.1145/2240236.2240253|s2cid=2152326|url-access=subscription}}</ref><ref>{{Cite journal|last=Serrano|first=Manuel|date=2006|title=Hop: a language for programming the web 2.0.|url=https://dblp.org/rec/conf/oopsla/SerranoGL06.html|pages=975–985|doi=10.1145/1176617.1176756|s2cid=14306230|url-access=subscription}}</ref><ref>{{Cite book|last=Serrano|first=Manuel|datetitle=2016Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming |titlechapter=A glimpse of Hopjs. |date=2016|url=https://dblp.org/rec/conf/icfp/SerranoP16.html|pages=180–192|doi=10.1145/2951913.2951916|isbn=9781450342193|s2cid=18393160 }}</ref>
* Links<ref name=":1">{{Cite book|last=Cooper|first=Ezra|datetitle=2006Formal Methods for Components and Objects |titlechapter=Links: Web Programming Without Tiers. |date=2006|series=Lecture Notes in Computer Science|volume=4709|url=https://dblp.org/rec/conf/fmco/CooperLWY06.html|pages=266–296|doi=10.1007/978-3-540-74792-5_12|hdl=20.500.11820/ef5f100a-0366-4b85-8ef1-622fd7fbb53a |isbn=978-3-540-74791-8|s2cid=16397220 }}</ref><ref>{{Cite journal|last=Fowler|first=Simon|date=2019|title=Exceptional asynchronous session types: session types without tiers.|url=https://dblp.org/rec/journals/pacmpl/FowlerLMD19.html|journal=Proc. ACM Program. Lang.|volume=3|issue=POPL|pages=28:1–28:29|doi=10.1145/3290341|s2cid=57757469|doi-access=free|hdl=1808/27512|hdl-access=free}}</ref>
*Ur/Web<ref>{{Cite journal|last=Chlipala|first=Adam|date=2015|title=Ur/Web: A Simple Model for Programming the Web.|url=https://dblp.org/rec/conf/popl/Chlipala15.html|pages=153–165|doi=10.1145/2676726.2677004|s2cid=9440677|url-access=subscription}}</ref>
*Eliom/Ocsigen<ref name=":2">{{Cite journal|last=Balat|first=Vincent|date=2006|title=Ocsigen: typing web interaction with objective Caml.|url=https://dblp.org/rec/conf/ml/Balat06.html|pages=84–94|doi=10.1145/1159876.1159889|s2cid=6131454|url-access=subscription}}</ref><ref>{{Cite book|last=Radanne|first=Gabriel|datetitle=Companion of the Web Conference 2018 on the Web Conference 2018 - WWW '18 |titlechapter=Tierless Web Programming in the Large. |date=2018|url=https://dblp.org/rec/conf/www/RadanneV18.html|pages=681–689|doi=10.1145/3184558.3185953|isbn=9781450356404|s2cid=3304415}}</ref>
*ScalaLoci<ref>{{Cite journal|last=Weisenburger|first=Pascal|date=2018|title=Distributed system development with ScalaLoci.|url=https://dblp.org/rec/journals/pacmpl/WeisenburgerKS18.html|journal=Proc. ACM Program. Lang.|volume=2|issue=OOPSLA|pages=129:1–129:30|doi=10.1145/3276499|s2cid=53090153|doi-access=free}}</ref>
*StiP.js<ref>{{Cite book|last=Philips|first=Laure|datetitle=Proceedings of the 2014 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software |titlechapter=Towards Tierless Web Development without Tierless Languages. |date=2014|url=https://dblp.org/rec/conf/oopsla/PhilipsRCM14.html|pages=69–81|doi=10.1145/2661136.2661146|isbn=9781450332101|s2cid=15774367}}</ref><ref>{{Cite journal|last=Philips|first=Laure|date=2018|title=Search-based Tier Assignment for Optimising Offline Availability in Multi-tier Web Applications.|url=https://dblp.org/rec/journals/programming/PhilipsKMR18.html|journal=Programming Journal|volume=2|issue=2|pages=3|doi=10.22152/programming-journal.org/2018/2/3|s2cid=11256561|doi-access=free|arxiv=1712.01161}}</ref>
*Scala Multi-Tier FRP<ref>{{Cite book|last=Reynders|first=Bob|datetitle=Proceedings of the 2014 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software |titlechapter=Multi-Tier Functional Reactive Programming for the Web. |date=2014|url=https://dblp.org/rec/conf/oopsla/ReyndersDP14.html|pages=55–68|doi=10.1145/2661136.2661140|isbn=9781450332101|s2cid=16761616}}</ref>
*Opa<ref name=":3">Rajchenbach-Teller, D., & Sinot, Franois-Régis. (2010). Opa: Language support for a sane, safe and secure web. ''Proceedings of the OWASP AppSec Research'', ''2010''(1).</ref>
*AmbientTalk/R<ref>{{Cite book|last=Carreton|first=Andoni Lombide|datetitle=2010Objects, Models, Components, Patterns |titlechapter=Loosely-Coupled Distributed Reactive Programming in Mobile Ad Hoc Networks. |date=2010|series=Lecture Notes in Computer Science|volume=6141|url=https://dblp.org/rec/conf/tools/CarretonMCM10.html|pages=41–60|doi=10.1007/978-3-642-13953-6_3|isbn=978-3-642-13952-9}}</ref><ref>{{Cite book|last=Dedecker|first=Jessie|date=2006|title=Ambient-Oriented Programming in AmbientTalk.|chapter=Ambient-Oriented Programming in Ambient ''Talk''|series=Lecture Notes in Computer Science|volume=4067|chapter-url=https://dblp.org/rec/conf/ecoop/DedeckerCMDM06.html|pages=230–254|doi=10.1007/11785477_16|isbn=978-3-540-35726-1}}</ref>
*ML5<ref>{{Cite book|last=VII|first=Tom Murphy|datetitle=2007Trustworthy Global Computing |titlechapter=Type-Safe Distributed Programming with ML5. |date=2007|series=Lecture Notes in Computer Science|volume=4912|url=https://dblp.org/rec/conf/tgc/VIICH07.html|pages=108–123|doi=10.1007/978-3-540-78663-4_9|isbn=978-3-540-78662-7|s2cid=12534714 }}</ref>
*WebSharper<ref name=":4">{{Cite journalbook|last1=Bjornson|first1=Joel|last2=Tayanovskyy|first2=Anton|last3=Granicz|first3=Adam|datetitle=2010Implementation and Application of Functional Languages |titlechapter=Composing Reactive GUIs in F# Using WebSharper |journaldate=Proceedings of the 22nd International Conference on Implementation and Application of Functional Languages2010|series=Lecture Notes in Computer Science |volume=6647 |page=49|___location=Berlin, Heidelberg|publisher=Springer-Verlag|doi=10.1007/978-3-642-24276-2_13|isbn=978-3-642-24275-5 }}</ref>
*Haste<ref>{{Cite journal|last1=Ekblad|first1=Anton|last2=Claessen|first2=Koen|date=2015-05-11|title=A seamless, client-centric programming model for type safe web applications|url=http://dx.doi.org/10.1145/2775050.2633367|journal=ACM SIGPLAN Notices|volume=49|issue=12|pages=79–89|doi=10.1145/2775050.2633367|issn=0362-1340|url-access=subscription}}</ref>
*Fun<ref>{{Cite web|title=Fun (a programming language for the realtime web)|url=http://marcuswest.in/essays/fun-intro/|website=marcuswest.in|access-date=2020-05-04}}</ref>
*Koka<ref>{{Cite journal|last=Leijen|first=Daan|date=2014|title=Koka: Programming with Row Polymorphic Effect Types.|journal=Electronic Proceedings in Theoretical Computer Science|volume=153|url=https://dblp.org/rec/journals/corr/Leijen14.html|pages=100–126|doi=10.4204/EPTCS.153.8|arxiv=1406.2061|s2cid=14902937}}</ref>
*Multi-Tier Calculus<ref>{{Cite book|last=Neubauer|first=Matthias|datetitle=2005Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages |titlechapter=From sequential programs to multi-tier applications by program transformation. |date=2005|url=https://dblp.org/rec/conf/popl/NeubauerT05.html|pages=221–232|doi=10.1145/1040305.1040324|isbn=158113830X|s2cid=10338936}}</ref>
*Swift<ref>{{Cite journal|last1=ChongStephen|last2=LiuJed|last3=C|first3=MyersAndrew|last4=QiXin|last5=VikramK|last6=ZhengLantian|last7=ZhengXin|date=2007-10-14|title=Secure web applications via automatic partitioning|url=https://dl.acm.org/doi/abs/10.1145/1323293.1294265|journal=ACM SIGOPS Operating Systems Review|volume=41|issue=6|pages=31–44|language=EN|doi=10.1145/1323293.1294265|hdl=1813/5769 |hdl-access=free}}</ref>
*Volta<ref>{{Cite journal|last=Manolescu|first=Dragos|date=2008|title=Volta: Developing Distributed Applications by Recompiling.|url=https://dblp.org/rec/journals/software/ManolescuBL08.html|journal=IEEE Software|volume=25|issue=5|pages=53–59|doi=10.1109/MS.2008.131|s2cid=24360031|url-access=subscription}}</ref>
*GWT<ref name=":6">{{Cite book|last=Kereki, Federico, 1960-|url=https://www.worldcat.org/oclc/606556208|title=Essential GWT: building for the web with Google Web toolkit 2|date=2011|publisher=Addison-Wesley|isbn=978-0-321-70563-1|___location=Upper Saddle River, NJ|oclc=606556208}}</ref>
*Meteor<ref name=":5">{{Cite book|last=Strack, Isaac|url=https://www.worldcat.org/oclc/823718999|title=Getting started with Meteor JavaScript framework|date=January 2012|isbn=978-1-78216-083-0|___location=Birmingham|oclc=823718999}}</ref>
*J-Orchestra<ref>{{Cite book|last=Tilevich|first=Eli|datetitle=ECOOP 2002 — Object-Oriented Programming |titlechapter=J-Orchestra: Automatic Java Application Partitioning. |date=2002|series=Lecture Notes in Computer Science|volume=2374|url=https://dblp.org/rec/conf/ecoop/TilevichS02.html|pages=178–204|doi=10.1007/3-540-47993-7_8|hdl=1853/6531 |isbn=978-3-540-43759-8}}</ref>
*Hiphop<ref>{{Cite journalbook|last1=Berry|first1=Gérard|last2=Nicolas|first2=Cyprien|last3=Serrano|first3=Manuel|date=2011|title=Hiphop|url=http://dx.doi.org/10.1145/2093328.2093337|journal=Proceedings of the 1st ACM SIGPLAN Internationalinternational Workshopworkshop on Programming Languagelanguage and Systemssystems Technologiestechnologies for Internetinternet Clientsclients |chapter=Hiphop |date=2011|chapter- PLASTIC '11url=http://dx.doi.org/10.1145/2093328.2093337|page=49|___location=New York, New York, USA|publisher=ACM Press|doi=10.1145/2093328.2093337|isbn=978-1-4503-1171-7|s2cid=1280230}}</ref>
*Distributed Orc<ref>{{Cite journal|last=Thywissen|first=John A.|date=2016|title=Implicitly Distributing Pervasively Concurrent Programs: Extended abstract.|url=https://dblp.org/rec/conf/ecoop/ThywissenPC16.html|pages=1|doi=10.1145/2957319.2957370|s2cid=6124391|url-access=subscription}}</ref>
*Jif/split<ref>{{Cite journal|last=Zdancewic|first=Steve|date=2002|title=Secure program partitioning.|url=https://dblp.org/rec/journals/tocs/ZdancewicZNM02.html|journal=ACM Trans. Comput. Syst.|volume=20|issue=3|pages=283–328|doi=10.1145/566340.566343|s2cid=1776939|url-access=subscription}}</ref>
*Fission<ref>{{Cite journal|last1=Guha|first1=Arjun|last2=Jeannin|first2=Jean-Baptiste|last3=Nigam|first3=Rachit|last4=Tangen|first4=Jane|last5=Shambaugh|first5=Rian|date=2017|editor-last=Lerner|editor-first=Benjamin S.|editor2-last=Bodík|editor2-first=Rastislav|editor3-last=Krishnamurthi|editor3-first=Shriram|title=Fission: Secure Dynamic Code-Splitting for JavaScript|url=http://drops.dagstuhl.de/opus/volltexte/2017/7124|journal=2nd Summit on Advances in Programming Languages (SNAPL 2017)|series=Leibniz International Proceedings in Informatics (LIPIcs)|___location=Dagstuhl, Germany|publisher=Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik|volume=71|pages=5:1–5:13|doi=10.4230/LIPIcs.SNAPL.2017.5|doi-access=free |isbn=978-3-95977-032-3}}</ref>
*SIF<ref>{{Cite journal|last=Chong|first=Stephen|date=2007|title=SIF: Enforcing Confidentiality and Integrity in Web Applications.|url=https://www.usenix.org/conference/16th-usenix-security-symposium/sif-enforcing-confidentiality-and-integrity-web}}</ref>
*WebDSL<ref>{{Cite journal|last=Groenewegen|first=Danny M.|date=2008|title=WebDSL: a ___domain-specific language for dynamic web applications.|url=https://dblp.org/rec/conf/oopsla/GroenewegenHKV08.html|pages=779–780|doi=10.1145/1449814.1449858|s2cid=8073129|url-access=subscription}}</ref>
*Acute<ref>{{Cite journal|last=Sewell|first=Peter|date=2005|title=Acute: high-level programming language design for distributed computation.|url=https://dblp.org/rec/conf/icfp/SewellLWNAHV05.html|pages=15–26|doi=10.1145/1086365.1086370|s2cid=1308126|url-access=subscription}}</ref>
*Mobl<ref>{{Cite book|last=Hemel|first=Zef|datetitle=Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications |titlechapter=Declaratively programming the mobile web with Mobl. |date=2011|url=https://dblp.org/rec/conf/oopsla/HemelV11.html|pages=695–712|doi=10.1145/2048066.2048121|isbn=9781450309400|s2cid=10480906}}</ref>
*High-Level Abstractions for Web Programming<ref>{{Cite book|last=Richard-Foy|first=Julien|datetitle=2013Proceedings of the 12th international conference on Generative programming: Concepts & experiences |titlechapter=Efficient high-level abstractions for web programming. |date=2013|url=https://dblp.org/rec/conf/gpce/Richard-FoyBJ13.html|pages=53–60|doi=10.1145/2517208.2517227|isbn=9781450323734|s2cid=14305623}}</ref>
 
== References ==
{{reflist}}
 
{{Programming paradigms navbox}}
 
[[Category:Programming paradigms]]