about summary refs log tree commit diff stats
path: root/075channel.mu
Commit message (Collapse)AuthorAgeFilesLines
* 3933Kartik K. Agaram2017-06-201-12/+12
|
* 3932Kartik K. Agaram2017-06-201-5/+25
| | | | | Some corrections and one bugfix to channels after reviewing their implementation with Caleb Couch.
* 3828 - make buffers shape-shifting (generic)Kartik K. Agaram2017-04-181-2/+2
|
* 3688Kartik K. Agaram2016-11-251-0/+3
| | | | | | | Move my todos over the past couple of years into the codebase now that it might be going dormant. Surprising how few todos left undone!
* 3608 - concurrent writes to fake file systemKartik K. Agaram2016-10-291-0/+4
|
* 3552Kartik K. Agaram2016-10-221-1/+1
| | | | | | | | | | | | | | | | | | Stop requiring jump instructions to explicitly provide a ':label' type for jump targets. This has been a source of repeated confusion for my students: a) They'd add the ':label' to the label definition rather than the jump target (label use) b) They'd spend time thinking about whether the initial '+' prefix was part of the label name. In the process I cleaned up a couple of things: - the space of names is more cleanly partitioned into labels and non-labels (clarifying that '_' and '-' are non-label prefixes) - you can't use label names as regular variables anymore - you can infer the type of a label just from its name
* 3527Kartik K. Agaram2016-10-201-1/+15
|
* 3429 - standardize Mu scenariosKartik K. Agaram2016-09-281-21/+22
| | | | | | | | | | | | | A long-standing problem has been that I couldn't spread code across 'run' blocks because they were separate scopes, so I've ended up making them effectively comments. Running code inside a 'run' block is identical in every way to simply running the code directly. The 'run' block is merely a visual aid to separate setup from the component under test. In the process I've also standardized all Mu scenarios to always run in a local scope, and only use (raw) numeric addresses for values they want to check later.
* 3392Kartik K. Agaram2016-09-171-2/+2
| | | | Bugfix for the "remaining bug" mentioned in commit 3391.
* 3390Kartik K. Agaram2016-09-171-5/+5
|
* 3389Kartik K. Agaram2016-09-171-46/+46
|
* 3387Kartik K. Agaram2016-09-171-31/+31
|
* 3385Kartik K. Agaram2016-09-171-45/+45
|
* 3379Kartik K. Agaram2016-09-171-6/+6
| | | | Can't use type abbreviations inside 'memory-should-contain'.
* 3353Kartik K. Agaram2016-09-151-0/+5
| | | | | | | | | | | | | Fix failing scenarios in channel layer. We do so by introducing a kludgy new instruction to explicitly signal when a routine is stuck ('blocked') and waiting on another. All this locking and blocking may well be a crap design. We'll see if we find ourselves using these primitives again. Ideally we don't need them for anything else now that we're done building channels. Still some failing scenarios left in chessboard.mu. Let's see how that goes.
* 3351 - new but incomplete synchronization setupKartik K. Agaram2016-09-141-21/+39
| | | | | | | | | | | | | Previously our channels were based on an unconventional `wait-for-location` primitive that waits for a specific address to change its contents. This only works as long as a channel has a single reader and a single writer routine. To support multiple readers and writers we switch to a more conventional compare-and-set primitive. There's still a couple of failing scenarios, though -- the ones using `wait-for-routine-to-block`, because the new approach never blocks on an empty or full channel, just yields CPU for a time before polling. Hmm, how to fix this?
* 3337 - first use of type abbreviations: textKartik K. Agaram2016-09-121-1/+1
| | | | | In the process I've uncover a couple of situations we don't support type abbreviations yet. They're next.
* 3258Kartik K. Agaram2016-08-261-4/+4
| | | | | | | | | | | | | In the process of debugging the last couple of commits (though I no longer remember exactly how) I noticed that 'wait-for-routine' only waits until the target routine stops running for any reason, including when it blocks on something. That's not the synchronization primitive we want in production code, even if it's necessary for some scenarios like 'buffer-lines-blocks-until-newline'. So we rename the old 'wait-for-routine' primitive to 'wait-for-routine-to-block', and create a new version of 'wait-for-routine' that say callers of 'start-writing' can safely use, because it waits until a target routine actually completes (either successfully or not).
* 3231 - reading from fake files in scenariosKartik K. Agaram2016-08-201-0/+2
|
* 3225 - testable interface for writing filesKartik K. Agaram2016-08-181-1/+0
| | | | | | | | For example usage of file operations, see filesystem.mu. Is it ugly that we don't actually write to disk unless we wait for the writing routine to exit? Maybe there's a nice way to wrap it. At any rate, all buffering is explicit, which seems a win compared to *nix.
* 3194Kartik K. Agaram2016-08-161-2/+2
|
* 3154 - reorg before making 'random' more testableKartik K. Agaram2016-07-271-0/+452
383e601f ^
c7325de0 ^
c7325de0 ^

383e601f ^
c7325de0 ^
383e601f ^
c7325de0 ^
c7325de0 ^
79e9ab83 ^
383e601f ^
79e9ab83 ^
79e9ab83 ^



383e601f ^
79e9ab83 ^




6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
79e9ab83 ^



383e601f ^
79e9ab83 ^




6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
79e9ab83 ^



383e601f ^
79e9ab83 ^




6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
79e9ab83 ^



383e601f ^
79e9ab83 ^




6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
79e9ab83 ^



383e601f ^
79e9ab83 ^




6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
79e9ab83 ^



383e601f ^
79e9ab83 ^




6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
383e601f ^
79e9ab83 ^
2af418fd ^
79e9ab83 ^
383e601f ^
79e9ab83 ^
2af418fd ^
79e9ab83 ^
2af418fd ^
79e9ab83 ^
6c9631d7 ^
79e9ab83 ^

383e601f ^
79e9ab83 ^
383e601f ^
79e9ab83 ^
2af418fd ^
79e9ab83 ^
383e601f ^
79e9ab83 ^
2af418fd ^



6c9631d7 ^
2af418fd ^

383e601f ^
2af418fd ^
383e601f ^
2af418fd ^


383e601f ^
2af418fd ^



79e9ab83 ^
6c9631d7 ^
79e9ab83 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191