Add pages to docs (#92)

* Explicit error for query:next

* Add drain to docs

* Fix next call

* Add relationships page
This commit is contained in:
Marcus 2024-07-31 02:43:24 +02:00 committed by GitHub
parent 24f9f5868b
commit 51ed9e2173
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 806 additions and 356 deletions

View file

@ -35,9 +35,9 @@ export default defineConfig({
{
text: 'Concepts',
items: [
{ text: 'Entities', link: 'learn/concepts/entities' },
{ text: 'Static Components', link: 'learn/concepts/static-components' },
{ text: 'Queries', link: 'learn/concepts/queries' },
{ text: 'Entities and Components', link: 'learn/concepts/entities-and-components' },
{ text: 'Builtin Components', link: 'learn/concepts/builtin-components' },
{ text: 'Relationships', link: 'learn/concepts/relationships' },
]
},
{

View file

@ -8,8 +8,31 @@ Jecs. Just an Entity Component System.
```luau
jecs.World: World
```
A world is a container of all ECS data. Games can have multiple worlds but component IDs may conflict between worlds. Ensure to register the same component IDs in the same order for each world.
### Wildcard
```luau
jecs.Wildcard: Entity
```
Builtin component type. This ID is used for [wildcard queries]().
### Component
```luau
jecs.Component: Entity
```
Builtin component type. Every ID created with [world:component()](world.md#component()) has this type added to it. This is meant for querying every component ID.
### ChildOf
```luau
jecs.ChildOf: Entity
```
Builtin component type. This ID is for creating parent-child hierarchies.
:::
### Rest
```luau
jecs.Rest: Entity
```
## Functions

View file

@ -1,9 +1,21 @@
# Query
# Query
A World contains entities which have components. The World is queryable and can be used to get entities with a specific set of components.
## Functions
### drain()
```luau
function query:drain(): Query
```
This function will impede it from being reset when the query is being iterated.
### next()
```luau
function query:next(): Query
```
Get the next result in the query. Drain must have been called beforehand or otherwise it will error.
### with()
```luau
function query:with(

View file

@ -133,4 +133,33 @@ for (const [id, position, velocity] of world.query(Position, Velocity) {
:::info
Queries are uncached by default, this is generally very cheap unless you have high fragmentation from e.g. relationships.
:::
### target()
```luau
function World:target(
entity: Entity, -- The entity
relation: Entity -- The relationship between the entity and the target
): Entity? -- Returns the parent of the child
```
Get the target of a relationship.
This will return a target (second element of a pair) of the entity for the specified relationship.
If there is no pair with specified relationship, it will return nil.
### parent()
```luau
function World:parent(
child: Entity -- The child ID to find the parent of
): Entity? -- Returns the parent of the child
```
Get parent (target of ChildOf relationship) for entity. If there is no ChildOf relationship pair, it will return nil.
This operation is the same as calling:
```luau
world:target(entity, jecs.ChildOf)
```

View file

@ -0,0 +1,109 @@
# Entities and Components
## Entities
Entities represent things in a game. In a game there may be entities of characters, buildings, projectiles, particle effects etc.
By itself, an entity is just an unique identifier without any data
### Creation
## Components
A component is something that is added to an entity. Components can simply tag an entity ("this entity is an `Npc`"), attach data to an entity ("this entity is at `Position` `Vector3.new(10, 20, 30)`") and create relationships between entities ("bob `Likes` alice") that may also contain data ("bob `Eats` `10` apples").
### Operations
Operation | Description
----------|------------
`get` | Get a specific component or set of components from an entity.
`add` | Adds component to an entity. If entity already has the component, `add` does nothing.
`set` | Sets the value of a component for an entity. `set` behaves as a combination of `add` and `get`
`remove` | Removes component from entity. If entity doesn't have the component, `remove` does nothing.
`clear` | Remove all components from an entity. Clearing is more efficient than removing one by one.
### Components are entities
In an ECS, components need to be uniquely identified. In Jecs this is done by making each component is its own unique entity. If a game has a component Position and Velocity, there will be two entities, one for each component. Component entities can be distinguished from "regular" entities as they have a `Component` component. An example:
:::code-group
```luau [luau]
local Position = world:component() :: jecs.Entity<Vector3>
print(world:has(Position, Jecs.Component))
```
```typescript [typescript]
const Position = world.component<Vector3>();
print(world.has(Position, Jecs.Component))
```
All of the APIs that apply to regular entities also apply to component entities. This means it is possible to contexualize components with logic by adding traits to components
:::code-group
```luau [luau]
local Networked = world:component()
local Type = world:component()
local Name = world:component()
local Position = world:component() :: jecs.Entity<Vector3>
world:add(Position, Networked)
world:set(Posiition, Name, "Position")
world:set(Position, Type, { size = 12, type = "Vector3" } ) -- 12 bytes to represent a Vector3
for id, ty, name in world:query(Type, Name):with(Networked) do
local batch = {}
for entity, data in world:query(id) do
table.insert(batch, { entity = entity, data = data })
end
-- entities are sized f64
local packet = buffer.create(#batch * (8 + ty.size))
local offset = 0
for _, entityData in batch do
offset+=8
buffer.writef64(packet, offset, entityData.entity)
if ty.type == "Vector3" then
local vec3 = entity.data :: Vector3
offset += 4
buffer.writei32(packet, offset, vec3.X)
offset += 4
buffer.writei32(packet, offset, vec3.Y)
offset += 4
buffer.writei32(packet, offset, vec3.Z)
end
end
updatePositions:FireServer(packet)
end
```
```typescript [typescript]
const Networked = world.component()
const Type = world.component()
const Name = world.component()
const Position = world.component<Vector3>();
world.add(Position, Networked)
world.set(Posiition, Name, "Position")
world.set(Position, Type, { size: 12, type: "Vector3" } ) // 12 bytes to represent a Vector3
for (const [id, ty, name] of world.query(Type, Name).with(Networked)) {
const batch = new Array<{ entity: Entity, data: unknown}>()
for (const [entity, data] of world.query(id)) {
batch.push({ entity, data })
}
// entities are sized f64
const packet = buffer.create(batch.size() * (8 + ty.size))
const offset = 0
for (const [_, entityData] of batch) {
offset+=8
buffer.writef64(packet, offset, entityData.entity)
if (ty.type == "Vector3") {
const vec3 = entity.data as Vector3
offset += 4
buffer.writei32(packet, offsetm, vec3.X)
offset += 4
buffer.writei32(packet, offset, vec3.Y)
offset += 4
buffer.writei32(packet, offset, vec3.Z)
}
}
updatePositions.FireServer(packet)
}
```

View file

@ -1 +0,0 @@

View file

@ -0,0 +1,228 @@
# Relationships
Relationships makes it possible to describe entity graphs natively in ECS.
Adding/removing relationships is similar to adding/removing regular components, with as difference that instead of a single component id, a relationship adds a pair of two things to an entity. In this pair, the first element represents the relationship (e.g. "Eats"), and the second element represents the relationship target (e.g. "Apples").
Relationships can be used to describe many things, from hierarchies to inventory systems to trade relationships between players in a game. The following sections go over how to use relationships, and what features they support.
## Definitions
Name | Description
----------|------------
Id | An id that can be added and removed
Component | Id with a single element (same as an entity id)
Relationship | Used to refer to first element of a pair
Target | Used to refer to second element of a pair
Source | Entity to which an id is added
## Relationship queries
There are a number of ways a game can query for relationships. The following kinds of queries are available for all (unidirectional) relationships, and are all constant time:
Test if entity has a relationship pair
:::code-group
```luau [luau]
world:has(bob, pair(Eats, Apples)
```
```typescript [typescript]
world.has(bob, pair(Eats, Apples)
```
:::
Test if entity has a relationship wildcard
:::code-group
```luau [luau]
world:has(bob, pair(Eats, jecs.Wildcard)
```
```typescript [typescript]
world.has(bob, pair(Eats, jecs.Wildcard)
```
:::
Get parent for entity
:::code-group
```luau [luau]
world:parent(bob)
```
```typescript [typescript]
world.parent(bob, pair(Eats, jecs.Wildcard)
```
:::
Find first target of a relationship for entity
:::code-group
```luau [luau]
world:target(bob, Eats)
```
```typescript [typescript]
world.target(bob, Eats)
```
:::
Find first target of a relationship for entity
:::code-group
```luau [luau]
world:target(bob, Eats)
```
```typescript [typescript]
world.target(bob, Eats)
```
:::
Find all entities with a pair
:::code-group
```luau [luau]
for id in world:query(pair(Eats, Apples)) do
-- ...
end
```
```typescript [typescript]
for (const [id] of world.query(pair(Eats, Apples)) {
// ...
}
```
:::
Find all entities with a pair wildcard
:::code-group
```luau [luau]
for id in world:query(pair(Eats, jecs.Wildcard)) do
local food = world:target(id, Eats) -- Apples, ...
end
```
```typescript [typescript]
for (const [id] of world.query(pair(Eats, jecs.Wildcard)) {
const food = world.target(id, Eats) // Apples, ...
}
```
:::
Iterate all children for a parent
:::code-group
```luau [luau]
for child in world:query(pair(jecs.ChildOf, parent)) do
-- ...
end
```
```typescript [typescript]
for (const [child] of world.query(pair(jecs.ChildOf, parent)) {
// ...
}
```
:::
Relationship components
Relationship pairs, just like regular component, can be associated with data.
:::code-group
```luau [luau]
local Position = world:component()
local Eats = world:component()
local Apples = world:entity()
local Begin = world:entity()
local End = world:entity()
local e = world:entity()
world:set(e, pair(Eats, Apples), { amount = 1 })
world:set(e, pair(Begin, Position), Vector3.new(0, 0, 0))
world:set(e, pair(End, Position), Vector3.new(10, 20, 30))
world:add(e, jecs.ChildOf, Position)
```
```typescript [typescript]
const Position = world.component()
const Eats = world.component()
const Apples = world.entity()
const Begin = world.entity()
const End = world.entity()
const e = world.entity()
world.set(e, pair(Eats, Apples), { amount: 1 })
world.set(e, pair(Begin, Position), new Vector3(0, 0, 0))
world.set(e, pair(End, Position), new Vector3(10, 20, 30))
world.add(e, jecs.ChildOf, Position)
```
:::
## Relationship wildcards
When querying for relationship pairs, it is often useful to be able to find all instances for a given relationship or target. To accomplish this, an application can use wildcard expressions. Consider the following example, that queries for all entities with a `Likes` relationship:
:::code-group
```luau [luau]
for id in world:query(pair(Likes, jecs.Wildcard)) do
local rel = get_name(ecs_pair_relation(world.entityIndex, id))
local obj = get_name(ecs_pair_object(world.entityIndex, id))
print(`entity {id} has relationship {rel} {obj}`)
end
```
```typescript [typescript]
for (const [id] of world.query(pair(Likes, jecs.Wildcard))) {
const rel = get_name(ecs_pair_relation(world.entityIndex, id))
const obj = get_name(ecs_pair_object(world.entityIndex, id))
print(`entity ${id} has relationship ${rel} ${obj}`)
}
```
:::
Wildcards may used for the relationship or target part of a pair
```c
"pair(Likes, jecs.Wildcard)" // Matches all Likes relationships
"pair(jecs.Wildcard, Alice)" // Matches all relationships with Alice as target
```
## Relationship performance
This section goes over the performance implications of using relationships.
### Introduction
The ECS storage needs to know two things in order to store components for entities:
- Which IDs are associated with an entity
- Which types are associated with those ids
Ids represent anything that can be added to an entity. An ID that is not associated with a type is called a tag. An ID associated with a type is a component. For regular components, the ID is a regular entity that has the builtin `Component` component.
### Storing relationships
Relationships do not fundamentally change or extend the capabilities of the storage. Relationship pairs are two elements encoded into a single 53-bit ID, which means that on the storage level they are treated the same way as regular component IDs. What changes is the function that determines which type is associated with an id. For regular components this is simply a check on whether an entity has `Component`. To support relationships, new rules are added to determine the type of an id.
Because of this, adding/removing relationships to entities has the same performance as adding/removing regular components. This becomes more obvious when looking more closely at a function that adds a relationship pair.
### Id ranges
Jecs reserves entity ids under a threshold (HI_COMPONENT_ID, default is 256) for components. This low id range is used by the storage to more efficiently encode graph edges between archetypes. Graph edges for components with low ids use direct array indexing, whereas graph edges for high ids use a hashmap. Graph edges are used to find the next archetype when adding/removing component ids, and are a contributing factor to the performance overhead of add/remove operations.
Because of the way pair IDs are encoded, a pair will never be in the low id range. This means that adding/removing a pair ID always uses a hashmap to find the next archetype. This introduces a small overhead.
### Fragmentation
Fragmentation is a property of archetype-based ECS implementations where entities are spread out over more archetypes as the number of different component combinations increases. The overhead of fragmentation is visible in two areas:
- Archetype creation
- ueries (queries have to match & iterate more archetypes)
Applications that make extensive use of relationships might observe high levels of fragmentation, as relationships can introduce many different combinations of components. While the Flecs storage is optimized for supporting large amounts (hundreds of thousands) of archetypes, fragmentation is a factor to consider when using relationships.
Union relationships are planned along with other improvements to decrease the overhead of fragmentation introduced by relationships.
### Archetype Creation
When an ID added to an entity is deleted, all references to that ID are deleted from the storage. For example, when the component Position is deleted it is removed from all entities, and all archetypes with the Position component are deleted. While not unique to relationships, it is more common for relationships to trigger cleanup actions, as relationship pairs contain regular entities.
The opposite is also true. Because relationship pairs can contain regular entities which can be created on the fly, archetype creation is more common than in applications that do not use relationships. While Jecs is optimized for fast archetypes creation, creating and cleaning up archetypes is inherently more expensive than creating/deleting an entity. Therefore archetypes creation is a factor to consider, especially for games that make extensive use of relationships.
### Indexing
To improve the speed of evaluating queries, Jecs has indices that store all archetypes for a given component ID. Whenever a new archetype is created, it is registered with the indices for the IDs the archetype has, including IDs for relationship pairs.
While registering a archetype for a relationship index is not more expensive than registering a archetype for a regular index, a archetype with relationships has to also register itself with the appropriate wildcard indices for its relationships. For example, an archetype with relationship `pair(Likes, Apples)` registers itself with the `pair(Likes, Apples)`, `pair(Likes, jecs.Wildcard)` and `pair(jecs.Wildcard, Apples)` indices. For this reason, creating new archetypes with relationships has a higher overhead than a archetype without relationships.
This page takes wording and terminology directly from Flecs, the first ECS with full support for [Entity Relationships](https://www.flecs.dev/flecs/md_docs_2Relationships.html).

View file

@ -1,3 +0,0 @@
## TODO
This is a TODO stub.

View file

@ -739,7 +739,7 @@ do
local lastArchetype: number
local archetype: Archetype
local queryOutput: { any }
local queryLength: number
local entities: { number }
local i: number
@ -748,7 +748,6 @@ do
local columns
local A, B, C, D, E, F, G, H
local I -- tombstone
local a, b, c, d, e, f, g, h
local init
@ -768,6 +767,7 @@ do
end
queryOutput = {}
queryLength = #ids
entities = archetype.entities
i = #entities
@ -809,7 +809,7 @@ do
e = columns[records[E]]
f = columns[records[F]]
g = columns[records[G]]
elseif not I then
elseif H then
a = columns[records[A]]
b = columns[records[B]]
c = columns[records[D]]
@ -872,7 +872,7 @@ do
e = columns[records[E]]
f = columns[records[F]]
g = columns[records[G]]
elseif not I then
elseif H then
a = columns[records[A]]
b = columns[records[B]]
c = columns[records[D]]
@ -886,22 +886,22 @@ do
local row = i
i-=1
if not B then
if queryLength == 1 then
return entityId, a[row]
elseif not C then
elseif queryLength == 2 then
return entityId, a[row], b[row]
elseif not D then
elseif queryLength == 3 then
return entityId, a[row], b[row], c[row]
elseif not E then
elseif queryLength == 4 then
return entityId, a[row], b[row], c[row], d[row]
elseif not F then
elseif queryLength == 5 then
return entityId,
a[row],
b[row],
c[row],
d[row],
e[row]
elseif not G then
elseif queryLength == 6 then
return entityId,
a[row],
b[row],
@ -909,7 +909,7 @@ do
d[row],
e[row],
f[row]
elseif not H then
elseif queryLength == 7 then
return entityId,
a[row],
b[row],
@ -918,7 +918,7 @@ do
e[row],
f[row],
g[row]
elseif not I then
elseif queryLength == 8 then
return entityId,
a[row],
b[row],
@ -930,12 +930,12 @@ do
h[row]
end
local field = archetype.records
local field = archetype.records
for j, id in ids do
queryOutput[j] = columns[field[id]][row]
end
return entityId, unpack(queryOutput)
return entityId, unpack(queryOutput, 1, queryLength)
end
local function world_query_without(self, ...)
@ -977,23 +977,23 @@ do
local columns = archetype.columns
local tr = archetype.records
for row in archetype.entities do
if not B then
if queryLength == 1 then
local va = columns[tr[A]]
local pa = fn(va[row])
va[row] = pa
elseif not C then
elseif queryLength == 2 then
local va = columns[tr[A]]
local vb = columns[tr[B]]
va[row], vb[row] = fn(va[row], vb[row])
elseif not D then
elseif queryLength == 3 then
local va = columns[tr[A]]
local vb = columns[tr[B]]
local vc = columns[tr[C]]
va[row], vb[row], vc[row] = fn(va[row], vb[row], vc[row])
elseif not E then
elseif queryLength == 4 then
local va = columns[tr[A]]
local vb = columns[tr[B]]
local vc = columns[tr[C]]
@ -1088,7 +1088,7 @@ do
local length = 0
local components = { ... } :: any
A, B, C, D, E, F, G, H, I = ...
A, B, C, D, E, F, G, H = ...
local archetypes = world.archetypes
local firstArchetypeMap: ArchetypeMap
@ -1107,12 +1107,12 @@ do
for id in firstArchetypeMap.cache do
local compatibleArchetype = archetypes[id]
local tr = compatibleArchetype.records
local archetypeRecords = compatibleArchetype.records
local skip = false
for i, componentId in components do
local index = tr[componentId]
local index = archetypeRecords[componentId]
if not index then
skip = true
break

View file

@ -208,7 +208,6 @@ TEST("world:add()", function()
end
end)
TEST("world:query()", function()
do CASE "query single component"
do
@ -805,7 +804,7 @@ do
break
end
id, new, old = q:next()
id, new, old = q.next()
end
add[id] = new

View file

@ -17,10 +17,10 @@
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{2.1}{Research Approach}}{3}{subsection.2.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{2.2}{Research Process}}{3}{subsection.2.2}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\tocsection {}{3}{Theory}}{3}{section.3}\protected@file@percent }
\citation{Nystrom}
\citation{Flecs}
\citation{Flecs}
\citation{Flecs}
\citation{Anderson}
\citation{ABC}
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{3.1}{Entity Component System Architecture}}{4}{subsection.3.1}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{3.2}{Cache Locality}}{4}{subsection.3.2}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{3.3}{Data Layouts}}{4}{subsection.3.3}\protected@file@percent }
@ -34,6 +34,7 @@
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{3.7}{Sparse Set}}{6}{subsection.3.7}\protected@file@percent }
\newlabel{Fig 2: Sparse Set}{{3.7}{6}{Sparse Set}{subsection.3.7}{}}
\citation{Caini}
\citation{Luau}
\newlabel{Fig 3: Removing Entity}{{3.7}{7}{Sparse Set}{subsection.3.7}{}}
\@writefile{toc}{\contentsline {section}{\tocsection {}{4}{Implementation}}{7}{section.4}\protected@file@percent }
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{4.1}{Data Structures}}{7}{subsection.4.1}\protected@file@percent }
@ -50,16 +51,18 @@
\@writefile{toc}{\contentsline {subsection}{\tocsubsection {}{5.3}{Queries}}{11}{subsection.5.3}\protected@file@percent }
\bibcite{Martin}{1}
\bibcite{Muratori}{2}
\bibcite{Flecs}{3}
\bibcite{Anderson}{4}
\bibcite{Caini}{5}
\bibcite{ABC}{3}
\newlabel{Fig 6: Queries}{{5.3}{12}{Queries}{subsection.5.3}{}}
\@writefile{toc}{\contentsline {section}{\tocsection {}{6}{Conclusions}}{12}{section.6}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\tocsection {}{7}{Acknowledgments}}{12}{section.7}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\tocsection {}{}{References}}{12}{section*.2}\protected@file@percent }
\bibcite{Nystrom}{6}
\bibcite{gdc}{7}
\bibcite{matter}{8}
\bibcite{Archetypes}{4}
\bibcite{Anderson}{5}
\bibcite{Caini}{6}
\bibcite{Nystrom}{7}
\bibcite{gdc}{8}
\bibcite{matter}{9}
\bibcite{luau}{10}
\newlabel{tocindent-1}{0pt}
\newlabel{tocindent0}{12.7778pt}
\newlabel{tocindent1}{17.77782pt}

View file

@ -1,12 +1,12 @@
# Fdb version 4
["pdflatex"] 1713880547.68476 "c:/Users/Marcus/Documents/packages/jecs/thesis/drafts/1/paper.tex" "paper.pdf" "paper" 1713880549.83117 0
["pdflatex"] 1722383502.05394 "c:/Users/Marcus/Documents/packages/jecs/thesis/drafts/1/paper.tex" "paper.pdf" "paper" 1722383503.46586 0
"../../images/archetype_graph.png" 1709688578 50172 8f93f7d24d4920bd8720f4b480771eb4 ""
"../../images/insertion.png" 1712278304 158773 c2f9fb7fae25fea3afb7e426b1d318d6 ""
"../../images/queries.png" 1712280101 205571 d976c9319fb29ae7dffc46ded3de4e55 ""
"../../images/insertion.png" 1720373630 158773 c2f9fb7fae25fea3afb7e426b1d318d6 ""
"../../images/queries.png" 1720373630 205571 d976c9319fb29ae7dffc46ded3de4e55 ""
"../../images/random_access.png" 1712278385 64975 e6fbe06298c59f52a21da1b89efe1d12 ""
"../../images/removed.png" 1709688578 10876 4c5ce75a368dfc9581164c9b1ace0382 ""
"../../images/sparseset.png" 1709688578 9733 da4c27a8a932697883c764373b0b4e9e ""
"C:/Users/Marcus/AppData/Local/MiKTeX/fonts/map/pdftex/pdftex.map" 1712682076 81939 3d80a3cba051aa49603173dafcdf1492 ""
"C:/Users/Marcus/AppData/Local/MiKTeX/fonts/map/pdftex/pdftex.map" 1722382141 81939 3d80a3cba051aa49603173dafcdf1492 ""
"C:/Users/Marcus/AppData/Local/MiKTeX/fonts/tfm/public/rsfs/rsfs10.tfm" 1712242763 688 37338d6ab346c2f1466b29e195316aa4 ""
"C:/Users/Marcus/AppData/Local/MiKTeX/fonts/tfm/public/rsfs/rsfs5.tfm" 1712242764 684 3a51bd4fd9600428d5264cf25f04bb9a ""
"C:/Users/Marcus/AppData/Local/MiKTeX/fonts/tfm/public/rsfs/rsfs7.tfm" 1712242763 692 1b6510779f0f05e9cbf03e0f6c8361e6 ""
@ -73,6 +73,9 @@
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/pdfescape/pdfescape.sty" 1575926700 19007 15924f7228aca6c6d184b115f4baa231 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/pdftexcmds/pdftexcmds.sty" 1623005277 20089 80423eac55aa175305d35b49e04fe23b ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/uniquecounter/uniquecounter.sty" 1576434012 7008 f92eaa0a3872ed622bbf538217cd2ab7 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/xkeyval/keyval.tex" 1656236919 2725 1a42bd9e7e57e25fc7763c445f4b785b ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/xkeyval/xkeyval.tex" 1656236919 19231 27205ee17aaa2902aea3e0c07a3cfc65 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/xkeyval/xkvutils.tex" 1656236919 7677 9cb1a74d945bc9331f2181c0a59ff34a ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/xypic/xy.sty" 1381022313 4692 1e1bcf75c622af1eefd9169948208302 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/xypic/xy.tex" 1381022313 115380 413d5f789929a45aab7d12ce0d0aee7d ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/generic/xypic/xy2cell.tex" 1381022313 28208 66beb10e89ca3b367faccdfebe2d3965 ""
@ -110,6 +113,8 @@
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/auxhook/auxhook.sty" 1576538732 3935 57aa3c3e203a5c2effb4d2bd2efbc323 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/base/atbegshi-ltx.sty" 1705273578 3045 273c666a54e60b9f730964f431a56c1b ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/base/atveryend-ltx.sty" 1705273579 2462 6bc53756156dbd71c1ad550d30a3b93f ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/base/inputenc.sty" 1705273578 5048 425739d70251273bf93e3d51f3c40048 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/breakurl/breakurl.sty" 1366019824 8782 9af34887a0e6e535b004c39238830991 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/comment/comment.sty" 1468691282 10197 204f75d5d8d88aa345a8c402e879e63b ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/epstopdf-pkg/epstopdf-base.sty" 1623003186 13886 d1306dcf79a944f6988e688c1785f9ce ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/etoolbox/etoolbox.sty" 1601897756 46845 3b58f70c6e861a13d927bff09d35ecbc ""
@ -146,12 +151,13 @@
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/ulem/ulem.sty" 1578651445 15682 94f55b803e160cf7fb6e4d77d07cfe1d ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/url/url.sty" 1388490452 12796 8edb7d69a20b857904dd0ea757c14ec9 ""
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/xcolor/xcolor.sty" 1700127522 55487 80a65caedd3722f4c20a14a69e785d8f ""
"c:/Users/Marcus/Documents/packages/jecs/thesis/drafts/1/paper.tex" 1713880546 32297 7fd52884d5f878c62fb7b3eb83c485d2 ""
"listings-rust.sty" 1712261101 12276 f346af5561f91e34970cbe0b79654ec2 ""
"paper.aux" 1713880549 5542 ad4da62e73d0c1bfa419d595ce41ac50 "pdflatex"
"paper.out" 1713880549 3695 a11dbc9d88dd30c22755dc5ebf6964ec "pdflatex"
"paper.tex" 1713880546 32297 7fd52884d5f878c62fb7b3eb83c485d2 ""
"paper.toc" 1713880549 3025 f0a34bc8923dbdfdaeb8258045835a7e "pdflatex"
"C:/Users/Marcus/AppData/Local/Programs/MiKTeX/tex/latex/xkeyval/xkeyval.sty" 1656236919 4937 4ce600ce9bd4ec84d0250eb6892fcf4f ""
"c:/Users/Marcus/Documents/packages/jecs/thesis/drafts/1/paper.tex" 1722383500 33628 2358f35913ab57bac270409214a52615 ""
"listings-rust.sty" 1720461559 12349 f346af5561f91e34970cbe0b79654ec2 ""
"paper.aux" 1722383503 5596 e71f1baf7c13471206b3537d383c78e2 "pdflatex"
"paper.out" 1722383503 3695 a11dbc9d88dd30c22755dc5ebf6964ec "pdflatex"
"paper.tex" 1722383500 33628 2358f35913ab57bac270409214a52615 ""
"paper.toc" 1722383503 3025 f0a34bc8923dbdfdaeb8258045835a7e "pdflatex"
(generated)
"paper.aux"
"paper.log"

View file

@ -42,73 +42,24 @@ INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\ulem\ulem.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\latex-fonts\lasy6.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\url\url.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\url\url.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\graphics\keyval.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\graphics\keyval.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\lstmisc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\lstmisc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\lstmisc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyrecat.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyidioms.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xydash10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xyatip10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xybtip10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xybsql10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xycirc10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\breakurl\breakurl.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\breakurl\breakurl.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\xkeyval\xkeyval.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\xkeyval\xkeyval.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xkeyval\xkeyval.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xkeyval\xkvutils.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xkeyval\keyval.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\iftex\ifpdf.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\iftex\ifpdf.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\iftex\iftex.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\iftex\iftex.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyall.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyall.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycurve.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycurve.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyframe.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyframe.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycmtip.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycmtip.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xytips.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xytips.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xycmat10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xycmbt10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xyluat10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xylubt10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyline.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyline.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyrotate.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyrotate.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycolor.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycolor.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xymatrix.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xymatrix.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarrow.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarrow.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xygraph.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xygraph.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarc.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarc.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy2cell.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy2cell.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-co.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-cu.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-fr.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-li.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-ro.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\tools\enumerate.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\tools\enumerate.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\base\inputenc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\base\inputenc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\hyperref\hyperref.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\hyperref\hyperref.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\infwarerr\infwarerr.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\infwarerr\infwarerr.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\graphics\keyval.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\kvsetkeys\kvsetkeys.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\kvsetkeys\kvsetkeys.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\kvdefinekeys\kvdefinekeys.sty
@ -160,6 +111,63 @@ INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\rerunfilecheck\rer
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\rerunfilecheck\rerunfilecheck.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\uniquecounter\uniquecounter.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\uniquecounter\uniquecounter.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\lstmisc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\lstmisc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\lstmisc.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\listings\listings.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyrecat.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyidioms.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xydash10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xyatip10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xybtip10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xybsql10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xycirc10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyall.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyall.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycurve.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycurve.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyframe.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyframe.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycmtip.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycmtip.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xytips.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xytips.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xycmat10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xycmbt10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xyluat10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\xypic\xylubt10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyline.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyline.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyrotate.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyrotate.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycolor.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xycolor.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xymatrix.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xymatrix.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarrow.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarrow.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xygraph.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xygraph.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarc.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xyarc.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy2cell.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xy2cell.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-co.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-cu.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-fr.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-li.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\generic\xypic\xypdf-ro.tex
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\tools\enumerate.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\tools\enumerate.sty
INPUT .\listings-rust.sty
INPUT listings-rust.sty
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\xcolor\xcolor.sty
@ -216,13 +224,6 @@ INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\epstopdf-pkg\epsto
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\00miktex\epstopdf-sys.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\00miktex\epstopdf-sys.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex\latex\00miktex\epstopdf-sys.cfg
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\cmextra\cmex7.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msam10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msam7.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msbm10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msbm7.tfm
INPUT C:\Users\Marcus\AppData\Local\MiKTeX\fonts\tfm\public\rsfs\rsfs10.tfm
INPUT C:\Users\Marcus\AppData\Local\MiKTeX\fonts\tfm\public\rsfs\rsfs7.tfm
INPUT .\paper.out
INPUT .\paper.out
INPUT paper.out
@ -231,6 +232,13 @@ OUTPUT paper.pdf
INPUT .\paper.out
INPUT .\paper.out
OUTPUT paper.out
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\cmextra\cmex7.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msam10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msam7.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msbm10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\amsfonts\symbols\msbm7.tfm
INPUT C:\Users\Marcus\AppData\Local\MiKTeX\fonts\tfm\public\rsfs\rsfs10.tfm
INPUT C:\Users\Marcus\AppData\Local\MiKTeX\fonts\tfm\public\rsfs\rsfs7.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\cm\cmcsc10.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\cm\cmti8.tfm
INPUT C:\Users\Marcus\AppData\Local\Programs\MiKTeX\fonts\tfm\public\cm\cmbx10.tfm

View file

@ -1,4 +1,4 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (MiKTeX 24.1) (preloaded format=pdflatex 2024.4.4) 23 APR 2024 15:55
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (MiKTeX 24.1) (preloaded format=pdflatex 2024.4.4) 31 JUL 2024 01:51
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
@ -144,111 +144,30 @@ Package: ulem 2019/11/18
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/url\url.sty
\Urlmuskip=\muskip17
Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\listings.sty (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/graphics\keyval.sty
Package: keyval 2022/05/29 v1.15 key=value parser (DPC)
\KV@toks@=\toks29
)
\lst@mode=\count275
\lst@gtempboxa=\box57
\lst@token=\toks30
\lst@length=\count276
\lst@currlwidth=\dimen155
\lst@column=\count277
\lst@pos=\count278
\lst@lostspace=\dimen156
\lst@width=\dimen157
\lst@newlines=\count279
\lst@lineno=\count280
\lst@maxwidth=\dimen158
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\lstmisc.sty
File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz)
\c@lstnumber=\count281
\lst@skipnumbers=\count282
\lst@framebox=\box58
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\listings.cfg
File: listings.cfg 2023/02/27 1.9 listings configuration
))
Package: listings 2023/02/27 1.9 (Carsten Heinz)
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xy.sty (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xy.tex Bootstrap'ing: catcodes, docmode, (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyrecat.tex) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyidioms.tex)
Xy-pic version 3.8.9 <2013/10/06>
Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others
Xy-pic is free software: see the User's Guide for details.
Loading kernel: messages; fonts; allocations: state,
\X@c=\dimen159
\Y@c=\dimen160
\U@c=\dimen161
\D@c=\dimen162
\L@c=\dimen163
\R@c=\dimen164
\Edge@c=\toks31
\X@p=\dimen165
\Y@p=\dimen166
\U@p=\dimen167
\D@p=\dimen168
\L@p=\dimen169
\R@p=\dimen170
\Edge@p=\toks32
\X@origin=\dimen171
\Y@origin=\dimen172
\X@xbase=\dimen173
\Y@xbase=\dimen174
\X@ybase=\dimen175
\Y@ybase=\dimen176
\X@min=\dimen177
\Y@min=\dimen178
\X@max=\dimen179
\Y@max=\dimen180
\lastobjectbox@=\box59
\zerodotbox@=\box60
\almostz@=\dimen181
direction,
\d@X=\dimen182
\d@Y=\dimen183
\K@=\count283
\KK@=\count284
\Direction=\count285
\K@dXdY=\dimen184
\K@dYdX=\dimen185
\xyread@=\read2
\xywrite@=\write4
\csp@=\count286
\quotPTK@=\dimen186
utility macros; pictures: \xy, positions,
\swaptoks@@=\toks33
\connectobjectbox@@=\box61
objects,
\styletoks@=\toks34
decorations; kernel objects: directionals, circles, text; options; algorithms: directions, edges, connections; Xy-pic loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/iftex\ifpdf.sty
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/breakurl\breakurl.sty
Package: breakurl 2013/04/10 v1.40 Breakable hyperref URLs
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/xkeyval\xkeyval.sty
Package: xkeyval 2022/06/16 v2.9 package option processing (HA)
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xkeyval\xkeyval.tex (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xkeyval\xkvutils.tex
\XKV@toks=\toks29
\XKV@tempa@toks=\toks30
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xkeyval\keyval.tex))
\XKV@depth=\count275
File: xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
)) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/iftex\ifpdf.sty
Package: ifpdf 2019/10/25 v3.4 ifpdf legacy package. Use iftex instead.
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/iftex\iftex.sty
Package: iftex 2022/02/03 v1.0f TeX engine tests
))
Package: xy 2013/10/06 Xy-pic version 3.8.9
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyall.tex Xy-pic option: All features v.3.8 (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xycurve.tex Xy-pic option: Curve and Spline extension v.3.12 curve,
\crv@cnt@=\count287
\crvpts@=\toks35
\splinebox@=\box62
\splineval@=\dimen187
\splinedepth@=\dimen188
\splinetol@=\dimen189
\splinelength@=\dimen190
circles,
\L@=\dimen191
loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyframe.tex Xy-pic option: Frame and Bracket extension v.3.14 loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xycmtip.tex Xy-pic option: Computer Modern tip extension v.3.7 (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xytips.tex Xy-pic option: More Tips extension v.3.11 loaded) loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyline.tex Xy-pic option: Line styles extension v.3.10
\xylinethick@=\dimen192
loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyrotate.tex Xy-pic option: Rotate and Scale extension v.3.8 loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xycolor.tex Xy-pic option: Colour extension v.3.11 loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xymatrix.tex Xy-pic option: Matrix feature v.3.14
\Row=\count288
\Col=\count289
\queue@=\toks36
\queue@@=\toks37
\qcount@=\count290
\qcount@@=\count291
\matrixsize@=\count292
loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyarrow.tex Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xygraph.tex Xy-pic option: Graph feature v.3.11 loaded) loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyarc.tex Xy-pic option: Circle, Ellipse, Arc feature v.3.8 circles, ellipses, elliptical arcs, loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xy2cell.tex Xy-pic option: Two-cell feature v.3.7 two-cells, loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf.tex Xy-pic option: PDF driver v.1.7 Xy-pic pdf driver: `color' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-co.tex loaded) Xy-pic pdf driver: `curve' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-cu.tex loaded) Xy-pic pdf driver: `frame' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-fr.tex loaded) Xy-pic pdf driver: `line' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-li.tex loaded) Xy-pic pdf driver: `rotate' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-ro.tex loaded) loaded)) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/tools\enumerate.sty
Package: enumerate 2023/07/04 v3.00 enumerate extensions (DPC)
\@enLab=\toks38
Package breakurl Warning: You are using breakurl while processing via pdflatex.
(breakurl) \burl will be just a synonym of \url.
(breakurl) on input line 48.
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/base\inputenc.sty
Package: inputenc 2021/02/14 v1.3d Input encoding file
\inpenc@prehook=\toks31
\inpenc@posthook=\toks32
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\hyperref.sty
Package: hyperref 2023-11-26 v7.01g Hypertext links for LaTeX
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/infwarerr\infwarerr.sty
@ -281,14 +200,14 @@ Package: gettitlestring 2019/12/15 v1.6 Cleanup title references (HO)
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/kvoptions\kvoptions.sty
Package: kvoptions 2022-06-15 v3.15 Key value format for package options (HO)
))
\c@section@level=\count293
\c@section@level=\count276
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/etoolbox\etoolbox.sty
Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW)
\etb@tempcnta=\count294
\etb@tempcnta=\count277
)
\@linkdim=\dimen193
\Hy@linkcounter=\count295
\Hy@pagecounter=\count296
\@linkdim=\dimen155
\Hy@linkcounter=\count278
\Hy@pagecounter=\count279
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\pd1enc.def
File: pd1enc.def 2023-11-26 v7.01g Hyperref: PDFDocEncoding definition (HO)
Now handling font encoding PD1 ...
@ -296,7 +215,7 @@ Now handling font encoding PD1 ...
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/intcalc\intcalc.sty
Package: intcalc 2019/12/15 v1.3 Expandable calculations with integers (HO)
)
\Hy@SavedSpaceFactor=\count297
\Hy@SavedSpaceFactor=\count280
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\puenc.def
File: puenc.def 2023-11-26 v7.01g Hyperref: PDF Unicode definition (HO)
Now handling font encoding PU ...
@ -309,17 +228,17 @@ Package hyperref Info: Plain pages OFF on input line 4196.
Package hyperref Info: Backreferencing OFF on input line 4201.
Package hyperref Info: Implicit mode ON; LaTeX internals redefined.
Package hyperref Info: Bookmarks ON on input line 4448.
\c@Hy@tempcnt=\count298
\c@Hy@tempcnt=\count281
LaTeX Info: Redefining \url on input line 4786.
\XeTeXLinkMargin=\dimen194
\XeTeXLinkMargin=\dimen156
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/bitset\bitset.sty
Package: bitset 2019/12/09 v1.3 Handle bit-vector datatype (HO)
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/bigintcalc\bigintcalc.sty
Package: bigintcalc 2019/12/15 v1.5 Expandable calculations on big integers (HO)
))
\Fld@menulength=\count299
\Field@Width=\dimen195
\Fld@charsize=\dimen196
\Fld@menulength=\count282
\Field@Width=\dimen157
\Fld@charsize=\dimen158
Package hyperref Info: Hyper figures OFF on input line 6065.
Package hyperref Info: Link nesting OFF on input line 6070.
Package hyperref Info: Hyper index ON on input line 6073.
@ -331,9 +250,9 @@ Package hyperref Info: PDF/A mode OFF on input line 6095.
Package: atbegshi-ltx 2021/01/10 v1.0c Emulation of the original atbegshi
package with kernel methods
)
\Hy@abspage=\count300
\c@Item=\count301
\c@Hfootnote=\count302
\Hy@abspage=\count283
\c@Item=\count284
\c@Hfootnote=\count285
)
Package hyperref Info: Driver (autodetected): hpdftex.
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/hyperref\hpdftex.def
@ -342,8 +261,8 @@ File: hpdftex.def 2023-11-26 v7.01g Hyperref driver for pdfTeX
Package: atveryend-ltx 2020/08/19 v1.0a Emulation of the original atveryend package
with kernel methods
)
\Fld@listcount=\count303
\c@bookmark@seq@number=\count304
\Fld@listcount=\count286
\c@bookmark@seq@number=\count287
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/rerunfilecheck\rerunfilecheck.sty
Package: rerunfilecheck 2022-07-10 v1.10 Rerun checks for auxiliary files (HO)
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/uniquecounter\uniquecounter.sty
@ -352,18 +271,116 @@ Package: uniquecounter 2019/12/15 v1.4 Provide unlimited unique counter (HO)
Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 285.
)
\Hy@SectionHShift=\skip59
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\listings.sty
\lst@mode=\count288
\lst@gtempboxa=\box57
\lst@token=\toks33
\lst@length=\count289
\lst@currlwidth=\dimen159
\lst@column=\count290
\lst@pos=\count291
\lst@lostspace=\dimen160
\lst@width=\dimen161
\lst@newlines=\count292
\lst@lineno=\count293
\lst@maxwidth=\dimen162
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\lstmisc.sty
File: lstmisc.sty 2023/02/27 1.9 (Carsten Heinz)
\c@lstnumber=\count294
\lst@skipnumbers=\count295
\lst@framebox=\box58
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\listings.cfg
File: listings.cfg 2023/02/27 1.9 listings configuration
))
Package: listings 2023/02/27 1.9 (Carsten Heinz)
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xy.sty (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xy.tex Bootstrap'ing: catcodes, docmode, (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyrecat.tex) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyidioms.tex)
Xy-pic version 3.8.9 <2013/10/06>
Copyright (c) 1991-2013 by Kristoffer H. Rose <krisrose@tug.org> and others
Xy-pic is free software: see the User's Guide for details.
Loading kernel: messages; fonts; allocations: state,
\X@c=\dimen163
\Y@c=\dimen164
\U@c=\dimen165
\D@c=\dimen166
\L@c=\dimen167
\R@c=\dimen168
\Edge@c=\toks34
\X@p=\dimen169
\Y@p=\dimen170
\U@p=\dimen171
\D@p=\dimen172
\L@p=\dimen173
\R@p=\dimen174
\Edge@p=\toks35
\X@origin=\dimen175
\Y@origin=\dimen176
\X@xbase=\dimen177
\Y@xbase=\dimen178
\X@ybase=\dimen179
\Y@ybase=\dimen180
\X@min=\dimen181
\Y@min=\dimen182
\X@max=\dimen183
\Y@max=\dimen184
\lastobjectbox@=\box59
\zerodotbox@=\box60
\almostz@=\dimen185
direction,
\d@X=\dimen186
\d@Y=\dimen187
\K@=\count296
\KK@=\count297
\Direction=\count298
\K@dXdY=\dimen188
\K@dYdX=\dimen189
\xyread@=\read2
\xywrite@=\write4
\csp@=\count299
\quotPTK@=\dimen190
utility macros; pictures: \xy, positions,
\swaptoks@@=\toks36
\connectobjectbox@@=\box61
objects,
\styletoks@=\toks37
decorations; kernel objects: directionals, circles, text; options; algorithms: directions, edges, connections; Xy-pic loaded)
Package: xy 2013/10/06 Xy-pic version 3.8.9
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyall.tex Xy-pic option: All features v.3.8 (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xycurve.tex Xy-pic option: Curve and Spline extension v.3.12 curve,
\crv@cnt@=\count300
\crvpts@=\toks38
\splinebox@=\box62
\splineval@=\dimen191
\splinedepth@=\dimen192
\splinetol@=\dimen193
\splinelength@=\dimen194
circles,
\L@=\dimen195
loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyframe.tex Xy-pic option: Frame and Bracket extension v.3.14 loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xycmtip.tex Xy-pic option: Computer Modern tip extension v.3.7 (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xytips.tex Xy-pic option: More Tips extension v.3.11 loaded) loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyline.tex Xy-pic option: Line styles extension v.3.10
\xylinethick@=\dimen196
loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyrotate.tex Xy-pic option: Rotate and Scale extension v.3.8 loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xycolor.tex Xy-pic option: Colour extension v.3.11 loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xymatrix.tex Xy-pic option: Matrix feature v.3.14
\Row=\count301
\Col=\count302
\queue@=\toks39
\queue@@=\toks40
\qcount@=\count303
\qcount@@=\count304
\matrixsize@=\count305
loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyarrow.tex Xy-pic option: Arrow and Path feature v.3.9 path, \ar, loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xygraph.tex Xy-pic option: Graph feature v.3.11 loaded) loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xyarc.tex Xy-pic option: Circle, Ellipse, Arc feature v.3.8 circles, ellipses, elliptical arcs, loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xy2cell.tex Xy-pic option: Two-cell feature v.3.7 two-cells, loaded) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf.tex Xy-pic option: PDF driver v.1.7 Xy-pic pdf driver: `color' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-co.tex loaded) Xy-pic pdf driver: `curve' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-cu.tex loaded) Xy-pic pdf driver: `frame' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-fr.tex loaded) Xy-pic pdf driver: `line' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-li.tex loaded) Xy-pic pdf driver: `rotate' extension support (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/generic/xypic\xypdf-ro.tex loaded) loaded)) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/tools\enumerate.sty
Package: enumerate 2023/07/04 v3.00 enumerate extensions (DPC)
\@enLab=\toks41
)
Package hyperref Info: Option `bookmarksnumbered' set `true' on input line 23.
Package hyperref Info: Option `bookmarksnumbered' set `true' on input line 26.
Package hyperref Warning: Option `bookmarks' has already been used,
(hyperref) setting the option has no effect on input line 23.
(hyperref) setting the option has no effect on input line 26.
Package hyperref Info: Option `colorlinks' set `true' on input line 23.
Package hyperref Info: Option `colorlinks' set `true' on input line 26.
Package hyperref Warning: Option `pagecolor' is not available anymore.
Package hyperref Info: Option `pdfnewwindow' set `true' on input line 23.
Package hyperref Info: Option `pdfnewwindow' set `true' on input line 26.
(listings-rust.sty
Package: listings-rust 2018/01/23 Custom Package
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/xcolor\xcolor.sty
@ -384,27 +401,27 @@ Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1371.
Package xcolor Info: Model `Gray' substituted by `gray' on input line 1372.
Package xcolor Info: Model `wave' substituted by `hsb' on input line 1373.
)
\c@thm=\count305
\c@cor=\count306
\c@prop=\count307
\c@lem=\count308
\c@prob=\count309
\c@conj=\count310
\c@defn=\count311
\c@ass=\count312
\c@asss=\count313
\c@ax=\count314
\c@con=\count315
\c@exmp=\count316
\c@notn=\count317
\c@notns=\count318
\c@pro=\count319
\c@quest=\count320
\c@rem=\count321
\c@warn=\count322
\c@sch=\count323
\c@obs=\count324
\c@conv=\count325
\c@thm=\count306
\c@cor=\count307
\c@prop=\count308
\c@lem=\count309
\c@prob=\count310
\c@conj=\count311
\c@defn=\count312
\c@ass=\count313
\c@asss=\count314
\c@ax=\count315
\c@con=\count316
\c@exmp=\count317
\c@notn=\count318
\c@notns=\count319
\c@pro=\count320
\c@quest=\count321
\c@rem=\count322
\c@warn=\count323
\c@sch=\count324
\c@obs=\count325
\c@conv=\count326
\bibstyle{plain}
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/graphics\graphicx.sty
@ -422,7 +439,7 @@ Package graphics Info: Driver file: pdftex.def on input line 107.
\Gin@req@width=\dimen198
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/l3backend\l3backend-pdftex.def
File: l3backend-pdftex.def 2024-01-04 L3 backend support: PDF output (pdfTeX)
\l__color_backend_stack_int=\count326
\l__color_backend_stack_int=\count327
\l__pdf_internal_box=\box63
)
@ -432,86 +449,100 @@ LaTeX Warning: Unused global option(s):
(paper.aux)
\openout1 = `paper.aux'.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 160.
LaTeX Font Info: ... okay on input line 160.
LaTeX Font Info: Trying to load font information for U+msa on input line 160.
LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 163.
LaTeX Font Info: ... okay on input line 163.
LaTeX Font Info: Trying to load font information for U+msa on input line 163.
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/amsfonts\umsa.fd
File: umsa.fd 2013/01/14 v3.01 AMS symbols A
)
LaTeX Font Info: Trying to load font information for U+msb on input line 160.
LaTeX Font Info: Trying to load font information for U+msb on input line 163.
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/amsfonts\umsb.fd
File: umsb.fd 2013/01/14 v3.01 AMS symbols B
)
LaTeX Font Info: Trying to load font information for U+rsfs on input line 160.
LaTeX Font Info: Trying to load font information for U+rsfs on input line 163.
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/jknappen\ursfs.fd
File: ursfs.fd 1998/03/24 rsfs font definition file (jk)
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/context/base/mkii\supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
\scratchcounter=\count327
\scratchcounter=\count328
\scratchdimen=\dimen256
\scratchbox=\box64
\nofMPsegments=\count328
\nofMParguments=\count329
\everyMPshowfont=\toks39
\MPscratchCnt=\count330
\nofMPsegments=\count329
\nofMParguments=\count330
\everyMPshowfont=\toks42
\MPscratchCnt=\count331
\MPscratchDim=\dimen257
\MPnumerator=\count331
\makeMPintoPDFobject=\count332
\everyMPtoPDFconversion=\toks40
\MPnumerator=\count332
\makeMPintoPDFobject=\count333
\everyMPtoPDFconversion=\toks43
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/epstopdf-pkg\epstopdf-base.sty
Package: epstopdf-base 2020-01-24 v2.11 Base part for package epstopdf
Package epstopdf-base Info: Redefining graphics rule for `.eps' on input line 485.
(C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/00miktex\epstopdf-sys.cfg
File: epstopdf-sys.cfg 2021/03/18 v2.0 Configuration of epstopdf for MiKTeX
))
\c@lstlisting=\count333
Package xypdf Info: Line width: 0.39998pt on input line 160.
Package hyperref Info: Link coloring ON on input line 160.
Package hyperref Info: Link coloring ON on input line 163.
(paper.out) (paper.out)
\@outlinefile=\write5
\openout5 = `paper.out'.
\c@lstlisting=\count334
Package xypdf Info: Line width: 0.39998pt on input line 163.
(paper.toc [1{C:/Users/Marcus/AppData/Local/MiKTeX/fonts/map/pdftex/pdftex.map}])
\tf@toc=\write6
\openout6 = `paper.toc'.
[2] [3]
LaTeX Warning: Citation `Flecs' on page 2 undefined on input line 225.
[2] [3]
LaTeX Warning: Citation `Flecs' on page 4 undefined on input line 271.
LaTeX Font Info: Font shape `OT1/cmtt/bx/n' in size <10> not available
(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 271.
[4] [5]
<../../images/archetype_graph.png, id=195, 831.105pt x 240.9pt>
(Font) Font shape `OT1/cmtt/m/n' tried instead on input line 274.
LaTeX Warning: Citation `Flecs' on page 4 undefined on input line 283.
[4] [5]
<../../images/archetype_graph.png, id=193, 831.105pt x 240.9pt>
File: ../../images/archetype_graph.png Graphic file (type png)
<use ../../images/archetype_graph.png>
Package pdftex.def Info: ../../images/archetype_graph.png used on input line 370.
Package pdftex.def Info: ../../images/archetype_graph.png used on input line 374.
(pdftex.def) Requested size: 332.43611pt x 96.35828pt.
<../../images/sparseset.png, id=196, 484.81125pt x 161.60374pt>
<../../images/sparseset.png, id=194, 484.81125pt x 161.60374pt>
File: ../../images/sparseset.png Graphic file (type png)
<use ../../images/sparseset.png>
Package pdftex.def Info: ../../images/sparseset.png used on input line 378.
Package pdftex.def Info: ../../images/sparseset.png used on input line 382.
(pdftex.def) Requested size: 290.88899pt x 96.96298pt.
[6 <../../images/archetype_graph.png (PNG copy)> <../../images/sparseset.png>]
<../../images/removed.png, id=207, 484.81125pt x 161.60374pt>
<../../images/removed.png, id=205, 484.81125pt x 161.60374pt>
File: ../../images/removed.png Graphic file (type png)
<use ../../images/removed.png>
Package pdftex.def Info: ../../images/removed.png used on input line 398.
Package pdftex.def Info: ../../images/removed.png used on input line 402.
(pdftex.def) Requested size: 290.88899pt x 96.96298pt.
[7 <../../images/removed.png>] (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\lstlang1.sty
LaTeX Warning: Citation `Luau' on page 7 undefined on input line 408.
[7 <../../images/removed.png>] (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\lstlang1.sty
File: lstlang1.sty 2023/02/27 1.9 listings language file
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\lstlang2.sty
File: lstlang2.sty 2023/02/27 1.9 listings language file
@ -520,57 +551,51 @@ File: lstlang1.sty 2023/02/27 1.9 listings language file
) (C:\Users\Marcus\AppData\Local\Programs\MiKTeX\tex/latex/listings\lstlang2.sty
File: lstlang2.sty 2023/02/27 1.9 listings language file
)
Overfull \hbox (17.91617pt too wide) in paragraph at lines 468--472
Overfull \hbox (17.91617pt too wide) in paragraph at lines 472--476
\OT1/cmr/bx/n/10 Explanation: \OT1/cmr/m/n/10 This func-tion re-trieves the record for the given en-tity from \OT1/cmtt/m/n/10 entityIndex\OT1/cmr/m/n/10 .
[]
[8] [9]
<../../images/random_access.png, id=290, 653.44125pt x 341.02406pt>
<../../images/random_access.png, id=288, 653.44125pt x 341.02406pt>
File: ../../images/random_access.png Graphic file (type png)
<use ../../images/random_access.png>
Package pdftex.def Info: ../../images/random_access.png used on input line 579.
Package pdftex.def Info: ../../images/random_access.png used on input line 583.
(pdftex.def) Requested size: 326.71982pt x 170.51161pt.
[10]
<../../images/insertion.png, id=315, 1797.71625pt x 1188.44pt>
<../../images/insertion.png, id=313, 1797.71625pt x 1188.44pt>
File: ../../images/insertion.png Graphic file (type png)
<use ../../images/insertion.png>
Package pdftex.def Info: ../../images/insertion.png used on input line 593.
Package pdftex.def Info: ../../images/insertion.png used on input line 597.
(pdftex.def) Requested size: 359.53688pt x 237.68379pt.
<../../images/queries.png, id=316, 2229.32875pt x 990.70125pt>
<../../images/queries.png, id=314, 2229.32875pt x 990.70125pt>
File: ../../images/queries.png Graphic file (type png)
<use ../../images/queries.png>
Package pdftex.def Info: ../../images/queries.png used on input line 609.
Package pdftex.def Info: ../../images/queries.png used on input line 613.
(pdftex.def) Requested size: 334.38489pt x 148.59877pt.
[11 <../../images/random_access.png> <../../images/insertion.png>]
Overfull \hbox (110.03029pt too wide) in paragraph at lines 640--643
\OT1/cmr/m/n/8 Part 1. [][]$\OT1/cmtt/m/n/8 https : / / t-[]machine . org / index . php / 2007 / 09 / 03 / entity-[]systems-[]are-[]the-[]future-[]of-[]mmog-[]development-[]part-[]1/$[][]
[]
Underfull \hbox (badness 3503) in paragraph at lines 660--663
[]\OT1/cmr/m/n/8 Michele Caini (2020, Au-gust). ECS back and forth. [][]$\OT1/cmtt/m/n/8 https : / / skypjack . github . io /
[]
[12 <../../images/queries.png>] [13] (paper.aux)
[11 <../../images/random_access.png> <../../images/insertion.png>] [12 <../../images/queries.png>] [13] (paper.aux)
***********
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-04>
***********
LaTeX Warning: There were undefined references.
Package rerunfilecheck Info: File `paper.out' has not changed.
(rerunfilecheck) Checksum: A11DBC9D88DD30C22755DC5EBF6964EC;3695.
)
Here is how much of TeX's memory you used:
16877 strings out of 474486
245316 string characters out of 5743284
17163 strings out of 474486
250241 string characters out of 5743284
1977542 words of memory out of 5000000
38592 multiletter control sequences out of 15000+600000
38859 multiletter control sequences out of 15000+600000
569162 words of font info for 85 fonts, out of 8000000 for 9000
1302 hyphenation exceptions out of 8191
75i,8n,79p,7940b,2289s stack positions out of 10000i,1000n,20000p,200000b,200000s
75i,8n,117p,7940b,2340s stack positions out of 10000i,1000n,20000p,200000b,200000s
<C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmbx10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmcsc10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmmi10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmr10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmr6.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmr7.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmr8.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmss10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmsy10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmti10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmti8.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmtt10.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmtt8.pfb><C:/Users/Marcus/AppData/Local/Programs/MiKTeX/fonts/type1/public/amsfonts/cm/cmtt9.pfb>
Output written on paper.pdf (13 pages, 590398 bytes).
Output written on paper.pdf (13 pages, 600187 bytes).
PDF statistics:
437 PDF objects out of 1000 (max. 8388607)
154 named destinations out of 1000 (max. 500000)
441 PDF objects out of 1000 (max. 8388607)
156 named destinations out of 1000 (max. 500000)
239 words of extra memory for PDF output out of 10000 (max. 10000000)

Binary file not shown.

Binary file not shown.

View file

@ -2,7 +2,10 @@
\usepackage{mathrsfs,comment}
\usepackage[usenames,dvipsnames]{color}
\usepackage[normalem]{ulem}
\usepackage{url}
\usepackage[hyphens]{url}
\usepackage{breakurl}
\usepackage[utf8]{inputenc} % Ensure proper encoding
\usepackage{hyperref} % For clickable links
\usepackage{listings}
\usepackage[all,arc,2cell]{xy}
\UseAllTwocells
@ -259,7 +262,7 @@ The Entity Component System (ECS) architecture provides infrastructure for repre
\subsection{Cache Locality}
When a CPU loads data from Random Access Memory it is stored in a cache tier (i.e. L1, L2, L3),
where the lower tiers are allowed to operate faster relatively to how closely
embedded it is to the CPU.\cite{Flecs} When a program requests some memory, the CPU grabs a whole slab, usually from around 64 to 128 bytes starting from the requested address, and puts it in the CPU cache, i.e. cache line. If the next requested data is in the same slab, the CPU reads it straight from the cache, which is faster than hitting RAM. Inversely, when there is a cache miss, i.e. it is not in the same slab then the CPU cannot process the next instruction because it needs said data and waits a couple of CPU cycles until it successfully fetches it. (Nystrom, 2011).
embedded it is to the CPU.\cite{Nystrom} When a program requests some memory, the CPU grabs a whole slab, usually from around 64 to 128 bytes starting from the requested address, and puts it in the CPU cache, i.e. cache line. If the next requested data is in the same slab, the CPU reads it straight from the cache, which is faster than hitting RAM. Inversely, when there is a cache miss, i.e. it is not in the same slab then the CPU cannot process the next instruction because it needs said data and waits a couple of CPU cycles until it successfully fetches it. (Nystrom, 2011).
\subsection{Data Layouts}
@ -298,7 +301,7 @@ Vectorization is where code meets the requirements to use SIMD instructions. Tho
\subsection{Archetype}
Storing data in contiguous arrays to maximize vectorization and SIMD is the ideal situation,
however it is a very complex problem in implementation. Below the ABC problem\cite{Anderson}
however it is a very complex problem in implementation. Below the ABC problem\cite{ABC}
is demonstrated where 3 entities all have the component \texttt{A} which can be stored in a single
column:
@ -363,7 +366,8 @@ references to the next archetype based on component types (see Figure 1).
Each edge in the graph corresponds to a component that can be added, akin to an
intersection operation on the archetype set. \[A \cap \left( B \cap C \right)\]
Removal of a component from the archetype is akin to a subtraction operation from the set. \[A \cap \left( B \cap C \right) - {C}\]`.
This archetype graph facilitates $\mathsf{O}(1)$ transitions between adjacent archetypes to mitigate the cost of fragmentation.
This archetype graph facilitates $\mathsf{O}(1)$ transitions between adjacent archetypes to
mitigate the cost of structual changes.
\begin{figure}[htbp]
\centering
@ -401,7 +405,7 @@ This method ensures that the dense array remains tightly packed.\cite{Caini}
The sparse set structure is beneficial for programs that frequently manipulate the component structures of entities. However, querying multiple components can become less efficient due to the need to load and reference each component array individually. In contrast to archetypes, which only needs to iterate over entities matching their query.
\section{Implementation}
The decision to use Lua scripting language for the ECS implementation was ultimately chosen because
The decision to use Luau\cite{Luau} for the ECS implementation was ultimately chosen because
a pure Lua implementation confers distinct advantages in terms
of compatibility and portability. By eschewing reliance on external C or C++ libraries
or bindings, we ensure that our ECS framework remains platform-agnostic and
@ -422,11 +426,11 @@ The ECS utilize several key data structures to organize and manage entities and
\item \textbf{EntityIndex:} Maps entity IDs to their corresponding records.
\item \textbf{ComponentIndex}: Maps IDs to archetype records.
\item \textbf{ArchetypeIndex}: Maps type hashes to archetype.
\item \textbf{ComponentIndex}: Maps IDs to archetype maps.
\item \textbf{ArchetypeMap:} Maps archetype IDs to archetype records which is used to find the column for the corresponding component.
\item \textbf{ArchetypeIndex}: Maps type hashes to archetype.
\item \textbf{Archetypes:} Maintains a collection of archetypes indexed by their IDs.
\end{itemize}
@ -634,45 +638,53 @@ meticulous evaluations of the minimal ECS implementation iterations.
My thanks also extend to Eryn L. K. and Lucien Greathouse for their invaluable
guidance and contributions to the Matter project.
\begin{thebibliography}{9}
\sloppy
\tolerance=2000
\hbadness=10000
\begin{thebibliography}{10000}
\bibitem{Martin}
Adam Martin (2007, September).
Entity Systems are the future of MMOG development - \\ Part 1.
Martin, Adam (2007).
\textit{Entity Systems are the future of MMOG development - Part 1}.
\url{https://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/}
\bibitem{Muratori}
Casey Muratori (2014, June).
Semantic Compression.
Muratori, Casey (2014).
\textit{Semantic Compression}.
\url{https://caseymuratori.com/blog_0015}
\bibitem{Flecs}
Sanders Mertens (2019).
Flecs.
\url{https://github.com/SanderMertens/flecs}
\bibitem{ABC}
Mertens, Sanders (2022). \texttt{Building Games in ECS with Entity Relationships. See the ABC problem, component index.}
\url{https://ajmmertens.medium.com/building-an-ecs-1-where-are-my-entities-and-components-63d07c7da742}
\bibitem{Archetypes}
Mertens, Sanders (2022). \texttt{Building an ECS \#2: Archetypes and Vectorization.}
\url{https://ajmmertens.medium.com/building-an-ecs-2-archetypes-and-vectorization-fe21690805f9}
\bibitem{Anderson}
Carter Anderson (2022).
Bevy.
\url{https://github.com/bevyengine/bevy}
Anderson, Carter (2022).
\textit{Bevy}.
Available at: \url{https://github.com/bevyengine/bevy}
\bibitem{Caini}
Michele Caini (2020, August).
ECS back and forth.
\url{https://skypjack.github.io/2020-08-02-ecs-baf-part-9/}
Caini, Michele (2020).
\textit{ECS back and forth}.
Available at: \url{https://skypjack.github.io/2020-08-02-ecs-baf-part-9/}
\bibitem{Nystrom}
Robert Nystrom (2011).
Game Programming Patterns.
Nystrom, Robert (2011).
\textit{Game Programming Patterns}.
\bibitem{gdc}
Scott Bilas (2002).
A Data-Driven Object System (GDC 2002 Talk by Scott Bilas).
\url{https://www.youtube.com/watch?v=Eb4-0M2a9xE}
Bilas, Scott (2002).
\textit{A Data-Driven Object System} (GDC 2002 Talk by Scott Bilas).
Available at: \url{https://www.youtube.com/watch?v=Eb4-0M2a9xE}
\bibitem{matter}
Matter, an archetypal ECS for Roblox
https://matter-ecs.github.io/matter/
\textit{Matter, an archetypal ECS for Roblox}.
Available at: \url{https://matter-ecs.github.io/matter/}
\bibitem{luau}
\end{thebibliography}