Anyone use AOLServer recently?
aolserver.github.com
aolserver.github.com
Aolserver is reliable and efficient. Tcl is reasonably efficient for most purposes (which is to say, dog slow but who cares?) though we drop down to C++ in many cases where Tcl might not be fast enough.
Tcl is a powerful but strange language. The heavy dependence on strings in its implementation is problematic, to say the least. An object of a particular type may be converted to a string representation, deleted in its original form, and then resurrected from the string representation later. That's not exotic functionality; it's normal in ordinary usage of the language, and it would invalidate the use of Tcl's reference counting for resource management. Therefore, when you define a new type that manages a resource (a resource such as a "future" object returned from C++ land, when you're waiting for an asynchronous operation to complete) you have to be sure NOT to implement working object->string and string->object conversion methods on that type. You have to implement those methods to signal an error to ensure that the object is never stored as a string and then resurrected later.
That's all fine and dandy, but that means you can't store objects of that type in a list, because a Tcl list is a string built from the string representations of its members. In case you were wondering how an object might be converted to a string, deleted, and then resurrected later from its string form, that's exactly what happens when you add an object to a list, dereference the original instance, and then retrieve that item from the list. Truly weird.
So what's strange is not the representation but how it's not hidden from the programmer.
As to "deep changes to an old language": Tcl is actively maintained and still evolving. Tcl8.5 introduced anonymous functions among many other changes; Tcl8.6 (in beta) has a completely new engine (somewhat similar to py's stackless), coroutines and tailcalls, a builtin OO system, and many other enhancements.
That's a hell of a thing to have to document, so I think it was appropriate to have the string conversion functions raise an error. When I worked on it, the code was running in Tcl 8.3 or 8.4, and I was able to reproduce the round trip through the string reliably with exactly the operations I described. I may have printed the list to the console as part of the test, and if that qualifies as "treating the list as a non-list" it pretty well proves the need to assume the worst. (It's also possible I was using older interfaces, even 10+ year old interfaces, since I kept my code consistent with the existing style in our software, but it's pretty harsh to say "your fault" if the interfaces for the most basic type in the language changed between versions 7 and 8, just saying.)
Tcl8 introduced the Tcl_Obj and a completely new api to deal with them. The old string-based interfaces were kept in place, because we value back compat a lot. They are flagged as deprecated in the manual pages and should only be used by legacy Tcl7 code, or when performance is known not to be an issue.
As to printing the list to the console: that should compute a string representation of the list object without discarding the representation as a list.
I had no complaints about AOLServer. It was fast, reliable, small, well-documented, and did everything we needed it to do. I like Apache better, of course, because Apache can do vastly more...so many more developers just leads to more code being written. But, I never lost any sleep because of AOLServer, which as an IT guy, is my gold standard for good software.
However they tend to be deployments based on work done previously (the dreaded "legacy" code) and for which it doesn't make sense to spend more money to rewrite the site in another language.
For example, one client is still running code originally written in 2002-2003, they just updated the templates.
Another is using the OpenACS.org codebase and is actively developing custom solutions for clients, where the client doesn't care what the technology is underneath the solution.
I personally think the ticket-tracker in OpenACS, were it cleaned up a bit more, would make an excellent lightweight ticket tracker hosted service for many small dev teams.
It's nuts. TCL's syntax is extremely simple, but overall appears to be really powerful.
Still trying to wrap my head around some of the more advanced things, but it apparently scales very well and has great community/group aspects built in.
The included ticket tracker makes for an unbelievable customer service platform, too.
If nothing else, sounds like round 26339132 of the Tcl marketing "fail": company complains about not finding people, while simultaneously hiding themselves from the community of the product they're using, and hiding the fact that they're using the technology in question.
One of the most frustrating things of the new job is only finding articles/posts/whatever from 10 years ago.
I'd assume it's no coincidence that one of the ArsDigita's problem sets for OpenACS involved a reservation system with OpenACS and PL/PGSQL.
As far as performance, I found it to be somewhat akin to Apache + a moderate CMS. It scaled better than bare apache which at the time was a large consideration. Only one of the projects ever hit a point where scalability became a concern.
I think Philip Greenspun's thinking on CMS design and entrepreneurship had quite an impact on my thought processes.
OpenACS's code - not really a stellar example of well written code. Functional, but messy.
<P ALIGN=RIGHT><SMALL><I>AOLserver/4.5.1 on http://127.0.0.1:7200</I></SMALL></P>
689 ~ % curl -i bit.ly/test
HTTP/1.1 301 Moved
Server: nginx/0.7.67
Are they using AOLServer behind nginx? That seems bizarre.Thus the strategy is to use nginx to serve static content like .css .js .png .jpg .gif, plus grab the dynamic content from AOLserver and buffer it out to the order of magnitude slower clients (10Mbps client vs 100Mbps or 1Gbps link between nginx and AOLserver).
My main setup nowadays is HAPRoxy -> nginx load balancers -> Unicorns.
The one gripe I have is that the tuning parameters are not well documented (especially post 4.5.0). You have to study the source in order to dig out all the parameters you need to tweak in order to really make the server sing.
That's the Tcl style:
https://github.com/das/tcltk/blob/master/tcl/generic/tclStri...
Tcl's C code is very nice.
Really fun weekend.
OpenACS.org and dotLRN.org are the sites for the OpenACS and .LRN (education oriented) toolkits that run on top of AOLserver.