Index: doc/bibliography/cfa.bib
===================================================================
--- doc/bibliography/cfa.bib	(revision 309be815f9581d269c57765858cb936357aef479)
+++ doc/bibliography/cfa.bib	(revision 55b2f5aef1766655c47ff12aeac3104e892a917b)
@@ -3057,4 +3057,14 @@
     pages	= {147-148},
     note	= {Reprinted in \cite{Yourdon79} pp. 29--36.},
+}
+
+@online{GObject,
+    keywords = {GObject},
+    contributor = {a3moss@uwaterloo.ca},
+    author = {{The GNOME Project}},
+    title = {{GObject} Reference Manual},
+    year = 2014,
+    url = {https://developer.gnome.org/gobject/stable/},
+    urldate = {2017-04-04}
 }
 
@@ -4553,4 +4563,22 @@
 }
 
+@book{obj-c-book,
+    keywords = {objective-c},
+    contributor = {a3moss@uwaterloo.ca},
+    author = {{Apple Computer Inc.}},
+    title = {The {Objective-C} Programming Language},
+    year = 2002
+}
+
+@online{xcode7,
+    keywords = {objective-c},
+    contributor = {a3moss@uwaterloo.ca},
+    author = {{Apple Computer Inc.}},
+    title = {{Xcode} 7 Release Notes},
+    year = 2015,
+    url = {https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html},
+    urldate = {2017-04-04}
+}
+
 @book{Beta,
     keywords	= {Beta, object oriented, concurrency, exceptions},
@@ -6861,4 +6889,14 @@
 }
 
+@online{Vala,
+    keywords = {GObject, Vala},
+    contributor = {a3moss@uwaterloo.ca},
+    author = {{The GNOME Project}},
+    title = {Vala Reference Manual},
+    year = 2017,
+    url = {https://wiki.gnome.org/Projects/Vala/Manual},
+    urldate = {2017-04-04}
+}
+
 @inproceedings{Amdahl67,
     author	= {Gene M. Amdahl},
Index: doc/generic_types/generic_types.tex
===================================================================
--- doc/generic_types/generic_types.tex	(revision 309be815f9581d269c57765858cb936357aef479)
+++ doc/generic_types/generic_types.tex	(revision 55b2f5aef1766655c47ff12aeac3104e892a917b)
@@ -859,5 +859,5 @@
 Cyclone also provides capabilities for polymorphic functions and existential types~\citep{Grossman06}, similar in concept to \CFA's @forall@ functions and generic types. Cyclone existential types can include function pointers in a construct similar to a virtual function table, but these pointers must be explicitly initialized at some point in the code, a tedious and potentially error-prone process. Furthermore, Cyclone's polymorphic functions and types are restricted in that they may only abstract over types with the same layout and calling convention as @void*@, in practice only pointer types and @int@ - in \CFA terms, all Cyclone polymorphism must be dtype-static. This design provides the efficiency benefits discussed in Section~\ref{sec:generic-apps} for dtype-static polymorphism, but is more restrictive than \CFA's more general model.
 
-\TODO{Talk about GObject, other object-oriented frameworks for C (Objective-C)?}
+Apple's Objective-C \citep{obj-c-book} is another industrially successful set of extensions to C. The Objective-C language model is a fairly radical departure from C, adding object-orientation and message-passing. Objective-C implements variadic functions using the C @va_arg@ mechanism, and did not support type-checked generics until recently \citep{xcode7}, historically using less-efficient and more error-prone runtime checking of object types instead. The GObject framework \citep{GObject} also adds object-orientation with runtime type-checking and reference-counting garbage-collection to C; these are much more intrusive feature additions than those provided by \CFA, in addition to the runtime overhead of reference-counting. The Vala programming language \citep{Vala} compiles to GObject-based C, and so adds the burden of learning a separate language syntax to the aforementioned demerits of GObject as a modernization path for existing C code-bases.
 
 Go \citep{Go} and Rust \citep{Rust} are both modern, compiled languages with abstraction features similar to \CFA traits, \emph{interfaces} in Go and \emph{traits} in Rust. However, both languages represent dramatic departures from C in terms of language model, and neither has the same level of compatibility with C as \CFA. Go is a garbage-collected language, imposing the associated runtime overhead, and complicating foreign-function calls with the necessity of accounting for data transfer between the managed Go runtime and the unmanaged C runtime. Furthermore, while generic types and functions are available in Go, they are limited to a small fixed set provided by the compiler, with no language facility to define more. Rust is not garbage-collected, and thus has a lighter-weight runtime that is more easily interoperable with C. It also possesses much more powerful abstraction capabilities for writing generic code than Go. On the other hand, Rust's borrow-checker, while it does provide strong safety guarantees, is complex and difficult to learn, and imposes a distinctly idiomatic programming style on Rust. \CFA, with its more modest safety features, is significantly easier to port C code to, while maintaining the idiomatic style of the original source.
