Due October 20, 2014
For this assignment, you will implement a Python bytecode interpreter in JavaScript (actually, TypeScript). Your implementation should be engine-independent, so it should work on a variety of browsers. You can use node.js to assist in debugging (see http://nodejs.org/). You should do this project in teams of two: you need to send me information on your team members immediately, and share a private github repo with me.
Your interpreter should be able to load and execute pure Python programs from Python bytecode files (.pyc).
You will be using github to manage your project. When you are ready to submit your code, tag your code with the tag name ‘final’.
Your submission must contain a README.md file that explains how to run your program, how to run the test suite, and what (if any) dependencies are required. You should also include a more detailed explanation of your approach, system design, and results in a LaTeX file that can be compiled with pdflatex.
Details on the .pyc file formats and marshal formats can be found here:
- Describes pyc file format: http://nedbatchelder.com/blog/200804/the_structure_of_pyc_files.html
- Describes the marshal format: http://daeken.com/2010-02-20_Python_Marshal_Format.html
- Useful links put together by Kate Silverstein – https://gist.github.com/k8si/196a0949c1e45d2efca1
Discussion / honesty policy:
You may, as a class, discuss all details of this assignment — and I encourage you to do so via e-mail, etc. However, absolutely no code can be shared across teams. All assignments will be checked with plagiarism detection software. Submission of your project constitutes acceptance of the University Honesty Policy.
Plagiarism Policy
All projects in this course are to be done by you / your group. Violation will result in an F in the course, along with initiation of the formal procedures of the University. We use an automated program and manual checks to correlate projects with each other and with prior solutions. At the same time, we encourage students to help each other learn the course material. As in most courses, there is a boundary separating these two situations. You may give or receive help on any of the concepts covered in lecture or discussion and on the specifics of programming language syntax.
You are allowed to consult with other students in the current class to help you understand the project specification (i.e., the problem definition). However, you may not collaborate in any way when constructing your solution: the solution to the project must be generated by you or your group working alone. You are not allowed to work out the programming details of the problems with anyone or to collaborate to the extent that your programs are identifiably similar. You are not allowed to look at or in any way derive advantage from the existence of project specifications or solutions prepared elsewhere.
If you have any questions as to what constitutes unacceptable collaboration, please talk to me right away. You are expected to exercise reasonable precautions in protecting your own work. Don’t let other students borrow your account or computer, don’t leave your program in a publicly accessible directory, and take care when discarding printouts.
For your reference, here is the University Academic Honesty Policy.