Detailed Dev status

Subscribe for updates!

# Pyxie

Changelog
Open Source
Credits
Dev Status
Overview
Language Spec
Language Status
Project Status
Downloads, Links, etc
Arduino Profile

## Detailed Development status

The purpose of this page is for those who wonder "what's being done/planned", either because they're just interested or potentially interested in contributing. That should explain the ordering. Numbers have no relevance, aside from to allow identification of a given task in git commits. (This is exported from trello)

### Project Stage

- HEADLINE: PRE-ALPHA
- DEV STATE: WORKING (USABLE)
- DEV VERSION: 0.1.23
- RELEASED: 0.0.22 (25 Sep 2016)
- LANGUAGE STATE: BARE*
- FOCUS: Practicalities (Arduino Profile real example) - Get the Puppy/Kitten Robot working
- Newsletter created at http://tinyletter.com/sparkslabs

### WIP

### Paused

- 227. .get_type() should be delegated, not rely on internal pynode details.
- Flesh out a micro:bit profile.

### Backlog: Arising

- 259. Would be nice to remove extraneous brackets round generated C++ expressions

### Release Backlog: Features

- 0.1.23 = = = = = = = = = =

### Release Backlog: Tasks

- 0.1.23 - - - - - (tasks)
- 57. Blog post: Pyxie structure #website
- Release tasks

### Known Bugs / Anti-features

### Backlog: Proposed Next

- 196. Batch Compiler
- 59. Start thoughts on pyxie-web #reflect #website
- 195. Functionality of bin/pyxie-dev is in core, not a script
- 3.5 Analysis code looks for an arduino profile file describing c-types appropriately.
- 3.6 arduino profile file is propogated with something relating to core functions that read values, to avoid forcing types "manually"
- 213. v0 no funcs Playful Puppy code analyses
- 214. v0 no funcs Playful Puppy code generates code
- 215. v0 no funcs Playful Puppy code compiles, and runs on device correctly
- 221. Initial spike support for function definitions. (no args, no return values)
- 223. Spike support for functions with basic arguments.
- 222. Spike support for functions which use local variables

### Backlog: Features

- 251. Profile Context is usable for defining externally defined methods/functions (for typechecking)
- 9. Add the manpage to the distributed files, into the right places #docs
- 8. Add updating man page to the makefile #docs
- 197. Web Editor
- 4. Compilation profiles are pluggable
- 11. MBed compatible compilation profile? (Seeedstudio Arch)
- 12. MSP430 compatible compilation profile?
- 13. Pyxie compile harness supports custom working directories #practicalities
- 14. Code Cleanups #refactor #internals
- 15. Refactor code generation #refactor #internals
- 16. Find Variables duplicates effort from the analysis phase, while also relying on results from it #internals
- 17. Transform step is throwing away data. This seems broken and should perhaps pass through decorated pynodes - or at least retain a reference. #internals
- 18. Code generation of C literals is muddled up a touch with structural representation #internals
- 19. Website should use responsive CSS #website
- 20. Website side bar could be better implemented. #website
- 21. Truthiness for values that AND/OR/NOT arguments needs resolving properly in C. (deferred) #pylang
- 22. Truthiness of expressions is explicitly checked/valid - for us in if and while statements and boolean expressions #pylang #internals
- 23. Website could do with some pictures :-) #website
- 24. Currently have 2 shift/reduce conflicts. They're auto-resolved correctly, but could be worth seeing if they could be resolved better. #pylang #internals
- 25. Consider using CppHeaderParser on the C++ side of things - to inform the code generation side of things #internals #pylang
- 26. Block structure of generated C Code is pretty/human friendly/readable #internals
- 27. Operations and operators could be unified with a bit of tweaking - using "x.operation", not "x.tag/x.comparison" etc #internals #refactor
- 28. Better Error messages for users #pylang #practicalties
- 29. Duplication exists within code generation for operators. (cf convert_operator etc) #internals #refactor
- 31. Features focusses on BARE level functionality
- 32. C Syntax Tree is a Tree #internals
- 33. Can find_variables(AST) in pyxie.model.transform actually just look in the results of the analysis phase? It should be able to. Building the same structure after all #internals
- 34. Function call code supports simplified type definitions for externals. #practicalities
- 35. Unify Boolean operator pynode implementations #refactor #internals
- 36. Comments are implemented - would be useful for documented tests more appropriately #pylang
- 37. Add special case for function calls like print... #pylang
- 38. Generalise special casing of function calls. #practicalities
- 39. Variables inside while loops are handled correctly #testing
- 40. Core expression code generation for strings #pylang
- 41. Implement container oriented comparison operators #pylang
- 42. Implement identity oriented comparison operators #pylang
- 43. Code generation for integer literals retains original representation where possible (Octal, hex, binary, etc) #practicalities
- 44. Function call code supports C style function prototypes for type definitions #tbd
- 45. Function call code supports name C headers for type definitions #tbd
- 46. Pyxie caches results of C style header parsing #tbd
- 47. Modulo Operator for Strings #pylang
- 48. Modulo Operator for Integers #pylang
- 49. Modulo Operator for Floats #pylang

