about summary refs log tree commit diff stats
path: root/030container.cc
Commit message (Collapse)AuthorAgeFilesLines
* 3045 - generalize core refcounting data structureKartik K. Agaram2016-06-111-3/+1
|
* 2992Kartik K. Agaram2016-05-201-0/+14
| | | | | Raise an error if a 'put' or 'put-index' doesn't match ingredient and product. That wouldn't do what you would expect.
* 2991Kartik K. Agaram2016-05-201-1/+1
| | | | | Never mind, always quote direct quotes from code in error messages. Dilated reagents are the uncommon case.
* 2990Kartik K. Agaram2016-05-201-12/+12
| | | | | | | | | | Standardize quotes around reagents in error messages. I'm still sure there's issues. For example, the messages when type-checking 'copy'. I'm not putting quotes around them because in layer 60 I end up creating dilated reagents, and then it's a bit much to have quotes and (two kinds of) brackets. But I'm sure I'm doing that somewhere..
* 2968Kartik K. Agaram2016-05-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | More reorganization in preparation for implementing recursive abandon(). Refcounts are getting incredibly hairy. I need to juggle containers containing other containers, and containers *pointing* to other containers. For a while I considered getting rid of address_element_info entirely and just going by types for every single update_refcount. But that's definitely more work, and it's unclear that things will be cleaner/shorter/simpler. I haven't measured the speedup, but it seems worth optimizing every pointer copy to make sure we aren't manipulating types at runtime. The key insight now is a) to continue to compute information about nested containers at load time, because that's the common case when updating refcounts, but b) to compute information about *pointed* values at run-time, because that's the uncommon case. As a result, we're going to cheat in the interpreter and use type information at runtime just for abandon(), just because the corresponding task when we get to a compiler will be radically different. It will still be tractable, though.
* 2967Kartik K. Agaram2016-05-171-2/+2
|
* 2966Kartik K. Agaram2016-05-171-1/+1
|
* 2956Kartik K. Agaram2016-05-141-1/+1
|
* 2955 - back to more refcount housekeepingKartik K. Agaram2016-05-121-15/+15
| | | | | Update refcounts of address elements when copying containers. Still lots to do; see todo list at end of 036refcount.cc.
* 2935Kartik K. Agaram2016-05-071-1/+1
|
* 2934 - all layers running againKartik K. Agaram2016-05-071-1/+25
| | | | | | Since I switched to a Mac laptop (commit 2725) I've been lax in running test_all_layers because I have to ssh into a server and whatnot. I should just get CI setup somewhere..
* 2932Kartik K. Agaram2016-05-061-1/+1
| | | | | | | More consistent labeling of waypoints. Use types only when you need to distinguish between function overloadings. Otherwise just use variable names unless it's truly not apparent what they are (like that the result is a recipe in "End Rewrite Instruction").
* 2931 - be explicit about making copiesKartik K. Agaram2016-05-061-13/+13
|
* 2898 - start filling in missing refcountsKartik K. Agaram2016-05-031-3/+2
| | | | | | | This commit covers instructions 'put', 'put-index' and 'maybe-convert'. Next up are the harder ones: 'copy' and 'merge'. In these cases there's a non-scalar being copied, and we need to figure out which locations within it need to update their refcount.
* 2893Kartik K. Agaram2016-05-031-219/+0
|
* 2891 - precompute container sizes and offsetsKartik K. Agaram2016-05-021-12/+110
| | | | | | | It's a bit of a trade-off because we need to store copies of container metadata in each reagent (to support shape-shifting containers), and metadata is not lightweight and will get heavier. But it'll become more unambiguously useful when we switch to a compiler.
* 2889Kartik K. Agaram2016-04-301-13/+11
|
* 2888Kartik K. Agaram2016-04-301-3/+3
|
* 2887Kartik K. Agaram2016-04-301-4/+1
|
* 2882 - warn if programmer overuses transform_all()Kartik K. Agaram2016-04-281-20/+52
| | | | | | | | | | | | | | | | | | | | This continues a line of thought sparked in commit 2831. I spent a while trying to avoid calling size_of() at transform-time, but there's no getting around the fact that translating names to addresses requires knowing how much space they need. This raised the question of what happens if the size of a container changes after a recipe using it is already transformed. I could go down the road of trying to detect such situations and redoing work, but that massively goes against the grain of my original design, which assumed that recipes don't get repeatedly transformed. Even though we call transform_all() in every test, in a non-testing run we should be loading all code and calling transform_all() just once to 'freeze-dry' everything. But even if we don't want to support multiple transforms it's worth checking that they don't occur. This commit does so in just one situation. There are likely others.
* 2879 - allow extending shape-shifting containersKartik K. Agaram2016-04-271-1/+2
|
* 2874Kartik K. Agaram2016-04-271-1/+1
| | | | | | Be more consistent that 'return' is the name of the instruction, and 'reply' just a synonym. Maybe I should take it out. It wouldn't affect the recipe/ingredient terminology while I teach..
* 2863Kartik K. Agaram2016-04-241-0/+779
| | | | | Finally after much massaging, the 'address' and 'new' layers are adjacent.
* 2821 - addresses before containersKartik K. Agaram2016-04-101-783/+0
|
* 2819Kartik K. Agaram2016-03-311-2/+2
|
* 2818Kartik K. Agaram2016-03-281-3/+2
|
* 2817Kartik K. Agaram2016-03-281-6/+2
|
* 2815Kartik K. Agaram2016-03-271-1/+1
|
* 2803Kartik K. Agaram2016-03-211-21/+21
| | | | | Show more thorough information about instructions in the trace, but keep the original form in error messages.
* 2799 - new approach to undoing changes in testsKartik K. Agaram2016-03-201-31/+2
| | | | | | | | As outlined at the end of 2797. This worked out surprisingly well. Now the snapshotting code touches fewer layers, and it's much better behaved, with less need for special-case logic, particularly inside run_interactive(). 30% slower, but should hopefully not cause any more bugs.
* 2791Kartik K. Agaram2016-03-191-2/+1
| | | | | | | Simplify 2790 by simply not computing any type->value inside parse_type_tree. It now only generates names, and it turns out the consumers handle the absence of values anyway. Now parse_type_tree no longer pollutes the Type_ordinal table with type ingredients.
* 2790Kartik K. Agaram2016-03-191-1/+2
| | | | | | | | The issue alluded to in the previous 2789 is now fixed. I'm not happy with my solution, though. I pollute Type_ordinal with type ingredients in parse_type_tree and simply ignore such entries later on. I'd much rather avoid the pollution in the first place, but I'm not sure how to do that..
* 2773 - switch to 'int'Kartik K. Agaram2016-03-131-25/+25
| | | | This should eradicate the issue of 2771.
* 2735 - define recipes using 'def'Kartik K. Agaram2016-03-081-28/+28
| | | | | | | | | | | | I'm dropping all mention of 'recipe' terminology from the Readme. That way I hope to avoid further bike-shedding discussions while I very slowly decide on the right terminology with my students. I could be smarter in my error messages and use 'recipe' when code uses it and 'function' otherwise. But what about other words like ingredient? It would all add complexity that I'm not yet sure is worthwhile. But I do want separate experiences for veteran programmers reading about Mu on github and for people learning programming using Mu.
* 2712Kartik K. Agaram2016-02-261-24/+24
|
* 2709Kartik K. Agaram2016-02-251-4/+0
| | | | | Only Hide_errors when strictly necessary. In other places let test failures directly show the unexpected error.
* 2683Kartik K. Agaram2016-02-211-1/+0
| | | | | | Ok, we don't need that check after all, because the type_ingredient_names.empty() check earlier in the layer prevents it from ever triggering.
* 2681 - drop reagent types from reagent propertiesKartik K. Agaram2016-02-211-63/+38
| | | | | | | | | | | | | | | | | All my attempts at staging this change failed with this humongous commit that took all day and involved debugging three monstrous bugs. Two of the bugs had to do with forgetting to check the type name in the implementation of shape-shifting recipes. Bug #2 in particular would cause core tests in layer 59 to fail -- only when I loaded up edit/! It got me to just hack directly on mu.cc until I figured out the cause (snapshot saved in mu.cc.modified). The problem turned out to be that I accidentally saved a type ingredient in the Type table during specialization. Now I know that that can be very bad. I've checked the traces for any stray type numbers (rather than names). I also found what might be a bug from last November (labeled TODO), but we'll verify after this commit.
* 2678Kartik K. Agaram2016-02-201-1/+1
| | | | | | | Start using type names from the type tree rather than the property tree in most places. Hopefully the only occurrences of 'properties.at(0).second' left are ones where we're managing it. Next we can stop writing to it.
* 2677Kartik K. Agaram2016-02-201-2/+2
| | | | Include type names in the type tree. Though we aren't using them yet.
* 2671 - never use debug_string() in tracesKartik K. Agaram2016-02-191-14/+14
| | | | It's only for transient debugging.
* 2685Kartik K. Agaram2016-02-191-15/+15
| | | | | | | | | | | | | | | | Stack of plans for cleaning up replace_type_ingredients() and a couple of other things, from main problem to subproblems: include type names in the type_tree rather than in the separate properties vector make type_tree and string_tree real cons cells, with separate leaf nodes redo the vocabulary for dumping various objects: do we really need to_string and debug_string? can we have a version with *all* information? can we have to_string not call debug_string? This commit nibbles at the edges of the final task, switching from member method syntax to global function like almost everything else. I'm mostly using methods just for STL in this project.
* 2679 - all tests passing againKartik K. Agaram2016-02-191-4/+9
| | | | | | | | | | Still not done, though: a) There's a few memory leaks to track down, including one in hash from 2668. b) replace_type_ingredients has gotten *even* uglier. I need to rethink it.
* 2670 - improvements to genericsKartik K. Agaram2016-02-181-0/+2
| | | | | | | | | | | Eliminated a few holes, gained more clarity on the shape of others. Maybe I was sleep-deprived, but this was really hard until I wrote a few unit tests directly on replace_type_ingredient. Still one flaw remaining: the type-checker isn't smart enough to handle 'merge' for all the new cases. Tests pass since we don't use those features outside C++ tests yet.
* 2669Kartik K. Agaram2016-02-171-0/+1
|
* 2667 - redo container data structureKartik K. Agaram2016-02-171-46/+28
| | | | I've been gradually Greenspunning reagents. Just go all the way.
* 2666Kartik K. Agaram2016-02-171-1/+1
|
* 2658 - warn when containers contain arraysKartik K. Agaram2016-02-151-0/+1
| | | | | | | The rule is: a container type's size must be fixed. Arrays can violate this rule if the array length isn't included in the type. But we haven't been warning about this, and 'new' has been silently turning array elements to be empty.
* 2657 - type-checking for 'merge' instructionsKartik K. Agaram2016-02-151-2/+178
|
* 2656Kartik K. Agaram2016-02-141-0/+1
|
9df77604d'>76755b28 ^
672e3e50 ^
0e4a335e ^

