diff options
Diffstat (limited to 'comp/lucas-standen-NEA/writeup')
-rw-r--r-- | comp/lucas-standen-NEA/writeup/coverpage.ms | 169 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/coverpage.ps | 721 | ||||
-rwxr-xr-x | comp/lucas-standen-NEA/writeup/make.sh | 1 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/questions-for-amy.ps | 2 | ||||
-rw-r--r-- | comp/lucas-standen-NEA/writeup/recipe.toml | 22 |
5 files changed, 563 insertions, 352 deletions
diff --git a/comp/lucas-standen-NEA/writeup/coverpage.ms b/comp/lucas-standen-NEA/writeup/coverpage.ms index 54e4746..48a6071 100644 --- a/comp/lucas-standen-NEA/writeup/coverpage.ms +++ b/comp/lucas-standen-NEA/writeup/coverpage.ms @@ -6,6 +6,23 @@ Lucas standen 7949 .AB .NH 1 +Reading this document +.PP +This document is writen in roff and can be found online at + +https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/writeup + +It is using the ms macro of troff. It can be compiled using the Makefile, or make.sh. A table of +contents has been generated using pdftocgen, it is embedded into the pdf, most pdf readers have +a button to open it (firefox has it in the top left, in zathura press tab to view it). + +A note on formating of the roff, the text is limited to 100 characters per line and is writen in plan +ascii, no utf8 emojis and the like. code snippets are left in plain text, and the full section of +code they are from should be linked above them; assuming they are from a file and not a small +example. Any comments on code snippets will be removed for the sake of readability in the roff +document, however the can still be found in the raw files. + +.NH 1 Analysis .NH 2 The current problem @@ -35,44 +52,36 @@ debugging tools. The goal of Zippy is to make codding easier, while remaining fast, with a interpreter writen in C. .NH 2 -Clients -.PP -In a project of this nature, the Client is every programmer alive; which is a pretty large scope. -To narrow this down as much as possible, I will interview a small handful of people throughout the -project, of different skill levels. - +What is a programming language .NH 3 -Client 1, Amy C +A very simple explanation .PP -My first client is a friend of mine, Amy C, she is a confident programmer who has completed many -complicated projects. I am choosing her as a client as she can give me technical feed back on my -project and its function/utility. +At its lowest definition a PL is a set of specific words, that when given to a computer in the +right order have a reproducible behaviour. A more human way of saying that, would be its how we +control computers. .NH 3 -Client 2, a technical user, but not a programmer +Why are there so many .PP -some stuff about this person. -.NH 3 -Client 3, a normie -.PP -some stuff about how the normie finds the completed project. -.NH 3 -Client 4, myself -.PP -I've wanted to take out a project like this for a long long time, and this is the perfect -opportunity to do so, I will be assessing myself along the way of this, building the project to my -personal specification. +When someone is looking at code it can often be seen as just that, however there are hundreds of +languages that all take the idea of "code" in very different ways. Some are designed for specific +hardware, some are designed for making general use programs while others are highly specialized. +It is important to see "code", as more than just one overarching term and instead see where the code +is being used, and evaluate it from that. + .NH 2 -Examples of similar projects -.PP -As Zippy will be interpreted, I should compare it to other such languages; trying to compare it to -C++/rust/go, isn't helpful as they are so very different in the way they function. +Researching, and getting a scope of the project +.PP +Before I start to design a language i should first find examples of others and find what i want my +language to be like. -Zippy is by far not the first language, and I'm only one person, so I can't expect to beat others in -everything. +I'd like my language to feel modern so i should take inspiration from what other modern languages +do, however on the backed i want my language to be stable and fast, for that i should look at +older projects. -Below are a few languages that zippy should be compared to throught developemen: .NH 3 +Examples of older similar projects, that are a good base for my language +.NH 4 Python .PP Python is a high level OOP language that was designed in 1991. It was made to make programming easy @@ -81,20 +90,21 @@ cases, it is slow and inefficient, and very bloated. https://www.python.org/ -Zippy should take pythons high level abstractions, as they make programing very easy and it should -try and take notes from its libaries as they are mostly well writen, and well documented. -.NH 3 +Zippy should take pythons high level abstractions, as they make programming very easy and it should +try and take notes from its libraries as they are mostly well written, and well documented. +.NH 4 Lisp .PP Lisp is the second ever programming language, developed at MiT, it is the first functional language, creating many common features like higher order functions, recursion, and garbage collection. It is -generally not used anymore as it feels old compared to other functional languages, like ocaml or haskell. +generally not used any more as it feels old compared to other functional languages, like Ocaml or +Haskell. https://lisp-lang.org/ Zippy should try to take alot from the syntax of lisp, () make it easy to see what parts of code will effect what, and make things easy to parse. -.NH 3 +.NH 4 Perl .PP Perl is scripting language designed for use in linux, when bash is too slow, or not suited for the @@ -103,10 +113,90 @@ Its syntax is quite strange however and it is slow. Making it poorly suited towa https://www.perl.org/ -Zippy should take from perls minimalisum, it is a small language that is of a similar size to bash +Zippy should take from perls minimalism, it is a small language that is of a similar size to bash or zsh, while feeling closer to python. If zippy can achieve a similar small size, while remaining powerful I will be happy. +.NH 3 +Examples of new similar projects that are also a good base +.NH 4 +Gleam +.PP +Gleam is a modern language releasing in the past 5 years. It is highly functional, with no mutable +data, no traditional loops. Instead recursion can be used to replace alot of these features. +Gleam compiles to erlang/Beam bytecode, much like java to the jvm, and doing this has made Gleam +a highly scalable language with good library support out the box. + +https://gleam.run/ + +Zippy should take from the functional elements of Gleam, as they keep programs safer, however Zippy +should not remove all procedural elements, as for loops are very helpful +.NH 4 +Haskell +.PP +Haskell is another modern functional language known for being very complicated, however incredibly +powerful. Its syntax feels very mathematical, and incredibly terse. + +https://www.haskell.org/ + +Perhaps Zippy could learn from Haskell, as it provides functional and procedural elements, making it +a well rounded language +.NH 4 +Hare +.PP +Hare was designed to be a 100 year language, and thus stability is its main goal, it is not set to +have a syntax change any time soon, and it has strong emphasis on memory safety. It fits into the +same part of the tech stack as C, and thus it can be used for some very low level work. + +https://harelang.org/ + +I think Zippy should have a strong emphasis on stability, to many times have i segfaulted do to a +tiny mistake. Zippy should also look to Hare small size, you can buy a copy of Hare on a +.B "SINGLE 3 1/2'' FLOPPY" + +.NH 3 +What should be taken away from these languages? +.PP +I was already leaning towards functional programming when I started this project however now I +believe it's the only option for producing safe applications. Zippy will be a functional language +with a strong emphasis on recursion. + +I also believe that I should take size of the interpreter into account, as this is important for +keeping the project manageable and consistent. + +And finally I think that syntax should be inspired by Lisp, although Lisp itself can be a messy +language, with the right changes I am confident that I can make a attractive language for the 21st +century. + +.NH 2 +Clients +.PP +In a project of this nature, the Client is every programmer alive; which is a pretty large scope. +To narrow this down as much as possible, I will interview a small handful of people throughout the +project, of different skill levels. + +.NH 3 +Client 1, Amy C +.PP +My first client is a friend of mine, Amy C, she is a confident programmer who has completed many +complicated projects. I am choosing her as a client as she can give me technical feed back on my +project and its function/utility. +.NH 3 +Client 2, a technical user, but not a programmer +.PP +some stuff about this person. +.NH 3 +Client 3, a normie +.PP +some stuff about how the normie finds the completed project. +.NH 3 +Client 4, myself +.PP +I've wanted to take out a project like this for a long long time, and this is the perfect +opportunity to do so, I will be assessing myself along the way of this, building the project to my +personal specification. + + .NH 2 Questionnaires .PP @@ -119,7 +209,7 @@ In the section bellow you will find questionnaires from the analyses stage of my Questionnaire 1 for Amy C .BI "[30th April 2024]" -.BI "answered by amy, see pull request she left" +.BI "answered by Amy, see pull request she left" .NH 4 What do you find the most important in a language? (eg: speed, readability) .PP @@ -183,7 +273,8 @@ bundler should be a priority, perhaps they could be written in Zippy after the i .NH 3 The first elements of the project .PP -At this stage I can say that I'm confident in my project and its scope. I have a goal in mind for it. +At this stage I can say that I'm confident in my project and its scope. I have a goal in mind for +it. .B "The key things to take away from this section are:" @@ -298,6 +389,8 @@ into an abstract syntax tree, and finally it executes it. This is just a simple it is small in scope. It can only do simple operators (+-*/) and requires litteral values to be surrounded by [] so it knows its not another expression to evaluate. +https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/code/proto/ast + typedef struct ast_node ast_node; @@ -342,6 +435,8 @@ Then I can execute that node and work my way up the tree. The execution code can be seen here. +https://github.com/standenboy/school/tree/master/comp/lucas-standen-NEA/code/proto/ast + int exec(ast_node *exp){ diff --git a/comp/lucas-standen-NEA/writeup/coverpage.ps b/comp/lucas-standen-NEA/writeup/coverpage.ps index f328a24..6cf0175 100644 --- a/comp/lucas-standen-NEA/writeup/coverpage.ps +++ b/comp/lucas-standen-NEA/writeup/coverpage.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.23.0 -%%CreationDate: Mon May 6 10:51:43 2024 +%%CreationDate: Mon May 6 12:02:29 2024 %%DocumentNeededResources: font Times-Bold %%+ font Times-Italic %%+ font Times-Roman @@ -8,7 +8,7 @@ %%DocumentSuppliedResources: file ast.ps %%+ procset grops 1.23 0 %%LanguageLevel: 2 -%%Pages: 8 +%%Pages: 9 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait @@ -274,329 +274,447 @@ BP /F0 12/Times-Bold@0 SF(NEA co)264.462 123 Q -.12(ve)-.12 G 3(rp).12 G (age)-3 E/F1 10/Times-Italic@0 SF(Lucas standen)277.25 159 Q/F2 10 /Times-Roman@0 SF(7949)296 177 Q F1(ABSTRA)282.535 213 Q(CT)-.3 E/F3 10 -/Times-Bold@0 SF 2.5(1. Analysis)111 237 R 2.5(1.1. The)111 261 R(curr) -2.5 E(ent pr)-.18 E(oblem)-.18 E F2 -.15(Fo)136 276.6 S 2.948(rg).15 G -.448(eneral small and simple projects, I write in C. Ho)-2.948 F(we)-.25 -E -.15(ve)-.25 G 2.947(rt).15 G .447(his leads to hours of deb)-2.947 F -(ug-)-.2 E .26(ging due to se)111 288.6 R(gf)-.15 E .26(aults, and memo\ -ry leaks. Due to the languages manual memory management the)-.1 F .362 -(programmer is required to kno)111 300.6 R 2.862(ws)-.25 G 2.861(om) --2.862 G .361(uch information about the hardw)-2.861 F .361(are the)-.1 -F 2.861(yw)-.15 G .361(rite for)-2.861 F 2.861(,a)-.4 G .361(nd the) --2.861 F(second an)111 312.6 Q(ything goes wrong, it is v)-.15 E +/Times-Bold@0 SF 2.5(1. Reading)111 237 R(this document)2.5 E F2 +(This document is writen in rof)136 252.6 Q 2.5(fa)-.25 G +(nd can be found online at)-2.5 E(https://github)111 276.6 Q +(.com/standenbo)-.4 E +(y/school/tree/master/comp/lucas-standen-NEA/writeup)-.1 E .714 +(It is using the ms macro of trof)111 300.6 R .714 +(f. It can be compiled using the Mak)-.25 F .713(e\214le, or mak)-.1 F +.713(e.sh. A table of)-.1 F .454(contents has been generated using pdft\ +ocgen, it is embedded into the pdf, most pdf readers ha)111 312.6 R -.15 +(ve)-.2 G 2.5(ab)111 324.6 S(utton to open it \(\214refox has it in the\ + top left, in zathura press tab to vie)-2.7 E 2.5(wi)-.25 G(t\).)-2.5 E +2.676(An)111 348.6 S .176(ote on formating of the rof)-2.676 F .176 +(f, the te)-.25 F .175 +(xt is limited to 100 characters per line and is writen in plan)-.15 F +.337(ascii, no utf8 emojis and the lik)111 360.6 R .337 +(e. code snippets are left in plain te)-.1 F .338 +(xt, and the full section of code)-.15 F(the)111 372.6 Q 2.89(ya)-.15 G +.39(re from should be link)-2.89 F .39(ed abo)-.1 F .69 -.15(ve t)-.15 H +.39(hem; assuming the).15 F 2.89(ya)-.15 G .39 +(re from a \214le and not a small e)-2.89 F(xam-)-.15 E .181(ple. An)111 +384.6 R 2.681(yc)-.15 G .182(omments on code snippets will be remo) +-2.681 F -.15(ve)-.15 G 2.682(df).15 G .182(or the sak)-2.682 F 2.682 +(eo)-.1 G 2.682(fr)-2.682 G .182(eadability in the rof)-2.682 F 2.682 +(fd)-.25 G(ocu-)-2.682 E(ment, ho)111 396.6 Q(we)-.25 E -.15(ve)-.25 G +2.5(rt).15 G(he can still be found in the ra)-2.5 E 2.5<778c>-.15 G +(les.)-2.5 E F3 2.5(2. Analysis)111 432.6 R 2.5(2.1. The)111 456.6 R +(curr)2.5 E(ent pr)-.18 E(oblem)-.18 E F2 -.15(Fo)136 472.2 S 2.948(rg) +.15 G .448(eneral small and simple projects, I write in C. Ho)-2.948 F +(we)-.25 E -.15(ve)-.25 G 2.947(rt).15 G .447(his leads to hours of deb) +-2.947 F(ug-)-.2 E .26(ging due to se)111 484.2 R(gf)-.15 E .26(aults, \ +and memory leaks. Due to the languages manual memory management the)-.1 +F .362(programmer is required to kno)111 496.2 R 2.862(ws)-.25 G 2.861 +(om)-2.862 G .361(uch information about the hardw)-2.861 F .361(are the) +-.1 F 2.861(yw)-.15 G .361(rite for)-2.861 F 2.861(,a)-.4 G .361(nd the) +-2.861 F(second an)111 508.2 Q(ything goes wrong, it is v)-.15 E (ague on ho)-.25 E 2.5(wt)-.25 G 2.5<6f8c>-2.5 G 2.5(xt)-2.5 G(hings.) --2.5 E F3 2.5(In)111 336.6 S(eed a language that stops me fr)-2.5 E -(om shooting myself in the f)-.18 E(oot)-.25 E F2 2.584(Ch)111 360.6 S +-2.5 E F3 2.5(In)111 532.2 S(eed a language that stops me fr)-2.5 E +(om shooting myself in the f)-.18 E(oot)-.25 E F2 2.584(Ch)111 556.2 S .084(as been standard for man)-2.584 F 2.584(yd)-.15 G .084(ecades no) -2.584 F 2.584(wa)-.25 G .084(nd its age is sho)-2.584 F .084 (wing, it lacks man)-.25 F 2.585(ym)-.15 G .085(odern features)-2.585 F -(lik)111 372.6 Q 2.605(eO)-.1 G(OP)-2.605 E 2.605(,o)-1.11 G 2.605(rh) +(lik)111 568.2 Q 2.605(eO)-.1 G(OP)-2.605 E 2.605(,o)-1.11 G 2.605(rh) -2.605 G .105(igher le)-2.605 F -.15(ve)-.25 G 2.605(lf).15 G .105 (unctional abstractions, that ha)-2.605 F .405 -.15(ve b)-.2 H .105 (ecome common in modern years due).15 F 1.303 -(to there helpfulness. This is not to f)111 384.6 R 1.303(ault C')-.1 F +(to there helpfulness. This is not to f)111 580.2 R 1.303(ault C')-.1 F 3.803(sa)-.55 G(chie)-3.803 E -.15(ve)-.25 G 1.303(ments either).15 F 3.804(,t)-.4 G 1.304(he language is my personal)-3.804 F .66 -(choice for most projects for a reason, it')111 396.6 R 3.159(sf)-.55 G +(choice for most projects for a reason, it')111 592.2 R 3.159(sf)-.55 G .659(ast and po)-3.259 F .659(werful; an)-.25 F 3.159(ys)-.15 G .659 (olution I mak)-3.159 F 3.159(es)-.1 G .659(hould not cut)-3.159 F -(that a)111 408.6 Q -.1(wa)-.15 G -.65(y.).1 G F3 2.5(1.2. A)111 444.6 R -(solution)2.5 E/F4 10/Times-BoldItalic@0 SF(Zippy LANG)136.61 460.2 Q F2 -3.378(An)111 484.2 S -.15(ex)-3.378 G 3.378(tg).15 G .878 +(that a)111 604.2 Q -.1(wa)-.15 G -.65(y.).1 G F3 2.5(2.2. A)111 640.2 R +(solution)2.5 E/F4 10/Times-BoldItalic@0 SF(Zippy LANG)136.61 655.8 Q F2 +3.378(An)111 679.8 S -.15(ex)-3.378 G 3.378(tg).15 G .878 (eneration language, for general use. Designed for k)-3.378 F .879 -(eeping code simple, neat and read-)-.1 F 3.307(able. It)111 496.2 R +(eeping code simple, neat and read-)-.1 F 3.307(able. It)111 691.8 R .807(will be similar to functional languages, kno)3.307 F .807 (wn for there strict ability to k)-.25 F .806(eep code safe)-.1 F .223 -(and practical. The language should be interpreted lik)111 508.2 R 2.724 +(and practical. The language should be interpreted lik)111 703.8 R 2.724 (ep)-.1 G .224(ython, perl and lisp, to allo)-2.824 F 2.724(wf)-.25 G -.224(or easy de-)-2.724 F -.2(bu)111 520.2 S(gging tools.).2 E -(The goal of Zipp)111 544.2 Q 2.5(yi)-.1 G 2.5(st)-2.5 G 2.5(om)-2.5 G -(ak)-2.5 E 2.5(ec)-.1 G(odding easier)-2.5 E 2.5(,w)-.4 G -(hile remaining f)-2.5 E(ast, with a interpreter writen in C.)-.1 E F3 -2.5(1.3. Clients)111 580.2 R F2 1.194 -(In a project of this nature, the Client is e)136 595.8 R -.15(ve)-.25 G -1.194(ry programmer ali).15 F -.15(ve)-.25 G 3.694(;w).15 G 1.193 -(hich is a pretty lar)-3.694 F(ge)-.18 E 4.075(scope. T)111 607.8 R -4.075(on)-.8 G(arro)-4.075 E 4.075(wt)-.25 G 1.575(his do)-4.075 F 1.576 -(wn as much as possible, I will intervie)-.25 F 4.076(was)-.25 G 1.576 -(mall handful of people)-4.076 F(throughout the project, of dif)111 -619.8 Q(ferent skill le)-.25 E -.15(ve)-.25 G(ls.).15 E F3 2.5 -(1.3.1. Client)111 655.8 R(1, Amy C)2.5 E F2 .803(My \214rst client is \ -a friend of mine, Amy C, she is a con\214dent programmer who has com-) -136 671.4 R .037(pleted man)111 683.4 R 2.537(yc)-.15 G .038 -(omplicated projects. I am choosing her as a client as she can gi)-2.537 -F .338 -.15(ve m)-.25 H 2.538(et).15 G .038(echnical feed)-2.538 F -(back on my project and its function/utility)111 695.4 Q(.)-.65 E F3 2.5 -(1.3.2. Client)111 719.4 R(2, a technical user)2.5 E 2.5(,b)-.92 G -(ut not a pr)-2.7 E(ogrammer)-.18 E 0 Cg EP +.224(or easy de-)-2.724 F -.2(bu)111 715.8 S(gging tools.).2 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-2-)300.17 48 Q(some stuf)136 84 Q 2.5(fa)-.25 G -(bout this person.)-2.5 E/F1 10/Times-Bold@0 SF 2.5(1.3.3. Client)111 -108 R(3, a normie)2.5 E F0(some stuf)136 123.6 Q 2.5(fa)-.25 G(bout ho) --2.5 E 2.5(wt)-.25 G(he normie \214nds the completed project.)-2.5 E F1 -2.5(1.3.4. Client)111 147.6 R(4, myself)2.5 E F0(I')136 163.2 Q .335 --.15(ve w)-.5 H .035(anted to tak).05 F 2.535(eo)-.1 G .034 -(ut a project lik)-2.535 F 2.534(et)-.1 G .034 -(his for a long long time, and this is the perfect oppor)-2.534 F(-)-.2 -E .597(tunity to do so, I will be assessing myself along the w)111 175.2 -R .598(ay of this, b)-.1 F .598(uilding the project to my per)-.2 F(-) --.2 E(sonal speci\214cation.)111 187.2 Q F1 2.5(1.4. Examples)111 223.2 -R(of similar pr)2.5 E(ojects)-.18 E F0 .676(As Zipp)136 238.8 R 3.176 -(yw)-.1 G .676(ill be interpreted, I should compare it to other such la\ -nguages; trying to com-)-3.176 F(pare it to C++/rust/go, isn')111 250.8 -Q 2.5(th)-.18 G(elpful as the)-2.5 E 2.5(ya)-.15 G(re so v)-2.5 E -(ery dif)-.15 E(ferent in the w)-.25 E(ay the)-.1 E 2.5(yf)-.15 G -(unction.)-2.5 E(Zipp)111 274.8 Q 2.724(yi)-.1 G 2.724(sb)-2.724 G 2.724 -(yf)-2.724 G .224 -(ar not the \214rst language, and I'm only one person, so I can')-2.824 -F 2.724(te)-.18 G .224(xpect to beat others in)-2.874 F -2.15 -.25(ev e) -111 286.8 T(rything.).25 E(Belo)111 310.8 Q 2.5(wa)-.25 G(re a fe)-2.5 E -2.5(wl)-.25 G(anguages that zipp)-2.5 E 2.5(ys)-.1 G -(hould be compared to throught de)-2.5 E -.15(ve)-.25 G(lopemen:).15 E -F1 2.5(1.4.1. Python)111 334.8 R F0 .273(Python is a high le)136 350.4 R --.15(ve)-.25 G 2.773(lO).15 G .272(OP language that w)-2.773 F .272 -(as designed in 1991. It w)-.1 F .272(as made to mak)-.1 F 2.772(ep)-.1 -G(ro-)-2.772 E .262 -(gramming easy while still being able to use some of C')111 362.4 R +/F0 10/Times-Roman@0 SF(-2-)300.17 48 Q(The goal of Zipp)111 84 Q 2.5 +(yi)-.1 G 2.5(st)-2.5 G 2.5(om)-2.5 G(ak)-2.5 E 2.5(ec)-.1 G +(odding easier)-2.5 E 2.5(,w)-.4 G(hile remaining f)-2.5 E +(ast, with a interpreter writen in C.)-.1 E/F1 10/Times-Bold@0 SF 2.5 +(2.3. What)111 120 R(is a pr)2.5 E(ogramming language)-.18 E 2.5 +(2.3.1. A)111 144 R -.1(ve)2.5 G(ry simple explanation).1 E F0 .07 +(At its lo)136 159.6 R .07 +(west de\214nition a PL is a set of speci\214c w)-.25 F .07 +(ords, that when gi)-.1 F -.15(ve)-.25 G 2.57(nt).15 G 2.57(oac)-2.57 G +.07(omputer in the)-2.57 F .656(right order ha)111 171.6 R .957 -.15 +(ve a r)-.2 H .657(eproducible beha).15 F(viour)-.2 E 3.157(.Am)-.55 G +.657(ore human w)-3.157 F .657(ay of saying that, w)-.1 F .657 +(ould be its ho)-.1 F(w)-.25 E(we control computers.)111 183.6 Q F1 2.5 +(2.3.2. Wh)111 207.6 R 2.5(ya)-.15 G .36 -.18(re t)-2.5 H(her).18 E 2.5 +(es)-.18 G 2.5(om)-2.5 G(any)-2.5 E F0 .468 +(When someone is looking at code it can often be seen as just that, ho) +136 223.2 R(we)-.25 E -.15(ve)-.25 G 2.967(rt).15 G .467(here are hun-) +-2.967 F .41(dreds of languages that all tak)111 235.2 R 2.91(et)-.1 G +.411(he idea of "code" in v)-2.91 F .411(ery dif)-.15 F .411(ferent w) +-.25 F .411(ays. Some are designed for)-.1 F .913(speci\214c hardw)111 +247.2 R .912(are, some are designed for making general use programs whi\ +le others are highly)-.1 F 2.655(specialized. It)111 259.2 R .156 +(is important to see "code", as more than just one o)2.655 F -.15(ve) +-.15 G .156(rarching term and instead see).15 F +(where the code is being used, and e)111 271.2 Q -.25(va)-.25 G +(luate it from that.).25 E F1 2.5(2.4. Resear)111 319.2 R +(ching, and getting a scope of the pr)-.18 E(oject)-.18 E F0 1.008 +(Before I start to design a language i should \214rst \214nd e)136 334.8 +R 1.007(xamples of others and \214nd what i)-.15 F -.1(wa)111 346.8 S +(nt my language to be lik).1 E(e.)-.1 E(I')111 370.8 Q 3.658(dl)-.5 G +(ik)-3.658 E 3.658(em)-.1 G 3.658(yl)-3.658 G 1.158 +(anguage to feel modern so i should tak)-3.658 F 3.658(ei)-.1 G 1.158 +(nspiration from what other modern lan-)-3.658 F .068(guages do, ho)111 +382.8 R(we)-.25 E -.15(ve)-.25 G 2.568(ro).15 G 2.568(nt)-2.568 G .068 +(he back)-2.568 F .068(ed i w)-.1 F .068 +(ant my language to be stable and f)-.1 F .068 +(ast, for that i should look)-.1 F(at older projects.)111 394.8 Q F1 2.5 +(2.4.1. Examples)111 430.8 R(of older similar pr)2.5 E(ojects, that ar) +-.18 E 2.5(eag)-.18 G(ood base f)-2.5 E(or my language)-.25 E 2.5 +(2.4.1.1. Python)111 454.8 R F0 .272(Python is a high le)136 470.4 R +-.15(ve)-.25 G 2.772(lO).15 G .272(OP language that w)-2.772 F .272 +(as designed in 1991. It w)-.1 F .273(as made to mak)-.1 F 2.773(ep)-.1 +G(ro-)-2.773 E .262 +(gramming easy while still being able to use some of C')111 482.4 R 2.762(sf)-.55 G .262(unctions. Although it has become stan-)-2.762 F -(dard for man)111 374.4 Q 2.5(yu)-.15 G(se cases, it is slo)-2.5 E 2.5 +(dard for man)111 494.4 Q 2.5(yu)-.15 G(se cases, it is slo)-2.5 E 2.5 (wa)-.25 G(nd inef)-2.5 E(\214cient, and v)-.25 E(ery bloated.)-.15 E -(https://www)111 398.4 Q(.p)-.65 E(ython.or)-.1 E(g/)-.18 E(Zipp)111 -422.4 Q 3.951(ys)-.1 G 1.451(hould tak)-3.951 F 3.951(ep)-.1 G 1.451 -(ythons high le)-4.051 F -.15(ve)-.25 G 3.951(la).15 G 1.451 -(bstractions, as the)-3.951 F 3.951(ym)-.15 G(ak)-3.951 E 3.951(ep)-.1 G -1.45(rograming v)-3.951 F 1.45(ery easy and it)-.15 F -(should try and tak)111 434.4 Q 2.5(en)-.1 G -(otes from its libaries as the)-2.5 E 2.5(ya)-.15 G -(re mostly well writen, and well documented.)-2.5 E F1 2.5(1.4.2. Lisp) -111 458.4 R F0 .549(Lisp is the second e)136 474 R -.15(ve)-.25 G 3.049 -(rp).15 G .549(rogramming language, de)-3.049 F -.15(ve)-.25 G .549 -(loped at MiT).15 F 3.049(,i)-.74 G 3.05(ti)-3.049 G 3.05(st)-3.05 G .55 -(he \214rst functional)-3.05 F 1.45(language, creating man)111 486 R -3.95(yc)-.15 G 1.45(ommon features lik)-3.95 F 3.95(eh)-.1 G 1.45 -(igher order functions, recursion, and g)-3.95 F(arbage)-.05 E 1.68 -(collection. It is generally not used an)111 498 R 1.681 -(ymore as it feels old compared to other functional lan-)-.15 F -(guages, lik)111 510 Q 2.5(eo)-.1 G(caml or hask)-2.5 E(ell.)-.1 E -(https://lisp-lang.or)111 534 Q(g/)-.18 E(Zipp)111 558 Q 3.393(ys)-.1 G -.893(hould try to tak)-3.393 F 3.393(ea)-.1 G .893 -(lot from the syntax of lisp, \(\) mak)-3.393 F 3.392(ei)-.1 G 3.392(te) --3.392 G .892(asy to see what parts of code)-3.392 F(will ef)111 570 Q +(https://www)111 518.4 Q(.p)-.65 E(ython.or)-.1 E(g/)-.18 E(Zipp)111 +542.4 Q 3.395(ys)-.1 G .895(hould tak)-3.395 F 3.395(ep)-.1 G .895 +(ythons high le)-3.495 F -.15(ve)-.25 G 3.395(la).15 G .895 +(bstractions, as the)-3.395 F 3.395(ym)-.15 G(ak)-3.395 E 3.395(ep)-.1 G +.895(rogramming v)-3.395 F .895(ery easy and it)-.15 F +(should try and tak)111 554.4 Q 2.5(en)-.1 G +(otes from its libraries as the)-2.5 E 2.5(ya)-.15 G +(re mostly well written, and well documented.)-2.5 E F1 2.5 +(2.4.1.2. Lisp)111 578.4 R F0 .55(Lisp is the second e)136 594 R -.15 +(ve)-.25 G 3.049(rp).15 G .549(rogramming language, de)-3.049 F -.15(ve) +-.25 G .549(loped at MiT).15 F 3.049(,i)-.74 G 3.049(ti)-3.049 G 3.049 +(st)-3.049 G .549(he \214rst functional)-3.049 F 1.45 +(language, creating man)111 606 R 3.95(yc)-.15 G 1.45 +(ommon features lik)-3.95 F 3.95(eh)-.1 G 1.45 +(igher order functions, recursion, and g)-3.95 F(arbage)-.05 E 1.42 +(collection. It is generally not used an)111 618 R 3.919(ym)-.15 G 1.419 +(ore as it feels old compared to other functional lan-)-3.919 F +(guages, lik)111 630 Q 2.5(eO)-.1 G(caml or Hask)-2.5 E(ell.)-.1 E +(https://lisp-lang.or)111 654 Q(g/)-.18 E(Zipp)111 678 Q 3.392(ys)-.1 G +.892(hould try to tak)-3.392 F 3.392(ea)-.1 G .892 +(lot from the syntax of lisp, \(\) mak)-3.392 F 3.393(ei)-.1 G 3.393(te) +-3.393 G .893(asy to see what parts of code)-3.393 F(will ef)111 690 Q (fect what, and mak)-.25 E 2.5(et)-.1 G(hings easy to parse.)-2.5 E F1 -2.5(1.4.3. P)111 594 R(erl)-.2 E F0 .038(Perl is scripting language des\ -igned for use in linux, when bash is too slo)136 609.6 R 1.339 -.65 -(w, o)-.25 H 2.539(rn).65 G .039(ot suited for)-2.539 F .934(the job)111 -621.6 R 3.434(.P)-.4 G .934 -(erl is often described as the glue of the uni)-3.434 F -.15(ve)-.25 G -.933(rse \(see xkcd https://3d.xkcd.com/224/\).).15 F -(Its syntax is quite strange ho)111 633.6 Q(we)-.25 E -.15(ve)-.25 G 2.5 +2.5(2.4.1.3. P)111 714 R(erl)-.2 E F0 .038(Perl is scripting language d\ +esigned for use in linux, when bash is too slo)136 729.6 R 1.338 -.65 +(w, o)-.25 H 2.538(rn).65 G .038(ot suited for)-2.538 F 0 Cg EP +%%Page: 3 3 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-3-)300.17 48 Q .933(the job)111 84 R 3.433(.P) +-.4 G .934(erl is often described as the glue of the uni)-3.433 F -.15 +(ve)-.25 G .934(rse \(see xkcd https://3d.xkcd.com/224/\).).15 F +(Its syntax is quite strange ho)111 96 Q(we)-.25 E -.15(ve)-.25 G 2.5 (ra).15 G(nd it is slo)-2.5 E 1.3 -.65(w. M)-.25 H (aking it poorly suited to).65 E -.1(wa)-.25 G(rds general use.).1 E -(https://www)111 657.6 Q(.perl.or)-.65 E(g/)-.18 E(Zipp)111 681.6 Q -2.805(ys)-.1 G .305(hould tak)-2.805 F 2.805(ef)-.1 G .305(rom perls mi\ -nimalisum, it is a small language that is of a similar size to bash) --2.805 F .407(or zsh, while feeling closer to p)111 693.6 R .406 -(ython. If zipp)-.1 F 2.906(yc)-.1 G .406(an achie)-2.906 F .706 -.15 -(ve a s)-.25 H .406(imilar small size, while remaining).15 F(po)111 -705.6 Q(werful I will be happ)-.25 E -.65(y.)-.1 G 0 Cg EP -%%Page: 3 3 +(https://www)111 120 Q(.perl.or)-.65 E(g/)-.18 E(Zipp)111 144 Q 3.083 +(ys)-.1 G .583(hould tak)-3.083 F 3.083(ef)-.1 G .583(rom perls minimal\ +ism, it is a small language that is of a similar size to bash)-3.083 F +.406(or zsh, while feeling closer to p)111 156 R .406(ython. If zipp)-.1 +F 2.906(yc)-.1 G .406(an achie)-2.906 F .706 -.15(ve a s)-.25 H .407 +(imilar small size, while remaining).15 F(po)111 168 Q +(werful I will be happ)-.25 E -.65(y.)-.1 G/F1 10/Times-Bold@0 SF 2.5 +(2.4.2. Examples)111 204 R(of new similar pr)2.5 E(ojects that ar)-.18 E +2.5(ea)-.18 G(lso a good base)-2.5 E 2.5(2.4.2.1. Gleam)111 228 R F0 +.663(Gleam is a modern language releasing in the past 5 years. It is hi\ +ghly functional, with no)136 243.6 R .228(mutable data, no traditional \ +loops. Instead recursion can be used to replace alot of these features.) +111 255.6 R .947(Gleam compiles to erlang/Beam bytecode, much lik)111 +267.6 R 3.447(ej)-.1 G -.2(av)-3.447 G 3.447(at)-.05 G 3.447(ot)-3.447 G +.946(he jvm, and doing this has made)-3.447 F(Gleam a highly scalable l\ +anguage with good library support out the box.)111 279.6 Q +(https://gleam.run/)111 303.6 Q(Zipp)111 327.6 Q 2.89(ys)-.1 G .39 +(hould tak)-2.89 F 2.89(ef)-.1 G .391 +(rom the functional elements of Gleam, as the)-2.89 F 2.891(yk)-.15 G +.391(eep programs safer)-2.991 F 2.891(,h)-.4 G -.25(ow)-2.891 G -2.15 +-.25(ev e).25 H(r).25 E(Zipp)111 339.6 Q 2.5(ys)-.1 G(hould not remo) +-2.5 E .3 -.15(ve a)-.15 H(ll procedural elements, as for loops are v) +.15 E(ery helpful)-.15 E F1 2.5(2.4.2.2. Hask)111 363.6 R(ell)-.1 E F0 +(Hask)136 379.2 Q 1.186(ell is another modern functional language kno) +-.1 F 1.185(wn for being v)-.25 F 1.185(ery complicated, ho)-.15 F(w-) +-.25 E -2.15 -.25(ev e)111 391.2 T 2.5(ri).25 G(ncredibly po)-2.5 E +(werful. Its syntax feels v)-.25 E +(ery mathematical, and incredibly terse.)-.15 E(https://www)111 415.2 Q +(.hask)-.65 E(ell.or)-.1 E(g/)-.18 E .224(Perhaps Zipp)111 439.2 R 2.724 +(yc)-.1 G .224(ould learn from Hask)-2.724 F .225(ell, as it pro)-.1 F +.225(vides functional and procedural elements, mak-)-.15 F +(ing it a well rounded language)111 451.2 Q F1 2.5(2.4.2.3. Har)111 +475.2 R(e)-.18 E F0 .718(Hare w)136 490.8 R .717(as designed to be a 10\ +0 year language, and thus stability is its main goal, it is not)-.1 F +.683(set to ha)111 502.8 R .983 -.15(ve a s)-.2 H .683(yntax change an) +.15 F 3.183(yt)-.15 G .683 +(ime soon, and it has strong emphasis on memory safety)-3.183 F 3.184 +(.I)-.65 G 3.184<748c>-3.184 G(ts)-3.184 E(into the same part of the te\ +ch stack as C, and thus it can be used for some v)111 514.8 Q(ery lo) +-.15 E 2.5(wl)-.25 G -2.15 -.25(ev e)-2.5 H 2.5(lw).25 G(ork.)-2.6 E +(https://harelang.or)111 538.8 Q(g/)-.18 E 2.805(It)111 562.8 S .305 +(hink Zipp)-2.805 F 2.805(ys)-.1 G .305(hould ha)-2.805 F .605 -.15 +(ve a s)-.2 H .305(trong emphasis on stability).15 F 2.804(,t)-.65 G +2.804(om)-2.804 G(an)-2.804 E 2.804(yt)-.15 G .304(imes ha)-2.804 F .604 +-.15(ve i s)-.2 H -.15(eg).15 G -.1(fa).15 G .304(ulted do to a).1 F +(tin)111 574.8 Q 3.165(ym)-.15 G(istak)-3.165 E .665(e. Zipp)-.1 F 3.165 +(ys)-.1 G .665(hould also look to Hare small size, you can b)-3.165 F +.665(uy a cop)-.2 F 3.166(yo)-.1 G 3.166(fH)-3.166 G .666(are on a) +-3.166 F F1(SIN-)3.166 E(GLE 3 1/2')111 586.8 Q 2.5('F)-.63 G(LOPPY)-2.5 +E 2.5(2.4.3. What)111 622.8 R(should be tak)2.5 E(en away fr)-.1 E +(om these languages?)-.18 E F0 2.784(Iw)136 638.4 S .284 +(as already leaning to)-2.884 F -.1(wa)-.25 G .283 +(rds functional programming when I started this project ho).1 F(we)-.25 +E -.15(ve)-.25 G(r).15 E(no)111 650.4 Q 2.81(wIb)-.25 G(elie)-2.81 E .61 +-.15(ve i)-.25 H(t').15 E 2.81(st)-.55 G .31 +(he only option for producing safe applications. Zipp)-2.81 F 2.81(yw) +-.1 G .31(ill be a functional lan-)-2.81 F +(guage with a strong emphasis on recursion.)111 662.4 Q 2.862(Ia)111 +686.4 S .362(lso belie)-2.862 F .661 -.15(ve t)-.25 H .361 +(hat I should tak).15 F 2.861(es)-.1 G .361 +(ize of the interpreter into account, as this is important for k)-2.861 +F(eep-)-.1 E(ing the project manageable and consistent.)111 698.4 Q .916 +(And \214nally I think that syntax should be inspired by Lisp, although\ + Lisp itself can be a messy)111 722.4 R 0 Cg EP +%%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-3-)300.17 48 Q/F1 10/Times-Bold@0 SF 2.5 -(1.5. Questionnair)111 84 R(es)-.18 E F0 2.133 -(It is important to get feedback from end users, so I will tak)136 99.6 +/F0 10/Times-Roman@0 SF(-4-)300.17 48 Q .198 +(language, with the right changes I am con\214dent that I can mak)111 84 +R 2.697(eaa)-.1 G(ttracti)-2.697 E .497 -.15(ve l)-.25 H .197 +(anguage for the 21st).15 F(century)111 96 Q(.)-.65 E/F1 10/Times-Bold@0 +SF 2.5(2.5. Clients)111 132 R F0 1.194 +(In a project of this nature, the Client is e)136 147.6 R -.15(ve)-.25 G +1.194(ry programmer ali).15 F -.15(ve)-.25 G 3.694(;w).15 G 1.194 +(hich is a pretty lar)-3.694 F(ge)-.18 E 4.076(scope. T)111 159.6 R +4.076(on)-.8 G(arro)-4.076 E 4.076(wt)-.25 G 1.576(his do)-4.076 F 1.576 +(wn as much as possible, I will intervie)-.25 F 4.075(was)-.25 G 1.575 +(mall handful of people)-4.075 F(throughout the project, of dif)111 +171.6 Q(ferent skill le)-.25 E -.15(ve)-.25 G(ls.).15 E F1 2.5 +(2.5.1. Client)111 207.6 R(1, Amy C)2.5 E F0 .803(My \214rst client is \ +a friend of mine, Amy C, she is a con\214dent programmer who has com-) +136 223.2 R .038(pleted man)111 235.2 R 2.538(yc)-.15 G .038 +(omplicated projects. I am choosing her as a client as she can gi)-2.538 +F .337 -.15(ve m)-.25 H 2.537(et).15 G .037(echnical feed)-2.537 F +(back on my project and its function/utility)111 247.2 Q(.)-.65 E F1 2.5 +(2.5.2. Client)111 271.2 R(2, a technical user)2.5 E 2.5(,b)-.92 G +(ut not a pr)-2.7 E(ogrammer)-.18 E F0(some stuf)136 286.8 Q 2.5(fa)-.25 +G(bout this person.)-2.5 E F1 2.5(2.5.3. Client)111 310.8 R(3, a normie) +2.5 E F0(some stuf)136 326.4 Q 2.5(fa)-.25 G(bout ho)-2.5 E 2.5(wt)-.25 +G(he normie \214nds the completed project.)-2.5 E F1 2.5(2.5.4. Client) +111 350.4 R(4, myself)2.5 E F0(I')136 366 Q .334 -.15(ve w)-.5 H .034 +(anted to tak).05 F 2.534(eo)-.1 G .034(ut a project lik)-2.534 F 2.534 +(et)-.1 G .034(his for a long long time, and this is the perfect oppor) +-2.534 F(-)-.2 E .598 +(tunity to do so, I will be assessing myself along the w)111 378 R .597 +(ay of this, b)-.1 F .597(uilding the project to my per)-.2 F(-)-.2 E +(sonal speci\214cation.)111 390 Q F1 2.5(2.6. Questionnair)111 438 R(es) +-.18 E F0 2.133 +(It is important to get feedback from end users, so I will tak)136 453.6 R 4.633(em)-.1 G 2.133(ultiple questionnaires)-4.633 F .852(throughout \ the project. I will then use them to slightly edit the requirements of \ -my project this)111 111.6 R(should mak)111 123.6 Q 2.5(et)-.1 G +my project this)111 465.6 R(should mak)111 477.6 Q 2.5(et)-.1 G (he \214nal outcome more helpful and what people w)-2.5 E(ant.)-.1 E -(In the section bello)111 147.6 Q 2.5(wy)-.25 G +(In the section bello)111 501.6 Q 2.5(wy)-.25 G (ou will \214nd questionnaires from the analyses stage of my project.) --2.5 E F1 2.5(1.5.1. Questionnair)111 171.6 R 2.5(e1f)-.18 G(or Amy C) --2.75 E/F2 10/Times-BoldItalic@0 SF([30th April 2024])111.87 195.6 Q -(answ)3.81 E(ered by amy)-.1 E 2.5(,s)-.37 G(ee pull request she left) --2.5 E F1 2.5(1.5.1.1. What)111 219.6 R(do y)2.5 E +-2.5 E F1 2.5(2.6.1. Questionnair)111 525.6 R 2.5(e1f)-.18 G(or Amy C) +-2.75 E/F2 10/Times-BoldItalic@0 SF([30th April 2024])111.87 549.6 Q +(answ)3.81 E(ered by Amy)-.1 E 2.5(,s)-.37 G(ee pull request she left) +-2.5 E F1 2.5(2.6.1.1. What)111 573.6 R(do y)2.5 E (ou \214nd the most important in a language? \(eg: speed, r)-.25 E -(eadability\))-.18 E F0(Speed, readability)136 235.2 Q 2.5(,d)-.65 G(eb) +(eadability\))-.18 E F0(Speed, readability)136 589.2 Q 2.5(,d)-.65 G(eb) -2.5 E(ugging ease and disk space ef)-.2 E(\214cienc)-.25 E -.65(y.)-.15 -G F1 3.167(1.5.1.2. What)111 259.2 R .667(tools ar)3.167 F 3.167(ei)-.18 +G F1 3.167(2.6.1.2. What)111 613.2 R .667(tools ar)3.167 F 3.167(ei)-.18 G .668(mportant f)-3.167 F .668(or a language to ha)-.25 F -.1(ve)-.25 G 3.168(?\().1 G .668(eg: pkg-manager)-3.168 F 3.168(,I)-.92 G .668 -(DE integra-)-3.168 F(tion\))111 271.2 Q F0 1.141(IDE inte)136 286.8 R +(DE integra-)-3.168 F(tion\))111 625.2 Q F0 1.141(IDE inte)136 640.8 R 1.141(gration \(things lik)-.15 F 3.641(et)-.1 G 1.141 (ab complete and deb)-3.641 F 1.141(ugging tools\), a package manager) -.2 F 3.64(,a)-.4 G(nd)-3.64 E (the ability to interact with the user through the command line easily) -111 298.8 Q(.)-.65 E F1 3.363(1.5.1.3. What)111 322.8 R(featur)3.363 E +111 652.8 Q(.)-.65 E F1 3.363(2.6.1.3. What)111 676.8 R(featur)3.363 E .863(es do y)-.18 F .863(ou lik)-.25 F 3.363(ef)-.1 G -.18(ro)-3.363 G 3.363(mo).18 G .863(ther languages \(eg: C')-3.363 F 3.363(sa)-.37 G(dv) --3.363 E .863(anced memory man-)-.1 F(agement, hask)111 334.8 Q(ell')-.1 +-3.363 E .863(anced memory man-)-.1 F(agement, hask)111 688.8 Q(ell')-.1 E 2.5(st)-.37 G(erse syntax\))-2.5 E F0 .26(The ability to pass the mem\ -ory reference of an object or function and a collection of b)136 350.4 R -(uilt-)-.2 E(in or standard functions lik)111 362.4 Q 2.5(e")-.1 G -(print", "split", or "sort".)-2.5 E F1 2.5(1.5.1.4. What)111 386.4 R -(do y)2.5 E(ou want to pr)-.25 E +ory reference of an object or function and a collection of b)136 704.4 R +(uilt-)-.2 E(in or standard functions lik)111 716.4 Q 2.5(e")-.1 G +(print", "split", or "sort".)-2.5 E 0 Cg EP +%%Page: 5 5 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-5-)300.17 48 Q/F1 10/Times-Bold@0 SF 2.5 +(2.6.1.4. What)111 84 R(do y)2.5 E(ou want to pr)-.25 E (ogram in this language \(eg: websites, lo)-.18 E 2.5(wl)-.1 G -2.3 -.15 (ev e)-2.5 H 2.5(ls).15 G(ystems\))-2.5 E F0 -(Lightweight command line tools and web back ends.)136 402 Q F1 2.5 -(1.5.1.5. Do)111 426 R -.25(yo)2.5 G 2.5(ui).25 G +(Lightweight command line tools and web back ends.)136 99.6 Q F1 2.5 +(2.6.1.5. Do)111 123.6 R -.25(yo)2.5 G 2.5(ui).25 G (ntend to use graphics in the pr)-2.5 E(ograms y)-.18 E(ou write?)-.25 E -F0(No.)136 441.6 Q F1 2.5(1.5.1.6. W)111 465.6 R(ould y)-.75 E(ou pr) +F0(No.)136 139.2 Q F1 2.5(2.6.1.6. W)111 163.2 R(ould y)-.75 E(ou pr) -.25 E(efer a language that f)-.18 E(ocuses on ease of use, or po)-.25 E -(wer of the code?)-.1 E F0 2.5(Il)136 481.2 S(ik)-2.5 E 2.5(eag)-.1 G -(ood balance between the tw)-2.5 E(o.)-.1 E F1 2.5(1.5.1.7. What)111 -505.2 R(wer)2.5 E 2.5(ey)-.18 G(our last 3 pr)-2.75 E +(wer of the code?)-.1 E F0 2.5(Il)136 178.8 S(ik)-2.5 E 2.5(eag)-.1 G +(ood balance between the tw)-2.5 E(o.)-.1 E F1 2.5(2.6.1.7. What)111 +202.8 R(wer)2.5 E 2.5(ey)-.18 G(our last 3 pr)-2.75 E (ojects? \(could they ha)-.18 E .2 -.1(ve b)-.25 H -(een written in Zippy?\)).1 E F0 2.938(Aw)136 520.8 S .438 +(een written in Zippy?\)).1 E F0 2.938(Aw)136 218.4 S .438 (ebsite, a small command-line tool and a midi k)-2.938 F -.15(ey)-.1 G -.439(board \(program runs on a Raspberry).15 F(Pi Pico\).)111 532.8 Q F1 -3.391(1.5.1.8. Ho)111 556.8 R 3.391(wm)-.1 G .891(any languages w)-3.391 +.439(board \(program runs on a Raspberry).15 F(Pi Pico\).)111 230.4 Q F1 +3.391(2.6.1.8. Ho)111 254.4 R 3.391(wm)-.1 G .891(any languages w)-3.391 F .891(ould y)-.1 F .891(ou use on a single pr)-.25 F .89 -(oject? \(could Zippy be used in)-.18 F -.25(yo)111 568.8 S -(ur codebase?\)).25 E F0 2.5(It)136 584.4 S +(oject? \(could Zippy be used in)-.18 F -.25(yo)111 266.4 S +(ur codebase?\)).25 E F0 2.5(It)136 282 S (ry to use as little languages in a project as possible, so lik)-2.5 E -(ely not in an e)-.1 E(xisting project.)-.15 E F1 2.5(1.5.1.9. Do)111 -608.4 R -.25(yo)2.5 G 2.5(uc).25 G(ar)-2.5 E 2.5(ef)-.18 G(or lo)-2.75 E +(ely not in an e)-.1 E(xisting project.)-.15 E F1 2.5(2.6.1.9. Do)111 +306 R -.25(yo)2.5 G 2.5(uc).25 G(ar)-2.5 E 2.5(ef)-.18 G(or lo)-2.75 E 2.5(wl)-.1 G -2.3 -.15(ev e)-2.5 H 2.5(lc).15 G(ontr)-2.5 E(ol, or w) -.18 E(ould y)-.1 E(ou pr)-.25 E(efer high le)-.18 E -.1(ve)-.15 G 2.5 -(la).1 G(bstractions?)-2.5 E F0 2.931(It)136 624 S .431(hink lo)-2.931 F -(w-le)-.25 E -.15(ve)-.25 G 2.931(lc).15 G .431(ontrol is v)-2.931 F +(la).1 G(bstractions?)-2.5 E F0 2.931(It)136 321.6 S .431(hink lo)-2.931 +F(w-le)-.25 E -.15(ve)-.25 G 2.931(lc).15 G .431(ontrol is v)-2.931 F .431(ery important, b)-.15 F .432(ut high-le)-.2 F -.15(ve)-.25 G 2.932 (la).15 G .432(bstractions are con)-2.932 F -.15(ve)-.4 G .432 -(nient, so a).15 F(good balance between the tw)111 636 Q 2.5(oi)-.1 G -2.5(sb)-2.5 G(est.)-2.5 E F1 4.181(1.5.1.10. W)111 660 R 1.681(ould y) +(nient, so a).15 F(good balance between the tw)111 333.6 Q 2.5(oi)-.1 G +2.5(sb)-2.5 G(est.)-2.5 E F1 4.181(2.6.1.10. W)111 357.6 R 1.681(ould y) -.75 F 1.681(ou be happy to de)-.25 F -.1(ve)-.15 G 1.681 (lop libraries f).1 F 1.681(or things that ar)-.25 F 1.68(en't alr)-.18 -F 1.68(eady imple-)-.18 F(mented \(eg: an SQL library\))111 672 Q F0 -(Potentially if it is simple enough to implement ne)136 687.6 Q 2.5(wt) --.25 G(hings.)-2.5 E F1 2.5(1.5.2. Notes)111 723.6 R(fr)2.5 E -(om questionnair)-.18 E 2.5(e1)-.18 G 0 Cg EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(-4-)300.17 48 Q 2.994(Some of the k)136 84 R +F 1.68(eady imple-)-.18 F(mented \(eg: an SQL library\))111 369.6 Q F0 +(Potentially if it is simple enough to implement ne)136 385.2 Q 2.5(wt) +-.25 G(hings.)-2.5 E F1 2.5(2.6.2. Notes)111 421.2 R(fr)2.5 E +(om questionnair)-.18 E 2.5(e1)-.18 G F0 2.994(Some of the k)136 436.8 R 3.294 -.15(ey t)-.1 H 2.994(hings that I'm taking a).15 F -.1(wa)-.15 G 5.494(yf).1 G 2.995(rom this \214rst questionnaire, are my)-5.494 F .461 -(client/users initial needs and use cases. I think it')111 96 R 2.961 +(client/users initial needs and use cases. I think it')111 448.8 R 2.961 (sc)-.55 G .461(lear my language can be of assistance to my)-2.961 F -.842(client, Zipp)111 108 R 3.342(yw)-.1 G .843(ill be a good language \ -for web back ends and small command line tools, which)-3.342 F -(my client e)111 120 Q(xpressed interested in.)-.15 E 2.564<498c>111 144 -S .064(nd the f)-2.564 F .064(act my client is w)-.1 F .064(orried by e) --.1 F -.15(xe)-.15 G .064(cutable size interesting, ho).15 F(we)-.25 E --.15(ve)-.25 G 2.564(rI).15 G .063(doubt it will be an is-)-.001 F -(sue; a ballooning code-base is unlik)111 156 Q -(ely as only one person is writing the project.)-.1 E 2.56(Ia)111 180 S -2.56(ma)-2.56 G .06(lso taking on the f)-2.56 F .06 +.842(client, Zipp)111 460.8 R 3.342(yw)-.1 G .843(ill be a good languag\ +e for web back ends and small command line tools, which)-3.342 F +(my client e)111 472.8 Q(xpressed interested in.)-.15 E 2.564<498c>111 +496.8 S .064(nd the f)-2.564 F .064(act my client is w)-.1 F .064 +(orried by e)-.1 F -.15(xe)-.15 G .064(cutable size interesting, ho).15 +F(we)-.25 E -.15(ve)-.25 G 2.564(rI).15 G .063(doubt it will be an is-) +-.001 F(sue; a ballooning code-base is unlik)111 508.8 Q +(ely as only one person is writing the project.)-.1 E 2.56(Ia)111 532.8 +S 2.56(ma)-2.56 G .06(lso taking on the f)-2.56 F .06 (act that my client w)-.1 F .06 -(ants good command line tools, so a pkg-manager and)-.1 F -.2(bu)111 192 -S(ndler should be a priority).2 E 2.5(,p)-.65 G(erhaps the)-2.5 E 2.5 -(yc)-.15 G(ould be written in Zipp)-2.5 E 2.5(ya)-.1 G -(fter the interpreter is done.)-2.5 E/F1 10/Times-Bold@0 SF 2.5 -(1.5.3. The)111 228 R(\214rst elements of the pr)2.5 E(oject)-.18 E F0 -.173(At this stage I can say that I'm con\214dent in my project and its\ - scope. I ha)136 243.6 R .472 -.15(ve a g)-.2 H .172(oal in mind).15 F -(for it.)111 255.6 Q F1(The k)111 279.6 Q(ey things to tak)-.1 E 2.5(ea) --.1 G(way fr)-2.5 E(om this section ar)-.18 E(e:)-.18 E(----)111 303.6 Q -F0(Mak)2.5 E 2.5(eah)-.1 G(igh le)-2.5 E -.15(ve)-.25 G 2.5(ll).15 G +(ants good command line tools, so a pkg-manager and)-.1 F -.2(bu)111 +544.8 S(ndler should be a priority).2 E 2.5(,p)-.65 G(erhaps the)-2.5 E +2.5(yc)-.15 G(ould be written in Zipp)-2.5 E 2.5(ya)-.1 G +(fter the interpreter is done.)-2.5 E F1 2.5(2.6.3. The)111 580.8 R +(\214rst elements of the pr)2.5 E(oject)-.18 E F0 .173(At this stage I \ +can say that I'm con\214dent in my project and its scope. I ha)136 596.4 +R .472 -.15(ve a g)-.2 H .172(oal in mind).15 F(for it.)111 608.4 Q F1 +(The k)111 632.4 Q(ey things to tak)-.1 E 2.5(ea)-.1 G(way fr)-2.5 E +(om this section ar)-.18 E(e:)-.18 E(----)111 656.4 Q F0(Mak)2.5 E 2.5 +(eah)-.1 G(igh le)-2.5 E -.15(ve)-.25 G 2.5(ll).15 G (anguage with a useable set of features, to replace C in man)-2.5 E 2.5 -(ys)-.15 G(ituations.)-2.5 E F1(----)111 327.6 Q F0 -.25(Ke)2.5 G +(ys)-.15 G(ituations.)-2.5 E F1(----)111 680.4 Q F0 -.25(Ke)2.5 G (ep the language readable and easy).25 E 2.5(,w)-.65 G(ith po)-2.5 E -(werful tools a)-.25 E -.25(va)-.2 G(ilable.).25 E F1(----)111 351.6 Q +(werful tools a)-.25 E -.25(va)-.2 G(ilable.).25 E F1(----)111 704.4 Q F0(Ensure the language is well supported with tools lik)2.5 E 2.5(eap) --.1 G(kg-manager)-2.5 E(.)-.55 E F1 2.5(1.6. Abstract)111 387.6 R -(data structur)2.5 E(es and ther)-.18 E 2.5(ei)-.18 G(mplementations) --2.5 E F0 1.241(In lar)136 403.2 R 1.241(ger projects, when a programme\ -r needs a data structure that the language the)-.18 F 3.742(ya)-.15 G -(re)-3.742 E(writing in doesn')111 415.2 Q 2.5(tp)-.18 G(ro)-2.5 E -(vide, the)-.15 E 2.5(yw)-.15 G(ill need to mak)-2.5 E 2.5(et)-.1 G -(heir o)-2.5 E(wn.)-.25 E(Bello)111 439.2 Q 2.5(wa)-.25 G(re a fe)-2.5 E -2.5(we)-.25 G(xamples of these data structures that C doesn')-2.65 E 2.5 -(ta)-.18 G(lready pro)-2.5 E(vide.)-.15 E F1 2.5(1.6.1. Link)111 463.2 R -(ed lists)-.1 E F0 .382(this is an alternati)136 478.8 R .682 -.15(ve i) --.25 H .381 -(mplementation of a list, where you store some data, and the memory).15 -F .043(address to the ne)111 490.8 R .044(xt node. Then you can mo)-.15 -F .344 -.15(ve t)-.15 H .044 +-.1 G(kg-manager)-2.5 E(.)-.55 E 0 Cg EP +%%Page: 6 6 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-6-)300.17 48 Q/F1 10/Times-Bold@0 SF 2.5 +(2.7. Abstract)111 84 R(data structur)2.5 E(es and ther)-.18 E 2.5(ei) +-.18 G(mplementations)-2.5 E F0 1.241(In lar)136 99.6 R 1.241(ger proje\ +cts, when a programmer needs a data structure that the language the)-.18 +F 3.742(ya)-.15 G(re)-3.742 E(writing in doesn')111 111.6 Q 2.5(tp)-.18 +G(ro)-2.5 E(vide, the)-.15 E 2.5(yw)-.15 G(ill need to mak)-2.5 E 2.5 +(et)-.1 G(heir o)-2.5 E(wn.)-.25 E(Bello)111 135.6 Q 2.5(wa)-.25 G +(re a fe)-2.5 E 2.5(we)-.25 G +(xamples of these data structures that C doesn')-2.65 E 2.5(ta)-.18 G +(lready pro)-2.5 E(vide.)-.15 E F1 2.5(2.7.1. Link)111 159.6 R(ed lists) +-.1 E F0 .382(this is an alternati)136 175.2 R .682 -.15(ve i)-.25 H +.381(mplementation of a list, where you store some data, and the memory) +.15 F .043(address to the ne)111 187.2 R .044(xt node. Then you can mo) +-.15 F .344 -.15(ve t)-.15 H .044 (hrough the list by reading the data then reading the).15 F -(data of the ne)111 502.8 Q(xt node, and then repeating until the 'ne) +(data of the ne)111 199.2 Q(xt node, and then repeating until the 'ne) -.15 E(xt' part of the node is empty)-.15 E(.)-.65 E 1.106 (In C this is easy to implement as you can \214nd a memory address v)111 -526.8 R 1.105(ery easily with '&' to \214nd)-.15 F .168 -(where a bit of data is stored. I will need to use a ')111 538.8 R .168 +223.2 R 1.105(ery easily with '&' to \214nd)-.15 F .168 +(where a bit of data is stored. I will need to use a ')111 235.2 R .168 (struct', which is a bit lik)-.55 F 2.669(eac)-.1 G .169(lass in C \(ho) --2.669 F(we)-.25 E -.15(ve)-.25 G(r).15 E(you can')111 550.8 Q 2.5(ta) +-2.669 F(we)-.25 E -.15(ve)-.25 G(r).15 E(you can')111 247.2 Q 2.5(ta) -.18 G(ttach a function to it\). A simple implementation looks lik)-2.5 -E 2.5(et)-.1 G(his:)-2.5 E(typedef struct ll {)111 574.8 Q -.2(vo)136 -598.8 S(id *data; // the data of the node).2 E(ll *ne)136 622.8 Q -(xt; // the ne)-.15 E(xt node)-.15 E 2.5(}l)111 646.8 S(l;)-2.5 E .623 -(The pro')111 670.8 R 3.123(so)-.55 G 3.123(fal)-3.123 G(ink)-3.123 E +E 2.5(et)-.1 G(his:)-2.5 E(typedef struct ll {)111 271.2 Q -.2(vo)136 +295.2 S(id *data; // the data of the node).2 E(ll *ne)136 319.2 Q +(xt; // the ne)-.15 E(xt node)-.15 E 2.5(}l)111 343.2 S(l;)-2.5 E .623 +(The pro')111 367.2 R 3.123(so)-.55 G 3.123(fal)-3.123 G(ink)-3.123 E .623(ed list are the f)-.1 F .623(act that the)-.1 F 3.122(yc)-.15 G .622(an ha)-3.122 F .922 -.15(ve d)-.2 H .622 (ata appended to the start or end easily).15 F -(by changing the root node, or the ne)111 682.8 Q(xt node.)-.15 E(Link) -111 706.8 Q 1.117(ed lists ha)-.1 F 1.417 -.15(ve a f)-.2 H 1.617 -.25 +(by changing the root node, or the ne)111 379.2 Q(xt node.)-.15 E(Link) +111 403.2 Q 1.117(ed lists ha)-.1 F 1.417 -.15(ve a f)-.2 H 1.617 -.25 (ew d).15 H -.25(ow).25 G 1.117(nsides, for e).25 F 1.117 (xample you can')-.15 F 3.617(tm)-.18 G 1.417 -.15(ove t)-3.617 H 1.117 (hrough them backw).15 F 1.118(ards, and)-.1 F -(unless you store it on its o)111 718.8 Q +(unless you store it on its o)111 415.2 Q (wn, you cant \214nd the length of it in a f)-.25 E(ast w)-.1 E(ay)-.1 E -(.)-.65 E 0 Cg EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(-5-)300.17 48 Q .476(In my project I w)111 84 R -.476(ould lik)-.1 F 2.976(et)-.1 G 2.976(ou)-2.976 G .476(se link)-2.976 -F .475(ed list in the AST \(see later sections for info\), and to store) --.1 F(lists in the language.)111 96 Q/F1 10/Times-Bold@0 SF 2.5 -(1.6.2. Dictionaries)111 120 R F0 2.749(Ad)136 135.6 S .249(ictionary i\ -s a simple data structure that just stores, a bit of data, and a number\ - or string)-2.749 F(to identify it.)111 147.6 Q 2.5(Ad)5 G -(ictionary lik)-2.5 E 2.5(eal)-.1 G(ink)-2.5 E -(ed list can be implemented with a struct in c lik)-.1 E 2.5(es)-.1 G -(o:)-2.5 E(typedef struct dict {)111 171.6 Q -.2(vo)136 195.6 S +(.)-.65 E .476(In my project I w)111 439.2 R .476(ould lik)-.1 F 2.976 +(et)-.1 G 2.976(ou)-2.976 G .476(se link)-2.976 F .475 +(ed list in the AST \(see later sections for info\), and to store)-.1 F +(lists in the language.)111 451.2 Q F1 2.5(2.7.2. Dictionaries)111 475.2 +R F0 2.749(Ad)136 490.8 S .249(ictionary is a simple data structure tha\ +t just stores, a bit of data, and a number or string)-2.749 F +(to identify it.)111 502.8 Q 2.5(Ad)5 G(ictionary lik)-2.5 E 2.5(eal)-.1 +G(ink)-2.5 E(ed list can be implemented with a struct in c lik)-.1 E 2.5 +(es)-.1 G(o:)-2.5 E(typedef struct dict {)111 526.8 Q -.2(vo)136 550.8 S (id *data; // the data of the dict).2 E(int id; // the id of the dict) -136 219.6 Q 2.5(}d)111 243.6 S(ict;)-2.5 E .462 -(In my project I think I could use a link)111 267.6 R .461 +136 574.8 Q 2.5(}d)111 598.8 S(ict;)-2.5 E .462 +(In my project I think I could use a link)111 622.8 R .461 (ed list represent a zipp)-.1 F 2.961(yv)-.1 G .461 (ariable and an ID that i can use)-3.211 F -(to identify it, this could mak)111 279.6 Q 2.5(ee)-.1 G -.15(xe)-2.65 G +(to identify it, this could mak)111 634.8 Q 2.5(ee)-.1 G -.15(xe)-2.65 G (cution f).15 E(aster as i can compare ID')-.1 E 2.5(sr)-.55 G -(ather than string v)-2.5 E(alues)-.25 E F1 2.5(1.7. Pr)111 315.6 R -(ototyping hard featur)-.18 E(es)-.18 E 2.5(1.7.1. Abstract)111 339.6 R +(ather than string v)-2.5 E(alues)-.25 E F1 2.5(2.8. Pr)111 670.8 R +(ototyping hard featur)-.18 E(es)-.18 E 2.5(2.8.1. Abstract)111 694.8 R (Syntax T)2.5 E -.18(re)-.74 G(es \(AST\) theory).18 E F0 .117 -(In a programming language man)136 355.2 R 2.617(ya)-.15 G .118 +(In a programming language man)136 710.4 R 2.617(ya)-.15 G .118 (bstract data types will be used to allo)-2.617 F 2.618(wt)-.25 G .118 -(he code to e)-2.618 F -.15(xe)-.15 G(-).15 E .967(cute, ho)111 367.2 R +(he code to e)-2.618 F -.15(xe)-.15 G(-).15 E .967(cute, ho)111 722.4 R (we)-.25 E -.15(ve)-.25 G 3.467(rI).15 G .966(think the hardest part of\ - this is an abstract syntax tree. This is a data structure)-.001 F .376 + this is an abstract syntax tree. This is a data structure)-.001 F 0 Cg +EP +%%Page: 7 7 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-7-)300.17 48 Q .376 (that holds the code in an ordered form that can be analysed and e)111 -379.2 R -.15(xe)-.15 G .376(cuted in a simple w).15 F(ay)-.1 E 2.876(.I) +84 R -.15(xe)-.15 G .376(cuted in a simple w).15 F(ay)-.1 E 2.876(.I) -.65 G 2.876(ti)-2.876 G 2.876(sa)-2.876 G .084 -(tree structure, with the top node being a root and all lo)111 391.2 R -.084(wer nodes being things needed to calculate)-.25 F .393 -(the root. It can be used not only for code b)111 403.2 R .393 +(tree structure, with the top node being a root and all lo)111 96 R .084 +(wer nodes being things needed to calculate)-.25 F .393 +(the root. It can be used not only for code b)111 108 R .393 (ut also for mathematical e)-.2 F .394(xpressions. I think the easi-) --.15 F(est w)111 415.2 Q(ay to sho)-.1 E 2.5(wi)-.25 G 2.5(ti)-2.5 G 2.5 -(sv)-2.5 G(ia a mathematical e)-2.5 E(xample)-.15 E -.8(Ta)111 439.2 S -.2 -.1(ke t).8 H(he follo).1 E 2.5(we)-.25 G(xpression for e)-2.65 E -(xample:)-.15 E(\(1 + \(10 * \(3 - \(2 * 4\)\)\)\))111 463.2 Q 1.6 -.8 -(We k)111 487.2 T(no).8 E 2.5(wt)-.25 G(hat this is equal to -49)-2.5 E -(Ho)111 511.2 Q(we)-.25 E -.15(ve)-.25 G 2.917(rf).15 G .417 +-.15 F(est w)111 120 Q(ay to sho)-.1 E 2.5(wi)-.25 G 2.5(ti)-2.5 G 2.5 +(sv)-2.5 G(ia a mathematical e)-2.5 E(xample)-.15 E -.8(Ta)111 144 S .2 +-.1(ke t).8 H(he follo).1 E 2.5(we)-.25 G(xpression for e)-2.65 E +(xample:)-.15 E(\(1 + \(10 * \(3 - \(2 * 4\)\)\)\))111 168 Q 1.6 -.8 +(We k)111 192 T(no).8 E 2.5(wt)-.25 G(hat this is equal to -49)-2.5 E +(Ho)111 216 Q(we)-.25 E -.15(ve)-.25 G 2.917(rf).15 G .417 (or a computer this is f)-2.917 F .416 (ar harder to understand. This is because it has no understanding)-.1 F -(of order of operation)111 523.2 Q 1.6 -.8(To s)111 547.2 T(olv).8 E 2.5 -(et)-.15 G(his we use an AST \(abstract syntax tree\))-2.5 E .187 -(When you solv)111 571.2 R 2.687(et)-.15 G .187(hat e)-2.687 F .187 +(of order of operation)111 228 Q 1.6 -.8(To s)111 252 T(olv).8 E 2.5(et) +-.15 G(his we use an AST \(abstract syntax tree\))-2.5 E .187 +(When you solv)111 276 R 2.687(et)-.15 G .187(hat e)-2.687 F .187 (xpression you kno)-.15 F 2.687(wt)-.25 G 2.687(os)-2.687 G .187 (tart with \(2 * 4\), then 3 - the answer to that and so)-2.687 F(on)111 -583.2 Q 1.6 -.8(We c)111 607.2 T(an represent the steps as a tree lik).8 -E 2.5(es)-.1 G(o:)-2.5 E 14 14 121 121 -121 121 245.5 752.2 PBEGIN +288 Q 1.6 -.8(We c)111 312 T(an represent the steps as a tree lik).8 E +2.5(es)-.1 G(o:)-2.5 E 14 14 121 121 -121 121 245.5 457 PBEGIN %%BeginDocument: ast.ps %!PS-Adobe-3.0 %%Creator: GIMP PostScript file plug-in V 1.17 by Peter Kirchgessner @@ -2152,94 +2270,91 @@ showpage end %%EOF %%EndDocument -end PEND 0 Cg EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(-6-)300.17 48 Q 1.266 -(As you can see, you need to e)136 84 R -.25(va)-.25 G 1.266 -(luate the e).25 F 1.265(xpression in the most brack)-.15 F 1.265 -(ets \214rst, then the)-.1 F(ne)111 96 Q(xt, and so on, w)-.15 E -(orking you w)-.1 E(ay up)-.1 E -1.1(Yo)111 120 S 2.646(uc)1.1 G .146 +end PEND 1.266(As you can see, you need to e)136 484.6 R -.25(va)-.25 G +1.266(luate the e).25 F 1.265(xpression in the most brack)-.15 F 1.265 +(ets \214rst, then the)-.1 F(ne)111 496.6 Q(xt, and so on, w)-.15 E +(orking you w)-.1 E(ay up)-.1 E -1.1(Yo)111 520.6 S 2.646(uc)1.1 G .146 (an e)-2.646 F -.25(va)-.25 G .147(luate code in a similar w).25 F(ay) -.1 E 2.647(,t)-.65 G .147 (reating each operation \(such as +-*/\) as functions, doing)-2.647 F -.002(the most deeply nested function \214rst, then w)111 132 R .002 +.002(the most deeply nested function \214rst, then w)111 532.6 R .002 (orking up. Each e)-.1 F .002(xpression can be represented in this)-.15 -F(tree, then to sho)111 144 Q 2.5(waw)-.25 G +F(tree, then to sho)111 544.6 Q 2.5(waw)-.25 G (hole program you can create a list of trees)-2.5 E/F1 10/Times-Bold@0 -SF 2.5(1.7.2. Implementing)111 180 R(AST')2.5 E(s)-.37 E F0 .343 -(As a prototype i will mak)136 195.6 R -5.342 2.843(ea p)-.1 H .344 +SF 2.5(2.8.2. Implementing)111 580.6 R(AST')2.5 E(s)-.37 E F0 .343 +(As a prototype i will mak)136 596.2 R -5.342 2.843(ea p)-.1 H .344 (rogram that can tak)-2.843 F 2.844(em)-.1 G .344(athematical e)-2.844 F .344(xpressions and e)-.15 F -.25(va)-.25 G(luate).25 E(them, and allo) -111 207.6 Q(wing for functions \(in the form f\(x\)\).)-.25 E -(It will do this via AST')5 E(s)-.55 E .718(This prototype tak)111 231.6 +111 608.2 Q(wing for functions \(in the form f\(x\)\).)-.25 E +(It will do this via AST')5 E(s)-.55 E .718(This prototype tak)111 632.2 R .718(es 173 lines of code, it tak)-.1 F .718 (es a string as a cmd line ar)-.1 F .717(gument then con)-.18 F -.15(ve) -.4 G .717(rts it).15 F .177 -(into an abstract syntax tree, and \214nally it e)111 243.6 R -.15(xe) +(into an abstract syntax tree, and \214nally it e)111 644.2 R -.15(xe) -.15 G .178(cutes it. This is just a simple prototype and thus it is).15 F 1.849(small in scope. It can only do simple operators \(+-*/\) and re\ -quires litteral v)111 255.6 R 1.849(alues to be sur)-.25 F(-)-.2 E -(rounded by [] so it kno)111 267.6 Q(ws its not another e)-.25 E -(xpression to e)-.15 E -.25(va)-.25 G(luate.).25 E -(typedef struct ast_node ast_node;)111 303.6 Q(typedef enum op {)111 -339.6 Q(ADD = 0,)131 363.6 Q(SUB = 1,)131 387.6 Q(MUL = 2,)131 411.6 Q -(DIV = 3,)131 435.6 Q 2.5(}o)111 459.6 S(p;)-2.5 E -(typedef struct ast_node {)111 495.6 Q(op operation;)131 519.6 Q -(int realLeft;)131 543.6 Q(int realRight;)131 567.6 Q(ast_node *right;) -131 591.6 Q(ast_node *left;)131 615.6 Q 2.5(}a)111 639.6 S(st_node;)-2.5 -E(Abo)111 675.6 Q .335 -.15(ve i)-.15 H 2.535(st).15 G .035 +quires litteral v)111 656.2 R 1.849(alues to be sur)-.25 F(-)-.2 E +(rounded by [] so it kno)111 668.2 Q(ws its not another e)-.25 E +(xpression to e)-.15 E -.25(va)-.25 G(luate.).25 E(https://github)111 +692.2 Q(.com/standenbo)-.4 E +(y/school/tree/master/comp/lucas-standen-NEA/code/proto/ast)-.1 E +(typedef struct ast_node ast_node;)111 728.2 Q 0 Cg EP +%%Page: 8 8 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Roman@0 SF(-8-)300.17 48 Q(typedef enum op {)111 84 Q +(ADD = 0,)131 108 Q(SUB = 1,)131 132 Q(MUL = 2,)131 156 Q(DIV = 3,)131 +180 Q 2.5(}o)111 204 S(p;)-2.5 E(typedef struct ast_node {)111 240 Q +(op operation;)131 264 Q(int realLeft;)131 288 Q(int realRight;)131 312 +Q(ast_node *right;)131 336 Q(ast_node *left;)131 360 Q 2.5(}a)111 384 S +(st_node;)-2.5 E(Abo)111 420 Q .335 -.15(ve i)-.15 H 2.535(st).15 G .035 (he code for the AST)-2.535 F 2.535(,i)-.74 G 2.535(ts)-2.535 G .035 (tores an operation \(which is just an inte)-2.535 F .035 -(ger\), and it stores a real)-.15 F .676(left and real right v)111 687.6 -R .675(alue, along side tw)-.25 F 3.175(oo)-.1 G .675 +(ger\), and it stores a real)-.15 F .676(left and real right v)111 432 R +.675(alue, along side tw)-.25 F 3.175(oo)-.1 G .675 (ther nodes. The real v)-3.175 F .675(alues are inte)-.25 F .675 (gers, this w)-.15 F .675(ould be)-.1 F .943 -(the 2 numbers in reference in the e)111 699.6 R .944 +(the 2 numbers in reference in the e)111 444 R .944 (xpression. The 2 nodes are a recursi)-.15 F 1.244 -.15(ve d)-.25 H .944 -(ata structure, much).15 F(lik)111 711.6 Q 3.489(ep)-.1 G .988(utting a\ -n object of a class inside the de\214nition of that class itself. The) --3.489 F 3.488(ya)-.15 G .988(re used to store)-3.488 F -.25(va)111 -723.6 S .08(lues that may still be e).25 F .08(xpressions, for e)-.15 F -.081(xample \(+ [1] \(+ [1] [1]\)\) the second part of this e)-.15 F -(xpres-)-.15 E 0 Cg EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(-7-)300.17 48 Q .533(sion w)111 84 R .533 -(ould be in the "right" v)-.1 F .533(airable. When code is e)-.25 F -.15 -(xe)-.15 G .533(cuted I can check if "left", or "right" are).15 F .61 -(null and if the)111 96 R 3.11(ya)-.15 G .61(re i kno)-3.11 F 3.11(wt) --.25 G .61(hat i am at the lo)-3.11 F .61(west e)-.25 F .61 +(ata structure, much).15 F(lik)111 456 Q 3.489(ep)-.1 G .988(utting an \ +object of a class inside the de\214nition of that class itself. The) +-3.489 F 3.488(ya)-.15 G .988(re used to store)-3.488 F -.25(va)111 468 +S .08(lues that may still be e).25 F .08(xpressions, for e)-.15 F .081 +(xample \(+ [1] \(+ [1] [1]\)\) the second part of this e)-.15 F(xpres-) +-.15 E .533(sion w)111 480 R .533(ould be in the "right" v)-.1 F .533 +(airable. When code is e)-.25 F -.15(xe)-.15 G .533 +(cuted I can check if "left", or "right" are).15 F .61(null and if the) +111 492 R 3.11(ya)-.15 G .61(re i kno)-3.11 F 3.11(wt)-.25 G .61 +(hat i am at the lo)-3.11 F .61(west e)-.25 F .61 (xpression that is only litteral v)-.15 F 3.11(alues. Then)-.25 F(I)3.11 -E(can e)111 108 Q -.15(xe)-.15 G(cute that node and w).15 E(ork my w)-.1 -E(ay up the tree.)-.1 E(The e)111 144 Q -.15(xe)-.15 G -(cution code can be seen here.).15 E(int e)111 180 Q -.15(xe)-.15 G -(c\(ast_node *e).15 E(xp\){)-.15 E(if \(e)131 204 Q(xp->left != NULL\)) --.15 E -.15(ex)151 228 S(p->realLeft = e).15 E -.15(xe)-.15 G(c\(e).15 E -(xp->left\);)-.15 E(if \(e)131 252 Q(xp->right != NULL\))-.15 E -.15(ex) -151 276 S(p->realRight = e).15 E -.15(xe)-.15 G(c\(e).15 E(xp->right\);) --.15 E(if \(e)131 324 Q(xp->operation == ADD\))-.15 E(return e)151 348 Q -(xp->realLeft+ e)-.15 E(xp->realRight;)-.15 E(if \(e)131 372 Q -(xp->operation == SUB\))-.15 E(return e)151 396 Q(xp->realLeft - e)-.15 -E(xp->realRight;)-.15 E(if \(e)131 420 Q(xp->operation == MUL\))-.15 E -(return e)151 444 Q(xp->realLeft * e)-.15 E(xp->realRight;)-.15 E -(if \(e)131 468 Q(xp->operation == DIV\))-.15 E(return e)151 492 Q -(xp->realLeft/ e)-.15 E(xp->realRight;)-.15 E(return 0;)136 516 Q(})111 -540 Q .851(The rest of the code is the process of con)111 576 R -.15(ve) --.4 G .85(rting the string input to litteral v).15 F .85 -(alues and inserting)-.25 F(them into the AST)111 588 Q/F1 10 -/Times-Bold@0 SF 2.5(2. Design)111 636 R 2.5(3. T)111 660 R -(echnical Solution)-.92 E 2.5(4. T)111 684 R(esting)-.92 E 2.5(5. Ev)111 -708 R(aluation)-.1 E 0 Cg EP -%%Page: 8 8 +E(can e)111 504 Q -.15(xe)-.15 G(cute that node and w).15 E(ork my w)-.1 +E(ay up the tree.)-.1 E(The e)111 540 Q -.15(xe)-.15 G +(cution code can be seen here.).15 E(https://github)111 564 Q +(.com/standenbo)-.4 E +(y/school/tree/master/comp/lucas-standen-NEA/code/proto/ast)-.1 E(int e) +111 600 Q -.15(xe)-.15 G(c\(ast_node *e).15 E(xp\){)-.15 E(if \(e)131 +624 Q(xp->left != NULL\))-.15 E -.15(ex)151 648 S(p->realLeft = e).15 E +-.15(xe)-.15 G(c\(e).15 E(xp->left\);)-.15 E(if \(e)131 672 Q +(xp->right != NULL\))-.15 E -.15(ex)151 696 S(p->realRight = e).15 E +-.15(xe)-.15 G(c\(e).15 E(xp->right\);)-.15 E 0 Cg EP +%%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Roman@0 SF(-8-)300.17 48 Q 0 Cg EP +/F0 10/Times-Roman@0 SF(-9-)300.17 48 Q(if \(e)131 84 Q +(xp->operation == ADD\))-.15 E(return e)151 108 Q(xp->realLeft+ e)-.15 E +(xp->realRight;)-.15 E(if \(e)131 132 Q(xp->operation == SUB\))-.15 E +(return e)151 156 Q(xp->realLeft - e)-.15 E(xp->realRight;)-.15 E +(if \(e)131 180 Q(xp->operation == MUL\))-.15 E(return e)151 204 Q +(xp->realLeft * e)-.15 E(xp->realRight;)-.15 E(if \(e)131 228 Q +(xp->operation == DIV\))-.15 E(return e)151 252 Q(xp->realLeft/ e)-.15 E +(xp->realRight;)-.15 E(return 0;)136 276 Q(})111 300 Q .851 +(The rest of the code is the process of con)111 336 R -.15(ve)-.4 G .85 +(rting the string input to litteral v).15 F .85(alues and inserting)-.25 +F(them into the AST)111 348 Q/F1 10/Times-Bold@0 SF 2.5(3. Design)111 +396 R 2.5(4. T)111 420 R(echnical Solution)-.92 E 2.5(5. T)111 444 R +(esting)-.92 E 2.5(6. Ev)111 468 R(aluation)-.1 E 0 Cg EP %%Trailer end %%EOF diff --git a/comp/lucas-standen-NEA/writeup/make.sh b/comp/lucas-standen-NEA/writeup/make.sh index 13cb483..aef33ae 100755 --- a/comp/lucas-standen-NEA/writeup/make.sh +++ b/comp/lucas-standen-NEA/writeup/make.sh @@ -3,6 +3,7 @@ for i in $(ls | grep .ms); do groff -ms $i -Tps > $(echo $i | cut -f1 -d".").ps ps2pdf $(echo $i | cut -f1 -d".").ps + pdftocgen coverpage.pdf < recipe.toml | pdftocio coverpage.pdf mv coverpage_out.pdf coverpage.pdf done diff --git a/comp/lucas-standen-NEA/writeup/questions-for-amy.ps b/comp/lucas-standen-NEA/writeup/questions-for-amy.ps index 69f08d5..30574d2 100644 --- a/comp/lucas-standen-NEA/writeup/questions-for-amy.ps +++ b/comp/lucas-standen-NEA/writeup/questions-for-amy.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 %%Creator: groff version 1.23.0 -%%CreationDate: Mon May 6 10:51:43 2024 +%%CreationDate: Mon May 6 12:02:30 2024 %%DocumentNeededResources: font Times-Bold %%+ font Times-Roman %%DocumentSuppliedResources: procset grops 1.23 0 diff --git a/comp/lucas-standen-NEA/writeup/recipe.toml b/comp/lucas-standen-NEA/writeup/recipe.toml index 898b12f..3dbe1aa 100644 --- a/comp/lucas-standen-NEA/writeup/recipe.toml +++ b/comp/lucas-standen-NEA/writeup/recipe.toml @@ -1,9 +1,9 @@ [[heading]] -# NEA cover page +# 1. Reading this document level = 1 greedy = true font.name = "Times-Bold" -font.size = 12.0 +font.size = 10.0 # font.size_tolerance = 1e-5 # font.color = 0x000000 # font.superscript = false @@ -11,14 +11,14 @@ font.size = 12.0 # font.serif = true # font.monospace = false # font.bold = true -# bbox.left = 264.4620056152344 -# bbox.top = 113.74666595458984 -# bbox.right = 347.53759765625 -# bbox.bottom = 125.74666595458984 +# bbox.left = 110.99996948242188 +# bbox.top = 229.2888946533203 +# bbox.right = 221.8401641845703 +# bbox.bottom = 239.2888946533203 # bbox.tolerance = 1e-5 [[heading]] -# 1.1. The current problem +# 2.1. The current problem level = 2 greedy = true font.name = "Times-Bold" @@ -30,9 +30,9 @@ font.size = 10.0 # font.serif = true # font.monospace = false # font.bold = true -# bbox.left = 110.99996948242188 -# bbox.top = 253.2888946533203 -# bbox.right = 220.6298828125 -# bbox.bottom = 263.28887939453125 +# bbox.left = 111.00103759765625 +# bbox.top = 448.88885498046875 +# bbox.right = 220.63095092773438 +# bbox.bottom = 458.88885498046875 # bbox.tolerance = 1e-5 |