### Backlog: Tasks

- 52. Review whether context should check types of ALL expressions, rather than just first, and whether we can should try to detect type mismatches #reflect
- 53. Use https://travis-ci.org/ ? #reflect
- 54. Review pypi packaging for things we should be doing #reflect #practicalities
- 55. Create pyxie-service for managing batch compilation services #practicalities

### Backlog: Website, docs, etc

- 232. Would be nice to have a prettier website
- 233. Some sort of Logo would be nice
- 58. Blog Post: Pyxie Decisions #website
- 60. Start thoughts on pyxie-gui #reflect
- 30. Should we allow comments on website? #website
- 50. Link current test programs on the website, maybe #website

### Features Implemented

- 258. Improve Arduino profile documentation
- 260. Arduino Profile supports HIGH,LOW,INPUT,OUTPUT,A0-A7
- 238. Update grammar on website/in docs to match current grammar.
- 206. Arduino profile supports millis()
- 241. Arduino: Support "constrain"
- 242. Arduino: Support "random"
- 247. Arduino: Support "Serial.println"
- 243. Arduino: Support "analogWrite"
- 246. Arduino: Support "Serial.print"
- 244. Arduino: Support "Serial" object
- 245. Arduino: Support "Serial.begin"
- 240. Arduino: Support arduino "map"
- 205. Arduino: Support "analogRead"
- 257. Arduino Analog sample compiles
- 256. Arduino Analog sample analyses
- 3.8 Arduino compiled programs can use values returned from functions.
- 250. Profile Context is usable for defining external predefined/preinitialised variables
- 249. Profile Context is usable for defining types of external identifiers
- 248. Identifiers as rvalues should codegen as names not strings
- 255. Arduino Analog sample parses
- 254. Create Analog arduino sample
- 252. MAJOR CHANGE print must be a function (to enable Serial.print to be valid syntax)
- 253. FIXBUG: no default profile context breaks tests
- 259. Update various statements on website about utility of Pyxie
- 0.0.22 = = = = = = = = = =
- Add ability to control the arduino model building for
- 0.0.21 = = = = = = = = = =
- 203. Arduino profile supports delayMicroseconds
- 225. Implementation of attribute access is sufficient for arduino profile.
- 210. Parsing of Servo.writeMicroseconds() method call works as you'd expect
- 201. Arduino profile supports Servos
- 230. Implementation can generate code for myservo.attach(pin)
- 231. PyAttribute(PyNode) needs to have a reference to the thing it's an attribute of when it's being accessed via PyAttributeAccess
- 229. Implementation can analyse call to myservo.attach(pin)
- 0.0.20 = = = = = = = = = =
- Subsume tree functionality into core
- Shorten names in profile definitions for clarity
- Better python 3 compatibility
- Experimental addition to look at name of thing, not value
- Use func_label to refer to the callable, not callable_
- Removed use of indenting logger :-)
- Add comment to indenting logger
- Changes to support debugging analysis
- Prettify generated C++ files
- Bump packaging for release
- 194. Docs on pyxie-dev usage
- 0.0.19 = = = = = = = = = =
- 207. Arduino profile supports constants "HIGH", "LOW", "OUTPUT"
- 202. Arduino profile supports digitalWrite
- 204. Arduino profile supports pinMode
- 209. Parsing of Servo.attach() method call works as you'd expect
- 226. Implementation can analyse a simple call to arduino Servo() from Servo.h
- 228. Compiler Runs under Python 3 (and Python 2)
- 0.0.18 = = = = = = = = = =
- 224. Parsing of attribute access is implemented
- 51. Pyxie compile harness is switched over to use a better system for determining runtime options #internals
- 220. range(start,end,step) is supported
- 218. Method calls for objects can be parsed.
- 219. Support for dumping the parse tree results as a json file.
- 200. Pyxie can generate signed long values
- 199. Pyxie can generate unsigned long values
- 217. Code Generation understands what to do with LONG/UNSIGNED LONG values
- 216. Pynodes exist for LONG/UNSIGNED LONG
- 211. Negated expression like "-temp/2" are parsed and work
- 208. Parsing of 0l and 0L works for unsigned and signed longs
- 198. Pyxie Code for Playful Puppy Exists basic version
- 212. Basic version of Playful Puppy code parses
- 0.0.17 = = = = = = = = = =
- 193. Update website to include the changes for 0.0.16/0.0.17 #docs
- 56. Blog post: Introducing Pyxie #docs #website
- 3.7.1 Integrate alternative generator/iterator protocol into compiler
- 3.7 Arduino platform has alternative generator/exception implementation due to lack of exceptions
- pass statement
- 6. Functionality of bin/pyxie is in core, not a script
- 0.0.16 = = = = = = = = = =
- 3. Arduino LEONARDO compatible compilation profile.
- 3.3 Code generation outputs code targetting "setup" instead of "main"
- 3.4 Makefile uses the arduino makefile #arduino leonardo
- 4.1 compilation profiles support removal of elements of the clib
- 3.2 Code generation is called with this switch toggled
- 3.1 Detect that we are in a profile mode from a command line switch
- 2. Function calls that do not require arguments are tested
- 61. Make Release Script
- 62. build_release_script.py
- 63. Documentation in /docs is generated from website source documentation
- 64. Docs on usage #docs
- 65. Man page for pyxie
- 66. Docs in README.md, setup.py and docs/ are generated from website.
- 67. Support for for statements
- 0.0.15 = = = = = = = = = =
- 71. BUG: clibs can only be used on development machine...
- 0.0.14 = = = = = = = = = =
- 74. BUG: Putting the for loop at the end of the program causes compilation to fail
- 75. BUG: statement_block at EOF not emitting dedents correctly #fixed
- 76. Simple for...range loops
- 77. Function call code supports simplified type definitions for builtins (such as range)
- 78. Compile phase is split into "codegen" and "compile"
- 79. Implement a simple iterator protocol for C++ objects - to allow implementation of something like range functions and generators.
- 80. Implementation of a simple C Library to include into user generated code as necessary.
- 0.0.13 = = = = = = = = = =
- 82. Parsing bracketed full expressions
- 83. Chained boolean expressions and chained mixtures of boolean expressions work as expected
- 84. Boolean expression support: NOT
- 85. Boolean expression support: AND
- 86. Boolean expression support: OR
- 87. Support for if/elif/else statements
- 88. Support for if statements
- 0.0.12 = = = = = = = = = =
- 92. Release tasks: 0.0.12
- 93. Comparison operators
- 94. Can now handle loops that count towards zero and do something with them...
- 95. support for while statements
- 96. While Loop conditional is a expression
- 97. Continue works in a While loop
- 98. Break works with With True
- 99. While works with While True:
- 100. Define basic principles for Pyxie
- 0.0.11 = = = = = = = = = =
- 108. Function call code generation supports Print as special case
- 109. Code generation function calls
- 110. Support python comments so we can CHEAT and do things like #include :-D (What a neat idea :-) )
- 111. Parsing function calls
- 0.0.10 = = = = = = = = = =
- 115. Pyxie will now compile files outside the pyxie code tree
- 116. Code generation of expression statements.
- 117. Test suite checks that programs that should fail to compile do so
- 118. Test suite uses new analysis hook
- 119. PARSING USES STANDARD TREE MODEL, BUT ALSO USES CUSTOM TRAVERSALS FOR FLEXIBILITY
- 120. Type inference code changes are refactored and cleaned up
- 121. Strategy for managing variables needs defining
- 122. New strategy for type inference - lexical scope friendly
- 123. Analysis through tree for identifiers doesn't work as expected. Needs fixing/resolving
- 124. Now, before we analyse types, all identifiers are guaranteed to be in the global context. We don't need to stuff in a new version, just update it.
- 125. Contexts themselves are kinda wrong, need a rethink
- 126. Analysis Phase adds context
- 127. Pynodes are tree nodes (and hence trees)
- 128. Analyse is an explicit phase internally, initially focussed on types
- 129. Results of analyse phase can be made visible.
- 130. Docs added to pyxie/init.py
- 0.0.9 = = = = = = = = = =
- 139. Pyxie harness supports parsing random files
- 140. Pyxie harness supports compiling random files
- 141. Pyxie harness has a testing mode
- 142. Bracket negative literal values in expressions to avoid confusing C++
- 145. Pyxie is now left recursive not right recursive
- 146. conversion of expression statements
- 147. BUG: 10-1-2 gives 9 not 11
- 0.0.8 = = = = = = = = = =
- 151. Replace python AST list style representation with a nodal representation - to simplify type decoration etc
- 152. Type inference for expressions
- 153. assignment where the rvalue is a simple integer expression
- 154. Variable types are looked upin/stored to a global context.
- 155. Testcase added for assignments where the rvalue is an expression
- 156. BUGFIX: Should only include iostream once, if at all.
- 157. Printing of op_func blocks
- 158. Conversion of core "operator functions" for integers
- 159. Code generation for INTEGER core expressions
- 160. BUGFIX: Precedence for operators is inverted for some reason. +- binding tighter than */
- 161. BUG - When the parser is reused, line numbers in lexer do not reset for new files
- 162.Parsing core expressions - times, divide, power, plus, minus - NOT function call, not parenthesised
- 163. Parsing blocks generates block tokens
- 164. Lexical Analysis matches initial language spec
- 165. Print handles mixed literals
- 166. Code generation for atomic literals
- 167. "models" contains an initial baseline model mapping python-CST to CPP-CST
- 168. Generation of decorated CPP-CST from parsed assignment statements
- 169. C++ Code can be generated from the baseline CPP-CST for libc based testing
- 170. Parsing assignment statements
- 171. Parsing identifiers
- 172. Parsing of value literals
- 173. Baseline parser/lexer infrastructure for parser build/testing
- 174. Long description on PyPI

