This patch adds the concept of procedurals to Cycles as well as an Alembic procedural as demonstration, see T79174 for discussion. A procedural works by creating extra Nodes in the scene before rendering.
An Alembic Procedural is created for each CacheFile from Blender, and each Blender Object possessing a MeshSequenceCache modifier is added to list of objects of the right procedural. The procedural's parameters derive from the CacheFile's properties.
The animation (and constant) data of the objects inside the Alembic archive is loaded at once at the beginning of the render and kept inside a cache. At each frame change we simply update the right socket of the corresponding Cycles Node if the data is animated. This allows for fast playback in the viewport (depending on the scene size and compute power).
As data is not persistent for final renders and since we load all the data at the begining of the render session, the procedural is only available during viewport renders at the moment. When an Alembic procedural is rendered, data from the archive are not read on the Blender side.
The procedural currently only supports Curve and Mesh objects, as well as reading some custom attributes for meshes (multiple UVs, and Vertex colors). Shader assignments are made using FaceSets found in the Alembic archive, if any, similarly to how Blender does it, or if there isn't any FaceSet, we simply use the first shader specified on the Blender object.
The procedural is set as an experimental feature. Although it works great for real-time-ish play back of animated data, it is not so robust for playing back physics simulations if the vertex count changes, lacks support for more attribute and object types, needs better interaction when editing shaders in the viewport, and a cache management to avoid memory issues.