4690ce81 ^
db1f56c8 ^
d009e158 ^
4690ce81 ^
d009e158 ^


a654e4ec ^
4690ce81 ^
d009e158 ^

0e4a335e ^
d009e158 ^
0e4a335e ^

c4699bc3 ^
672e3e50 ^
c4699bc3 ^
65361948 ^
672e3e50 ^
a654e4ec ^
672e3e50 ^
a654e4ec ^
672e3e50 ^





65361948 ^


a654e4ec ^
65361948 ^


672e3e50 ^


76755b28 ^

4690ce81 ^


90560d71 ^

4690ce81 ^
2f02189d ^
90560d71 ^

76755b28 ^


4690ce81 ^

65361948 ^
672e3e50 ^
a654e4ec ^
65361948 ^
2f02189d ^
76755b28 ^
db1f56c8 ^
76755b28 ^
672e3e50 ^
65361948 ^

672e3e50 ^




4690ce81 ^
9570363a ^

672e3e50 ^

a654e4ec ^
672e3e50 ^
a654e4ec ^
672e3e50 ^


4690ce81 ^
d009e158 ^
9570363a ^

672e3e50 ^
4690ce81 ^
9570363a ^

672e3e50 ^

a654e4ec ^
672e3e50 ^
a654e4ec ^
672e3e50 ^
a654e4ec ^
672e3e50 ^
a654e4ec ^
672e3e50 ^
a654e4ec ^
672e3e50 ^
76755b28 ^
4690ce81 ^
d009e158 ^
65361948 ^