### Tasks Done

- 0.0.22 - - - - - (tasks)
- 239. 0.0.22 Release tasks
- 0.0.22 - - - - - (tasks)
- 239. 0.0.21 Release tasks
- 0.0.20 - - - - - (tasks)
- Update changelog
- Add newsletter subscription to site info
- 234. Replicate target release issues for 0.0.20 into github
- 235. Newsletter for sparkslabs projects exists.
- 236. Re-order trello lists by left to right order to make more usable
- 237. Tweak git repo
- 0.0.19 - - - - - (tasks)
- 0.0.18 - - - - - (tasks)
- Package for release and release (DONE)
- Cleanup clib packaging
- 0.0.17 - - - - - (tasks)
- 10. Decide whether to add functionality of bin/pyxie-dev is in core
- 0.0.16 - - - - - (tasks)
- 1. Number Cards in backlog.
- 7. For Release: 0.0.16
- 192. Trello snapshot generation escapes task numbers.
- 68. Write Bump Versions Script.
- 69. Re-prioritise backlog for 0.0.16
- 70. Breakdown features needed for a release script
- 0.0.15 - - - - - (tasks)
- 72. For Release: 0.0.15
- 73. Bump Versions
- 0.0.14 - - - - - (tasks)
- 81. For Release: 0.0.14
- 0.0.13 - - - - - (tasks)
- 89. For Release: 0.0.13
- 90. Decide on Python Modulo operator?
- 91. Bump Versions
- 0.0.12 - - - - - (tasks)
- 101. Update language status for 0.0.12
- 102. BUG: Parser generates far too many "empty statements"
- 103. Update language status for 0.0.11
- 104. Check docs in pyxie/init.py match 0.0.12 Release
- 105. Bump Versions
- 106. Push rebased site to github/live
- 107. Site for Pyxie, should link to language spec -- http://www.sparkslabs.com/Pyxie/language-spec.md
- 0.0.11 - - - - - (tasks)
- 112. For release: 0.0.11
- 113. Check docs in pyxie/init.py match 0.0.11 Release
- 114. Bump Versions
- 0.0.10 - - - - - (tasks)
- 131. For release: 0.0.10
- 132. Check that programs that compile produce expected code
- 134. Check docs in pyxie/init.py match 0.0.10 Release
- 135. Update test target in makefile to match new pyxie args
- 136. Bump Versions
- 137. Order of functions in pynode matches grammar - making it easier to follow
- 138. Document current parsing status more accurately
- 0.0.9 - - - - - (tasks)
- 148. Check that debian package being built/created does actually contains what's wanted
- 149. Check that the tar ball being built/created for pypi actually contains what you want
- 150. Version number bumped
- 0.0.8 - - - - - (tasks earlier)
- 175. Why the project doesn't use the standard python compiler/AST module
- 176. Break down language features into specific feature tasks - for initial feature set
- 177. pyxie compiler now accepts runtime options to control what tests get compiled
- 178. Changelog for initial releases
- 179. Initial language spec
- 180. Packaging for pypi exists
- 181. Packaging via PPA exists
- 182. The CST for baseline Python code is simplified
- 183. Initial testing infrastructure in place
- 184. Private github repo for Pyxie
- 185. initial README for Pyxie
- 186. Pyxie 0.0.1 Released
- 187. Pyxie 0.0.2 Released
- 188. Pyxies 0.0.3 Released
- 189. Pyxie 0.0.4 Released
- 190. Pyxie 0.0.5 Released
- 191. Bump Versions

### Pinned

- Things to feed into Pyxie
- Licensing links
- .p files are parsing tests. If they compile, they should be renamed .pyxie which are compilation tests.
- How to deploy the website
- Release tasks

### Rejected

Updated: 11 October 2016
Help, Contacts & Downloads
Copyright © 2016 Michael Sparks Open Source