[librsvg/hospitality: 77/79] ARCHITECTURE.md - new file with a description of librsvg's internals
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg/hospitality: 77/79] ARCHITECTURE.md - new file with a description of librsvg's internals
- Date: Wed, 3 Jan 2018 02:34:32 +0000 (UTC)
commit 9b95fe46f04af697adb02de5b20b44187545e068
Author: Federico Mena Quintero <federico gnome org>
Date: Thu Dec 28 12:42:10 2017 -0600
ARCHITECTURE.md - new file with a description of librsvg's internals
ARCHITECTURE.md | 32 ++++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)
---
diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
new file mode 100644
index 0000000..051e6eb
--- /dev/null
+++ b/ARCHITECTURE.md
@@ -0,0 +1,32 @@
+Architecture of librsvg
+=======================
+
+This document describes the architecture of librsvg, and future plans
+for it.
+
+# A bit of history
+
+Librsvg is an old library. It started around 2001, when Eazel (the
+original makers of GNOME's file manager Nautilus) needed a library to
+render SVG images. At that time the SVG format was being
+standardized, so librsvg grew along with the SVG specification. This
+is why you will sometimes see references to deprecated SVG features in
+the source code.
+
+Librsvg started as an experiment to use libxml2's new SAX parser, so
+that SVG could be streamed in, instead of first creating a DOM.
+Originally it used libart as a rendering library; this was GNOME's
+first antialiased renderer with alpha compositing. Later, the
+renderer was replaced with Cairo.
+
+Librsvg started as a C library with an ad-hoc API. At some point it
+got turned into a GObject library, so that the main `RsvgHandle`
+object defines most of the entry points into the library. Through
+GObject Introspection, this allows librsvg to be used from other
+programming languages.
+
+In 2016, librsvg started getting ported to Rust. The plan is to leave
+the C API/ABI intact, but to have as much of the internals as possible
+implemented in Rust. This way we can use a memory-safe, modern
+language, but retain the traditional API/ABI.
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]