Friday, April 1, 2011

Re: what makes c++ templates difficult to master

Here are some of the reasons I now see c++ templates as monstrous.

1) you can put arbitrarily complex types into the angle bracket when you instantiate a template. Example - You can put an array of multimap of pointer to member functions in there

2) within a class template, you can create typedef involving the "T". Common in STL. I feel typedef is supposed to simplify declarations but often hides hideous complexities beneath the carpet. The complexity doesn't disappear so when things go wrong, you need to lift the carpet and analyze the dirt beneath. Things get even worse when typdef is defined locally in a class template, when the T is an unknown type.

3) when templates meet inheritance. The syntax is too complex for me to grasp. I don't know if developers enjoy deriving from a class template while adding additional type params  (like adding T2 to an existing T).

What's your view on the complexity of templates?



Sooner or later if we were to investigate these "corners" of the C++ template system, we must ask "how is template instantiation implemented". Is it code generation? If it is, then I actually feel macro expansion is much, much simpler and better understood than templates, though less powerful.

I feel without templates, c++ is at least 50% more complex than java, thanks to things like pointer to pointer to pointer (and reference to pointer to pointer), function pointers, pointer to member function, assignment/copy-ctor overloads, memory management, casts, pass-by-value vs reference and when each applies.

On top of those, templates add so much complexity that I feel most wall Street developers aren't competent to write templates. Wall Street developers can throw together large java/c# systems because those languages are simpler and more strict. Those languages check a lot of things for us at compile time, and disallow many things and take cares of many things at run time, so it's safer to be careless.


On Fri, Apr 1, 2011 at 1:52 AM, raiserchu  wrote:
Hmmm, I don't quite remember. that was 10+ years ago. Since you have also realized that, then that must be the reason (that you realized). It's easier to use than write. I guess just a lot of rules to remember and follow and a lot of cases. I like simple rules and simple cases/syntax, treat humans like human.
 

No comments:

Total Pageviews

my favorite topics (labels)

_fuxi (302) _misLabel (13) _orig? (3) _rm (2) _vague (2) clarified (58) cpp (39) cpp_const (22) cpp_real (76) cpp/java/c# (101) cppBig4 (54) cppSmartPtr (35) cppSTL (33) cppSTL_itr (27) cppSTL_real (26) cppTemplate (28) creditMkt (14) db (65) db_sybase (43) deepUnder (31) dotnet (20) ECN (27) econ/bank` (36) fin/sys_misc (43) finGreek (34) finReal (45) finRisk (30) finTechDesign (46) finTechMisc (32) finVol (66) FixedIncom (28) fMath (7) fMathOption (33) fMathStoch (67) forex (39) gr8IV_Q (46) GTD_skill (15) GUI_event (30) inMemDB (42) intuit_math (41) intuitFinance (57) javaMisc (68) javaServerSide (13) lambda/delegate (22) marketData (28) math (10) mathStat (55) memIssue (8) memMgmt (66) metaProgram` (6) OO_Design (84) original_content (749) polymorphic/vptr (40) productive (21) ptr/ref (48) py (28) reflect (8) script`/unix (82) socket/stream (39) subquery/join (30) subvert (13) swing/wpf (9) sysProgram` (16) thread (164) thread_CAS (15) thread_cpp (28) Thread* (22) timeSaver (80) transactional (23) tune (24) tuneDB (40) tuneLatency (30) z_ajax (9) z_algoDataStruct (41) z_arch (26) z_arch_job (27) z_automateTest (17) z_autoTrad` (19) z_bestPractice (39) z_bold (83) z_bondMath (35) z_book (18) z_boost (19) z_byRef^Val (32) z_c#GUI (43) z_c#misc (80) z_cast/convert (28) z_container (67) z_cStr/arr (39) z_Favorite* (8) z_FIX (15) z_forex (48) z_fwd_Deal (18) z_gz=job (33) z_gzBig20 (13) z_gzMgr (13) z_gzPain (20) z_gzThreat (19) z_hib (19) z_IDE (52) z_ikm (5) z_IR_misc (36) z_IRS (26) z_javaWeb (28) z_jdbc (10) z_jobFinTech (46) z_jobHunt (20) z_jobRealXp (10) z_jobStrength (15) z_jobUS^asia (27) z_letter (42) z_linq (10) z_memberHid` (11) z_MOM (54) z_nestedClass (5) z_oq (24) z_PCP (12) z_pearl (1) z_php (20) z_prodSupport (7) z_py (31) z_quant (14) z_regex (8) z_rv (38) z_skillist (48) z_slic`Problem (6) z_SOA (14) z_spring (25) z_src_code (8) z_swingMisc (50) z_swingTable (26) z_unpublish (2) z_VBA/Excel (8) z_windoz (17) z_wpfCommand (9)

About Me

New York (Time Square), NY, United States
http://www.linkedin.com/in/tanbin