{ "info": { "author": "Pannous", "author_email": "info@pannous.com", "bugtrack_url": null, "classifiers": [], "description": "![ENGLISH SCRIPT](English script.png \"ENGLISH SCRIPT\")\n\n**[Angle](https://github.com/pannous/angle/)** is the Python implementation of [English](https://github.com/pannous/english-script) as a programming language.\nThe main purpose of this language is to make programming accessible to many more people, more fun and to facilitate programming computers via voice.\n\nINSTALL\n-------\n\n`pip install angle`\n\n\nOR from source:\n\n`git clone --recursive git@github.com:pannous/angle.git`\n\n`cd angle`\n\n`./install.sh`\n\nStart the shell : `./bin/angle` \n\nExamples\n--------\nHere are some of our favorite working examples from the [tests](tests):\n\n`assert two minus 1\u00bd equals 0.5`\n\n`beep three times`\n(There will be a generation of programmers who will shake their heads that there ever was a programming language which did not interpret that sentence correctly.)\n\n`assert square of [1,2 and 3] equals 1,4,9`\n\n`assert 3rd word in 'hi my friend' is 'friend'`\n\n`x is 2; if all 0,2,4 are smaller 5 then increase x; assert x equals 3 `\n\n`beep every three seconds`\n\n`last item in 'hi','you' is equal to 'you'`\n\n\n```\nWhile Peter is online on Skype\n\tmake a beep\n\tsleep for 10 seconds\nDone\n```\n\n```\nTo check if person is online on Skype:\n\tSkype.checkStatus(person)\n\tif result is \"online\": return yes \n\telse return no\nEnd\n```\n\nStatus:\n-----------\n\nALPHA, partly usable, some [tests](tests) not yet passing: \n[![Build Status](https://travis-ci.org/pannous/angle.png)](https://travis-ci.org/pannous/angle)\n\nIn progress\n-----------\n\n`add one to every odd number in 1,2,3 == 2,2,4`\n\nThe implicit list filter '**that**' applies a selection criterion to all elements. \n\n`delete all files in my home folder that end with 'bak'` \n\ntranslates to ruby:\n\n`folder(:home).files.select{|that|that.end_with?(\"bak\")}.each{|file| file.delete}`\n\n\nImplicit lambda variable '**it**' \n\n`for all mails by peter: mark it as read if its subject contains 'SPAM'` \n\ntranslates to ruby:\n\n`mails(by: Peter).each{|it| it.mark(:read) if it.subject.match('SPAM')}`\n\n\nThe last example also illustrates what we call **matching by type name**.\n```\nTo delete mail:\n move that mail to trash folder\nEnd\n```\nHere 'mail' acts as argument name and argument type at once.\nNo more Java style Mail mail=new Mail().getMail();\n\n\n\n\nEXPERIMENT\n----------\nRun it and see yourself!\n\n**experiment** by typing\n\n`./bin/angle \"6 plus six\"`\n\n`./bin/angle examples/test.e`\n\n`./bin/angle` (no args to start the shell)\n\n`\u29a0 1/4`\n\n`\u29a0 6 plus six`\n\n`\u29a0 beep three times`\n\n`\u29a0 x is 2; if all 0,2,4 are smaller 5 then increase x`\n\n\n\nLanguage Specification\n----------------------\nAngle is a multi-paradigm programming language with [gradual typing](https://en.m.wikipedia.org/wiki/Gradual_typing).\n\nRead the [DOSSIER](https://github.com/pannous/english-script/blob/master/DOSSIER.md) for a more complete [**language specification**](https://github.com/pannous/english-script/blob/master/DOSSIER.md), vision and some background. \n\nThe grammar is not meant to be linguistically complete, but [functionality complete](https://en.wikipedia.org/wiki/Functional_completeness) and easily extendable.\n\"Premature optimization is the root of all evil.\" Many programming languages 'optimize' on the syntax level in order to optimize the resulting applications. Maybe [this](http://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667.html) is a mistake.\n\nTo check out the current capabilities of English Script have a look at the [tests](https://github.com/pannous/angle/tree/master/tests),\n[keywords](https://github.com/pannous/angle/blob/master/core/english_tokens.py) and\n[grammar](https://github.com/pannous/angle/blob/master/core/english_parser.py)\n\nFuture\n------\nEnglish Script / Angle is currently running in the \n* [ruby](https://github.com/pannous/english-script) and [python](https://github.com/pannous/angle) environment, but will soon compile to the \n* WEB(!!) thanks to [WebAssembly](https://github.com/WebAssembly/design)\n* JVM thanks to [Mirah](https://github.com/mirah/mirah), [zippy](https://bitbucket.org/ssllab/zippy/overview) and [truffle](https://github.com/OracleLabs/Truffle)\n* [.Net/CLR/DLR](https://en.wikipedia.org/wiki/Dynamic_Language_Runtime) (via [Cecil](https://github.com/jbevain/cecil), maybe Mirah too), \n* As a final aim: run **natively**, maybe similar to [Crystal](https://github.com/manastech/crystal), [Vala](https://en.wikipedia.org/wiki/Vala_%28programming_language%29) or RPython\n\nHaving a [self-hosted \"bootstrapped\" compiler](https://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29) is an important mid-term goal.\n\n**precedence**\nOne very hot idea is to allow modifying the language grammar on the fly, at least till a limited extend.\nOne first step would be to make possible setting the precedence of functions.\nThis would enable very natural and sweet mathematical expressions, especially combined with Unicode names:\n```\nclass Complex alias \u2102 (re, im)\n\tto add number x\n\t\t\u2102(this.real+x.real, this.im+x.im)\n\tend\n\talias '+' = add\nend\t\n\u2102.add.precedence=Number.add.precedence-1\n\u012b := \u221a-1\n\u012b + 3\u012b == 4\u012b\n```\nThis would run against the goal to avoid sigil special chars though.\n\n\n\nWhy the new python implementation\n------------------------------------\nWe can **compile** English script / [Angle](https://github.com/pannous/angle/) directly to python byte-code:\nAs opposed to Ruby, Python(3) comes with a very nice and clean abstract syntax tree as well as byte code capabilities preinstalled.\nCompiling is so much nicer & faster than interpreted code.\nAlso the Python execution model is a bit more friendly than the Ruby VM, but both have their [advantages and drawbacks](https://github.com/pannous/cast/blob/master/ruby-vs-python.txt). The biggest advantage of Python is that objects can be given attributes at any time o.x='y'! However pythons limited lamda capabilities are a painful limitation. \n\n\n\"There should be one-- and preferably only one --obvious way to do it\"\nBeautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\t\t\t\n\nFor a background story/vision/philosophy/future of this project read the [DOSSIER](https://github.com/pannous/english-script/tree/master/DOSSIER.md)\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "Apache2 license", "maintainer": "", "maintainer_email": "", "name": "angle", "package_url": "https://pypi.org/project/angle/", "platform": "", "project_url": "https://pypi.org/project/angle/", "project_urls": null, "release_url": "https://pypi.org/project/angle/0.1.9/", "requires_dist": null, "requires_python": "", "summary": "Angle : speakable programming language compiling to python bytecode", "version": "0.1.9" }, "last_serial": 2606505, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "35bb31c34ee08a4cb0bb30174794fb52", "sha256": "ab2d20bc16cc26d6d7c68305a923bb0c68ab5902931e20d0f9902e195303da74" }, "downloads": -1, "filename": "angle-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "35bb31c34ee08a4cb0bb30174794fb52", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 168788, "upload_time": "2017-01-30T10:25:05", "url": "https://files.pythonhosted.org/packages/ca/66/f108275638939665ade5bf8caa9bde38d9f5674eff68de336a7cbd175832/angle-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41a610687832c11b79cf01817010add4", "sha256": "5835b8d21a82432a57d4e293888dd52ab2f0c581361df8d2c643de2b91f6b000" }, "downloads": -1, "filename": "angle-0.1.2.tar.gz", "has_sig": false, "md5_digest": "41a610687832c11b79cf01817010add4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137540, "upload_time": "2017-01-30T10:24:29", "url": "https://files.pythonhosted.org/packages/cb/7f/7129f58526f34cea8d75123145c5b4a6ff2a28e8b6c42dc8638cf63fd2df/angle-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "9173d1cdbf3b2231c59271fc0cb62ad6", "sha256": "9e9b7ffe2527c6d5a21e0ab26bf280945ae989a9b8631dfe90652cc0cae48add" }, "downloads": -1, "filename": "angle-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9173d1cdbf3b2231c59271fc0cb62ad6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 168789, "upload_time": "2017-01-30T10:28:47", "url": "https://files.pythonhosted.org/packages/db/ee/b21fe5d1a7ca5c3177715874ebe75103586d822954c22b9507ef150008e0/angle-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d065301ae15e16f297f5453013e522a6", "sha256": "636b8300e02a6640fbcb4c1d02b1b7e6b3defc4e22394ba2969dfce78a90e264" }, "downloads": -1, "filename": "angle-0.1.3.tar.gz", "has_sig": false, "md5_digest": "d065301ae15e16f297f5453013e522a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137534, "upload_time": "2017-01-30T10:26:58", "url": "https://files.pythonhosted.org/packages/44/0a/060816798017478de0ded33ef03d6253817ff61380e0182c4fd8d3711106/angle-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "1005402c8f3d565abc7dad27841e6f51", "sha256": "8801a54fb36c1ff102cb309ad9ee58dc6bbb0c04965130490461a7af501a1603" }, "downloads": -1, "filename": "angle-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1005402c8f3d565abc7dad27841e6f51", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 168844, "upload_time": "2017-01-30T10:29:55", "url": "https://files.pythonhosted.org/packages/64/ea/da093337ca8206782a105cc3bed410c2f55943945c068fba3a25e6d1014a/angle-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19c98bbd63806edc0bf3dffabf522dc6", "sha256": "6afffb048ac96c04c4edff038cc34c242b5b3e8e0fa285a549fec391a41dc4a8" }, "downloads": -1, "filename": "angle-0.1.4.tar.gz", "has_sig": false, "md5_digest": "19c98bbd63806edc0bf3dffabf522dc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137573, "upload_time": "2017-01-30T10:29:52", "url": "https://files.pythonhosted.org/packages/69/48/93959a122626c0ae670bd715223d570e266c0a5b6607312ec81c575209e1/angle-0.1.4.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "a6b501ae8989e2cfc91615e76a094f47", "sha256": "500622dee481b888237945915a09ce36e47fc814f6a15c46a62d122a4cd18adc" }, "downloads": -1, "filename": "angle-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a6b501ae8989e2cfc91615e76a094f47", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 168926, "upload_time": "2017-01-30T11:54:49", "url": "https://files.pythonhosted.org/packages/3c/c7/81c6571c91e4b43c340f1a156643f9048d74036b4288b7735ab4413ed65f/angle-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a7e40a4c763501449d8410ceebc477d", "sha256": "d11837dbd515e9905b4ff260cc2000811daaea9d0fb4812f5b82d3c0bca79eb6" }, "downloads": -1, "filename": "angle-0.1.7.tar.gz", "has_sig": false, "md5_digest": "8a7e40a4c763501449d8410ceebc477d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137658, "upload_time": "2017-01-30T11:54:46", "url": "https://files.pythonhosted.org/packages/58/94/f415262206fccb55f32c849f913bf778281f5100efc31f2ec5bd8951393b/angle-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "a9f28414c66ba518deedc24359280f7c", "sha256": "3a384969a5cb6b651380cf46510077dc2efa7c2793f58ca6d7c2839cb947e289" }, "downloads": -1, "filename": "angle-0.1.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a9f28414c66ba518deedc24359280f7c", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 168942, "upload_time": "2017-01-30T12:50:56", "url": "https://files.pythonhosted.org/packages/a5/68/35c2b240878718351ba91082fec3deb2b39be12105a1e633e7660c03bf24/angle-0.1.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7ce8b3b292e2b013eade9be7846005e2", "sha256": "18ad46376786659a371d4aed77f7b9da6e06536456f63321825088c98ffe737c" }, "downloads": -1, "filename": "angle-0.1.8.tar.gz", "has_sig": false, "md5_digest": "7ce8b3b292e2b013eade9be7846005e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137661, "upload_time": "2017-01-30T12:50:54", "url": "https://files.pythonhosted.org/packages/92/48/1d07dbd29ffcb68f83734bede9c352e58263a381d41b7cc4885aab050c7d/angle-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "9d78d91d11355cf88800259ff6638fb0", "sha256": "9d6b09703bf191afe2598cc33016e9c732d688d5303ff61770f3d210c0eb3cdc" }, "downloads": -1, "filename": "angle-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d78d91d11355cf88800259ff6638fb0", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 168941, "upload_time": "2017-01-30T12:52:17", "url": "https://files.pythonhosted.org/packages/2e/35/a81e35dbaeca8bd7e39b531ac2a0df56898033b086f996699ad62ab6d582/angle-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "61f402e9a5072a42a7298d7ff4fa0780", "sha256": "158b8d01f13fcba5e34306dd77ca3901ed914d03bc35243e1296daa7a8a591c4" }, "downloads": -1, "filename": "angle-0.1.9.tar.gz", "has_sig": false, "md5_digest": "61f402e9a5072a42a7298d7ff4fa0780", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137669, "upload_time": "2017-01-30T12:52:15", "url": "https://files.pythonhosted.org/packages/0a/26/fb65280fc05942a4c63c59f6b1d87b7c89342c3f9c05c7a2690ff3cd8dfe/angle-0.1.9.tar.gz" } ], "0.1.dev0": [ { "comment_text": "", "digests": { "md5": "72ef322cd26700ad2a12efce0b65fb0b", "sha256": "10e3fc69bbea24002efd475dbbcabf423218801fa7666439ebdea6758b94e124" }, "downloads": -1, "filename": "angle-0.1.dev0-py2-none-any.whl", "has_sig": false, "md5_digest": "72ef322cd26700ad2a12efce0b65fb0b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 168627, "upload_time": "2017-01-30T10:22:49", "url": "https://files.pythonhosted.org/packages/55/e7/a9b162d037acc361105fec8e2259990438abd16c13d54033553e07b5215e/angle-0.1.dev0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b62851f88e5ae0fcd71b7f3f987c691", "sha256": "f60c9f26243a071edcccd73dc2d977ea82c4ca229a28ae04bbef2ee0ab013d31" }, "downloads": -1, "filename": "angle-0.1.dev0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8b62851f88e5ae0fcd71b7f3f987c691", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 168848, "upload_time": "2017-01-30T10:22:23", "url": "https://files.pythonhosted.org/packages/3c/7f/27b856b9ad3a333ac25220819121a7dd91be372ed5c97256ab8ddc719341/angle-0.1.dev0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bba8c42e54d93136a6e2becce752303a", "sha256": "d582f30b3cebcc44daf8c30d61aa74130f9de56f6a99f60ffb2e3832233ee472" }, "downloads": -1, "filename": "angle-0.1.dev0.tar.gz", "has_sig": false, "md5_digest": "bba8c42e54d93136a6e2becce752303a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137567, "upload_time": "2017-01-30T10:22:20", "url": "https://files.pythonhosted.org/packages/15/69/123da038a7e0a9a5add121d2e62d747629043df692ea23f36c500c29e3a3/angle-0.1.dev0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9d78d91d11355cf88800259ff6638fb0", "sha256": "9d6b09703bf191afe2598cc33016e9c732d688d5303ff61770f3d210c0eb3cdc" }, "downloads": -1, "filename": "angle-0.1.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d78d91d11355cf88800259ff6638fb0", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 168941, "upload_time": "2017-01-30T12:52:17", "url": "https://files.pythonhosted.org/packages/2e/35/a81e35dbaeca8bd7e39b531ac2a0df56898033b086f996699ad62ab6d582/angle-0.1.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "61f402e9a5072a42a7298d7ff4fa0780", "sha256": "158b8d01f13fcba5e34306dd77ca3901ed914d03bc35243e1296daa7a8a591c4" }, "downloads": -1, "filename": "angle-0.1.9.tar.gz", "has_sig": false, "md5_digest": "61f402e9a5072a42a7298d7ff4fa0780", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 137669, "upload_time": "2017-01-30T12:52:15", "url": "https://files.pythonhosted.org/packages/0a/26/fb65280fc05942a4c63c59f6b1d87b7c89342c3f9c05c7a2690ff3cd8dfe/angle-0.1.9.tar.gz" } ] }