9570363a ^
65361948 ^
672e3e50 ^
4690ce81 ^
65361948 ^
9570363a ^
672e3e50 ^



4690ce81 ^
d009e158 ^
672e3e50 ^
4690ce81 ^
9570363a ^
672e3e50 ^


4bbd3ded ^

672e3e50 ^
90560d71 ^

672e3e50 ^


672e3e50 ^
4690ce81 ^
9570363a ^
672e3e50 ^











4690ce81 ^
9570363a ^

672e3e50 ^



76755b28 ^




4690ce81 ^
d009e158 ^
76755b28 ^


4690ce81 ^
76755b28 ^








4690ce81 ^
76755b28 ^


65361948 ^


4690ce81 ^
d009e158 ^
65361948 ^

4690ce81 ^
9570363a ^
65361948 ^



a654e4ec ^
4690ce81 ^


65361948 ^


65361948 ^

a654e4ec ^

4690ce81 ^
65361948 ^




672e3e50 ^



4690ce81 ^
d009e158 ^
9570363a ^
672e3e50 ^
65361948 ^
672e3e50 ^
4690ce81 ^
9570363a ^
672e3e50 ^







76755b28 ^

4690ce81 ^

c842d90b ^
9542bb11 ^

4690ce81 ^
2f02189d ^
9542bb11 ^

