Nyetan
The only unpractical part I'd noticed was its perspective on reusing components, as seen in this overview under 'Nesting' [1]. That bit of explicit routing aside, may I ask what dissuaded you from using the language seriously?
[1]: https://gist.github.com/evancz/2b2ba366cae1887fe621#nesting
Make up your own mind as to whether you want this to be your future.
Assumptions:
1 Mbit/s video streams
Data purchased in 5GB ($35) chunks. Note that, if purchased in 500 MB chunks, one can watch 15 minutes of Netflix, which is laughable and therefore not presented due to shock value.
[1]: https://web.archive.org/web/20121220034331/http://www.bell.c...?
[2]: https://web.archive.org/web/20130102055752/http://www.bell.c...
[3]:http://www.theglobeandmail.com/report-on-business/bell-denie...
* Not having to worry about trivial memory/resource allocations
ARC - Lifetimes:
* Can blow up hilariously with refcount cycles
* Incurs a runtime overhead
Lifetimes - ARC:
* For the subset of allocation patterns it handles, it does so with zero runtime overhead (i.e. invalid programs do not compile, invalid = leaks memory)
* Use extends beyond just memory allocation/deallocation (see the concurrency docs [1] for example) (note that Mozilla wrote Rust to help write Servo [2], their prototype highly-parallel browser engine, so this use case was a target from the getgo)
* Cannot encode all data structures a GC can (hence why reference counting is part of the stdlib [3])
[1]: https://doc.rust-lang.org/book/concurrency.html
[1]:https://en.wikipedia.org/wiki/Tracing_just-in-time_compilati...
For the specific problem of python, consider using 2to3.py to catch most problems (it'll fix up minor API changes and the like). It might help :)
Although being pessimistic about technology is my pass time, I'd imagine that breaking backwards compatibility is not done for business purposes. Two points of data on that line of reasoning: 1. C has a number of active, popular compilers (gcc, clang and msvcc, but I haven't kept up) which keeps maintainers from individually removing _too_ much functionality -- it's typically a poor business decision to remove compatibility bullet points from your product. Python (excluding pypy since it makes the typically poor business decision to remove compatibility bullet points) and F# are single-major implementation languages, giving them a fair bit more freedom to experiment. 2. Off the top of my head, Java and C# have compatibility going back many, many years. Considering that they've huge corporate backers that would have a lot of incentive to deprecate functionality continuously, that seems a good counterexample. A point could be made regarding feature addition rather than subtraction, but similarly that applies to C++ ...
[1]: http://www.bloomberg.com/news/features/2015-07-23/how-berlin...
2. The similarity with openshift is due to their Marketplace [1], but it pretty much ends there. Sandstorm as well for much the same reason (easy deployments of premade services).
3. Mmhm, makes sense.
As for documentation changes, please highlight what improvements your product makes to the status quo! The 'DEEP for Developers' section tells me that it adds abstraction on top of AWS' model services, but beyond that, I don't see any improvement to working on the bare metal, so to speak. Like, Sandstorm [2] (sorry, just heard about them so they're on my mind right now) says that they handle authentication themselves. That's wonderful; I hate reimplementing auth for every project! Or even PyPy [3]: I _could_ use CPython, but their product runs faster and uses less memory. Why should I bother to learn DEEP and add another level of dependency to a project?
[1]: https://marketplace.openshift.com
[2]: https://sandstorm.io/#developers
[3]: http://pypy.org/
As I understand it (still pretty new to the industry), we're supposed to give realistic estimates for a product's completion, considering that 1. requirements are always incomplete and 2. unexpected complications will always arise. 'Done' is a moving target, and part of its estimation is ensuring the product is deliverable at every stage (with varying degrees of completeness), regardless of whether how many times everything goes pear shaped.
1. I have no idea what it is. DIY (presumably) microservices? And, there's a way to use AWS without servers (is this a reference to Lambda?) The title of your product is 'Digital Enterprise End-to-end Platform', which looks impressive but on further inspection appears meaningless.
2. Reading further into your github page and looking at the DEEP marketplace, I think you're selling software-as-a-service deployments? Something like Sandstorm or Openshift, I'd imagine.
3. Aah, okay, so you're making an abstraction layer on top of AWS -- but it doesn't seem like that permits any portability between cloud platforms. Is the only benefit to using your system easy deployment onto Amazon's product?
Edit: drat, and the site you can use to get more stats: http://webappa.cdc.gov/sasweb/ncipc/leadcaus10_us.html
[1]: http://tinyurl.com/qfqn5oz
The services in question are built with a hodge-podge of shell scripts and build tools, so getting them all to compile locally is a challenge, let alone deploying them. My hope was that containerizing the builds would isolate any configuration problems, and that containerizing the deployed services would cut down on outages by permitting trivial rollbacks (say, by snapshotting all the service containers before each deploy and merely restoring them should a deployment fail). Of course, all of the above could be fixed by traditional means (e.g. rewriting the build system with a single, standard tool; streamlining the deployment process, etc.), but it seemed like Docker could solve 80% of the problems while easing the implementation of the proper solutions down the line.
Considering the above, do you still think Docker's a poor fit for business that aren't building hosting systems? Oh, and any nuggets of wisdom you could throw to a newcomer to the industry? :)