-
Notifications
You must be signed in to change notification settings - Fork 15
/
TODO
133 lines (81 loc) · 4.2 KB
/
TODO
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
Here are a bunch of project ideas, both for me and for anyone else who
wants to help out. Starred items are ones I've already spent time
thinking about; check with me if you want to build on that. Plussed
items are considered a priority for v3.
EASY
Add your favorite missing function to the setting, with tests.
In particular, I could use: sprintf, dir, write, close, split, ...
Add $*ARGFILES, %*ENV, your favorite other *-var.
Add the 'loop' statement. Should be very straightforward.
Give labels methods to invoke control operations.
Implement Sub.leave and CallFrame.leave
Add decimal literals. (Don't try to implement your own floating point
radix converter; use +$str)
Add more benchmarks to perf/.
Character class expressions like [[a .. A] & [\W]]
::> cut syntax.
Binding to values like @PROCESS::ARGS doesn't contextualize correctly. Fix.
Fudge and run your favorite spectest file.
MEDIUM
Implement your favorite ?-vars.
Finish the set of Num operators, includig number-theoretic and
transcedental functions.
*Implement &?BLOCK and &?ROUTINE.
Break down Sub into a hierarchy Code->Block->Routine->Sub->Method.
Implement buffer types and binary I/O.
Implement a general socket API.
Design and implement a generic system for multiplexed and non-blocking I/O.
*CATCH and CONTROL blocks.
+ Jump table optimization for when chains.
+ Find out what readonly subs are supposed to do with lists, etc and implement
that. Also add return-rw, take-rw, and the is rw trait for subs and attrs.
*Implement BUILD submethod calling.
Methods with variable names need to call the correct action method. (See
the horrible hack in NieczaActions.FALLBACK).
Audit accelerated context routines for correct undefined value and odd
representation handling. +Num shouldn't crash, etc.
+*A general procedure for communicating data up and down the meta-spiral.
Use this to make a very simple eval knockoff.
+ Run MAIN without a temporary file (needed for eval knockoff).
HARD
Design and implement some sort of NFG thing that allows use codes, graphs,
etc and handles canonical equivalence in regexes.
Determine the best way to map Perl6 process-think onto Windows/.NET
process think. Then implement &run, &runinstead, and &rungather.
+ Replace nam with something that doesn't use as much memory. (Talk to
pmurias to get his experiences.)
*Implement junctions. You'll need to add some slightly tricky code
on the slow path of nominal type checks. You will also need to fix
the optimized builtins to use nominal type checking. Bonus points
if the optimizer can turn if $x == any(1,3,5) into a loop.
*Implement multiple dispatch.
*Create multiple numeric types with sensible overloads between them. Add
more numeric operators.
Niecza is probably the ideal platform for prototyping a concurrency
system which will whirlpool back into the synopses.
*Parallel hyperops! Read the Cilk papers, they seem to have a data
parallelism model most similar to what Perl 6 needs.
Understand the Str/Stringy distinctions, and improve stringification
and numification handling for Any. Develop a warning system.
*Explicitly imprecise error reporting. In many circumstances niecza
doesn't actually have an exact line number; it should be able to
report a range.
Design something to take the place of STD's :$*endsym, probably as
a trait of some kind.
Design something to deal with the last remnants of cursor mutability
in STD.pm6.
+*"Immediate mode metamodel" - Metamodel::StaticSub object should be
constructed by the closing brace at the latest. This will require
a lot of STD hacking and is required for BEGIN to work.
Study Nil and find the correct way to integrate it into Niecza.
Add a JVM backend.
Add a Parrot backend.
NASTY
A multicore job scheduler would be cool. You'll need to talk with
TimToady on dependency extraction; there are some subtle points with
modules that export slangs.
*Figure out how eval can possibly work. Do it.
*Figure out how BEGIN can possibly work. Do it.
Native type support.
SIMD hyperoperators.
Export Perl 6 code into a CLR .dll