76755b28 ^


4690ce81 ^
a654e4ec ^


4690ce81 ^
65361948 ^
672e3e50 ^


65361948 ^









76755b28 ^

4690ce81 ^

c842d90b ^
9542bb11 ^

4690ce81 ^
2f02189d ^
9542bb11 ^

76755b28 ^


4690ce81 ^
a654e4ec ^

4690ce81 ^
65361948 ^









76755b28 ^

4690ce81 ^

c842d90b ^
9542bb11 ^

4690ce81 ^
2f02189d ^
9542bb11 ^

76755b28 ^


4690ce81 ^
a654e4ec ^

4690ce81 ^
65361948 ^









76755b28 ^

4690ce81 ^
76755b28 ^

65361948 ^
4690ce81 ^
a654e4ec ^
65361948 ^

672e3e50 ^

90560d71 ^




4690ce81 ^
d009e158 ^
0e4a335e ^



4690ce81 ^
90560d71 ^
4690ce81 ^
0e4a335e ^

90560d71 ^






4690ce81 ^

76755b28 ^
90560d71 ^


4690ce81 ^
90560d71 ^



32b8fac2 ^



32b8fac2 ^




32b8fac2 ^










90560d71 ^
a654e4ec ^
90560d71 ^





76755b28 ^

4690ce81 ^

c842d90b ^
90560d71 ^

4690ce81 ^
2f02189d ^
90560d71 ^

4690ce81 ^
2f02189d ^
90560d71 ^

76755b28 ^


4690ce81 ^
a654e4ec ^

4690ce81 ^
90560d71 ^





d009e158 ^
e81da299 ^




c842d90b ^
e81da299 ^






c842d90b ^
e81da299 ^






















c842d90b ^
4690ce81 ^
c842d90b ^
d009e158 ^
c842d90b ^
d009e158 ^
c842d90b ^
d009e158 ^
4690ce81 ^
c842d90b ^


d009e158 ^
c842d90b ^


e81da299 ^
c842d90b ^
e81da299 ^









e81da299 ^







c842d90b ^



















672e3e50 ^


a654e4ec ^
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665