blob: 1e3fd4f81abdf1d9697627f730e7c7c7ef79feea (
plain)
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
|
\babel@toc {english}{}\relax
\contentsline {section}{\numberline {1}A brief head note and introduction}{4}{section.1}%
\contentsline {section}{\numberline {2}Analysis}{4}{section.2}%
\contentsline {subsection}{\numberline {2.1}The current problem}{4}{subsection.2.1}%
\contentsline {subsection}{\numberline {2.2}A solution}{4}{subsection.2.2}%
\contentsline {subsection}{\numberline {2.3}What is a programming language}{5}{subsection.2.3}%
\contentsline {subsubsection}{\numberline {2.3.1}A very simple explanation}{5}{subsubsection.2.3.1}%
\contentsline {subsubsection}{\numberline {2.3.2}Why are there so many}{5}{subsubsection.2.3.2}%
\contentsline {subsection}{\numberline {2.4}Researching and getting a scope of the project}{5}{subsection.2.4}%
\contentsline {subsubsection}{\numberline {2.4.1}Examples of older similar projects}{5}{subsubsection.2.4.1}%
\contentsline {subsubsection}{\numberline {2.4.2}Examples of newer similar projects}{6}{subsubsection.2.4.2}%
\contentsline {subsubsection}{\numberline {2.4.3}What should be taken away from these languages}{6}{subsubsection.2.4.3}%
\contentsline {subsection}{\numberline {2.5}Clients}{7}{subsection.2.5}%
\contentsline {subsubsection}{\numberline {2.5.1}Client 1: Amy C}{7}{subsubsection.2.5.1}%
\contentsline {subsubsection}{\numberline {2.5.2}Client 2: Rayn M}{7}{subsubsection.2.5.2}%
\contentsline {subsubsection}{\numberline {2.5.3}Client 3: Myself}{7}{subsubsection.2.5.3}%
\contentsline {subsection}{\numberline {2.6}Questionnaires}{7}{subsection.2.6}%
\contentsline {subsubsection}{\numberline {2.6.1}Amy C, initial ideas}{7}{subsubsection.2.6.1}%
\contentsline {subsubsection}{\numberline {2.6.2}Notes from questionnaire 1}{8}{subsubsection.2.6.2}%
\contentsline {subsection}{\numberline {2.7}The first elements of the project}{8}{subsection.2.7}%
\contentsline {section}{\numberline {3}Modelling}{9}{section.3}%
\contentsline {subsection}{\numberline {3.1}Linked lists}{9}{subsection.3.1}%
\contentsline {subsection}{\numberline {3.2}Dictionaries}{10}{subsection.3.2}%
\contentsline {subsection}{\numberline {3.3}Prototyping harder features}{10}{subsection.3.3}%
\contentsline {subsubsection}{\numberline {3.3.1}Abstract syntax trees (AST's) theory}{10}{subsubsection.3.3.1}%
\contentsline {subsubsection}{\numberline {3.3.2}Abstract syntax trees (AST's) practical}{11}{subsubsection.3.3.2}%
\contentsline {subsection}{\numberline {3.4}Feedback}{16}{subsection.3.4}%
\contentsline {subsection}{\numberline {3.5}Mixing linked lists and AST's}{16}{subsection.3.5}%
\contentsline {section}{\numberline {4}Objectives}{16}{section.4}%
\contentsline {subsection}{\numberline {4.1}Core objectives}{16}{subsection.4.1}%
\contentsline {subsection}{\numberline {4.2}Extra objectives}{17}{subsection.4.2}%
\contentsline {section}{\numberline {5}Design}{17}{section.5}%
\contentsline {subsection}{\numberline {5.1}Language specification}{17}{subsection.5.1}%
\contentsline {subsection}{\numberline {5.2}Keywords}{17}{subsection.5.2}%
\contentsline {subsection}{\numberline {5.3}Other code elements}{18}{subsection.5.3}%
\contentsline {subsection}{\numberline {5.4}Memory management}{19}{subsection.5.4}%
\contentsline {subsection}{\numberline {5.5}The steps in compiling a zippy program}{19}{subsection.5.5}%
\contentsline {subsubsection}{\numberline {5.5.1}Converting zippy to C}{19}{subsubsection.5.5.1}%
\contentsline {subsection}{\numberline {5.6}Actually using zippy}{19}{subsection.5.6}%
\contentsline {subsection}{\numberline {5.7}Modelling the compilation process}{21}{subsection.5.7}%
\contentsline {subsection}{\numberline {5.8}Modelling data structures I will use}{22}{subsection.5.8}%
\contentsline {subsubsection}{\numberline {5.8.1}AstNode}{22}{subsubsection.5.8.1}%
\contentsline {subsubsection}{\numberline {5.8.2}Array list}{22}{subsubsection.5.8.2}%
\contentsline {subsection}{\numberline {5.9}Why so few?}{22}{subsection.5.9}%
\contentsline {section}{\numberline {6}Implementation}{23}{section.6}%
\contentsline {subsection}{\numberline {6.1}Main C code}{23}{subsection.6.1}%
\contentsline {subsection}{\numberline {6.2}Header files}{35}{subsection.6.2}%
\contentsline {subsection}{\numberline {6.3}The C linking process}{36}{subsection.6.3}%
\contentsline {subsection}{\numberline {6.4}Zpypkg}{37}{subsection.6.4}%
\contentsline {subsection}{\numberline {6.5}Zpylib}{39}{subsection.6.5}%
\contentsline {subsection}{\numberline {6.6}Other libraries}{43}{subsection.6.6}%
\contentsline {section}{\numberline {7}Testing}{43}{section.7}%
\contentsline {subsection}{\numberline {7.1}Introduction}{43}{subsection.7.1}%
\contentsline {subsection}{\numberline {7.2}Fibonacci}{43}{subsection.7.2}%
\contentsline {subsubsection}{\numberline {7.2.1}Code}{43}{subsubsection.7.2.1}%
\contentsline {subsubsection}{\numberline {7.2.2}Demo}{44}{subsubsection.7.2.2}%
\contentsline {subsubsection}{\numberline {7.2.3}Performance}{44}{subsubsection.7.2.3}%
\contentsline {subsection}{\numberline {7.3}String splitting}{45}{subsection.7.3}%
\contentsline {subsubsection}{\numberline {7.3.1}Code}{45}{subsubsection.7.3.1}%
\contentsline {subsubsection}{\numberline {7.3.2}Output}{45}{subsubsection.7.3.2}%
\contentsline {subsubsection}{\numberline {7.3.3}Explaining}{46}{subsubsection.7.3.3}%
\contentsline {subsection}{\numberline {7.4}zpypkg example}{46}{subsection.7.4}%
\contentsline {subsubsection}{\numberline {7.4.1}Using zpypkg}{46}{subsubsection.7.4.1}%
\contentsline {subsection}{\numberline {7.5}Space invaders}{46}{subsection.7.5}%
\contentsline {subsubsection}{\numberline {7.5.1}Background}{46}{subsubsection.7.5.1}%
\contentsline {subsubsection}{\numberline {7.5.2}Code}{46}{subsubsection.7.5.2}%
\contentsline {subsubsection}{\numberline {7.5.3}Seeing it go}{49}{subsubsection.7.5.3}%
\contentsline {section}{\numberline {8}Evaluation}{50}{section.8}%
\contentsline {subsection}{\numberline {8.1}Core objectives}{50}{subsection.8.1}%
\contentsline {subsection}{\numberline {8.2}Extra objectives}{51}{subsection.8.2}%
\contentsline {subsection}{\numberline {8.3}Comparing the goals to the product}{51}{subsection.8.3}%
\contentsline {subsubsection}{\numberline {8.3.1}A compiler for the Zippy language}{51}{subsubsection.8.3.1}%
\contentsline {subsubsection}{\numberline {8.3.2}AST's used to compile source code}{51}{subsubsection.8.3.2}%
\contentsline {subsubsection}{\numberline {8.3.3}A lisp like syntax}{51}{subsubsection.8.3.3}%
\contentsline {subsubsection}{\numberline {8.3.4}Functional paradigm language}{51}{subsubsection.8.3.4}%
\contentsline {subsubsection}{\numberline {8.3.5}Recursion}{52}{subsubsection.8.3.5}%
\contentsline {subsubsection}{\numberline {8.3.6}Higher order functions}{52}{subsubsection.8.3.6}%
\contentsline {subsubsection}{\numberline {8.3.7}A high performance language}{52}{subsubsection.8.3.7}%
\contentsline {subsubsection}{\numberline {8.3.8}A package manager}{52}{subsubsection.8.3.8}%
\contentsline {subsubsection}{\numberline {8.3.9}Ability to call C functions}{52}{subsubsection.8.3.9}%
\contentsline {subsection}{\numberline {8.4}Thoughts on the core objectives}{53}{subsection.8.4}%
\contentsline {subsection}{\numberline {8.5}Extra objectives}{53}{subsection.8.5}%
\contentsline {section}{\numberline {9}Conclusion}{53}{section.9}%
\contentsline {subsection}{\numberline {9.1}Final thoughts}{53}{subsection.9.1}%
|