Merge commit 'remotes/trunk'
[amiethrift.git] / lib / erl / TODO
blob03384fb1707c7972a865e7222f6421d5b90a753f
1 make thrift a proper OTP application
2  * app-wide configuration (do DNS lookups?)
3  * default protocols / transports (forget this factory business)
4  * factor for elegance
6 tutorial client
8 make all methods effectful, remove the special casing (optionally, implement monads for Erlang)
10 change objects from {record_tag, ...} to {oop_object, {record_tag, ...}, other_useful_stuff}
11 so 1) we know exactly what's an object (can write is_object/1) e.g.
12       is the tuple {tTransportException, ...} an object or a tuple that happens to start with that atom?
13       we can't check this using is_record/2 without include every header file
14       also, this makes it easy to pick objects out of deep tuples
15    2) we can build more functionality into oop later if need be
16       carry around the class/superclasses so is_a(Object, ClassOrSuperclass) is easy
17    3) maybe hack up io:format and friends to run objects through oop:inspect automatically
19 Currently we can't distingish a method exiting in the middle with an undef or function_clause from a method not being defined in a module.  Big example: if the generated code can't be called at tErlProcessor.erl:63, it will exit with a missing_method not because tErlProcessor:process/3 is undefined, but because GP:process/3 is undefined, but the error makes it seem like the former happened.  The oop code needs to be smarter -- I think it's possible to either a) hook into Erlang's missing function handler or b) do some introspection to determine directly whether a function is defined, rather than trying to infer from the exit.
21 test suites
23 move as much (program logic) as possible out of thrift_logger
25 make thrift_logger 100% robust
27 thrift_logger detects term width?
29 undisgustify codegen
31 move away from thrift_oop_server shim to straight-up gen_servers
33 move away from Factories
35 move away from ?L0, ?M0, and friends ... make calls in oop or individual modules (like gen_servers should be)