This thesis examines trends in the academic and professional literature around immutable
data and its relationship with declarative User Interfaces (UIs). Immutable
data types are preferred by academic authors due to their increased safety, and commercial
languages are increasing their support for them over time. More recently,
declarative UIs are an exploding topic in industry, and these are related, although
not as closely as one would expect. Declarative programming tries to focus on highlevel
requirements, not low-level details. It is easier to do this if functions have no
side effects, and immutable data is a guaranteed way of achieving this. To highlight
this property, the declarative UI framework Flutter advertises “stateless widgets”,
but their existence puts in highlights the lack of this property in most widgets. Consequently,
we ask whether it is feasible to build a Graphical User Interface (GUI)
toolkit using purely immutable data structures. To accomplish this objective, a
purely immutable GUI toolkit is sketched and partially developed using Elm, a purely
functional language in which all data structures are immutable. To understand the
requirements of a GUI toolkit, we categorize and put in historical context, different
design paradigms for UIs and relate them to core software-design principles. Leading
toolkits allow developers to visualize and manage multiple views of their interfaces, including the view hierarchy, layout, interface to business logic, and focus management.
By creating a concrete example, the research aims to provide insight into the
limitations of utilizing purely immutable data within a GUI framework and suggests
future work to mitigate these. / Thesis / Master of Science (MSc)
Identifer | oai:union.ndltd.org:mcmaster.ca/oai:macsphere.mcmaster.ca:11375/29073 |
Date | 11 1900 |
Creators | Arumugasamy, Akshay Kumar |
Contributors | Anand, Christopher, Computing and Software |
Source Sets | McMaster University |
Language | en_US |
Detected Language | English |
Type | Thesis |
Page generated in 0.0026 seconds