But how does this fit with a tree structure. For example, should âcomment5â be associated with the âbâ variable node, or the #foo:bar: message, or the sequence node that contains the #foo:bar: message, or the block or method node that contains the sequence node. You can choose, but only the writer of the comment can tell if you are right. How tokens solves this problem? I think that we do not really care one objective is to be able to recreate the code from the tree. I worked on a project in C where the guys want to know if the code is well commented and we built heuristics to associate the comments to the closest node.
We do not have a structure that is responsible for that order. We could have two entries in AST node; one discrete where you can cherrypick what you want receiver arguments selector and one that represent the node placement.
Now when we emit bytecode comment would do nothing.
How having them as token helps? You will visit the receiver and check if it has a token and place it. I found that strange that comments are not part of the code tree as first class citizen. Tokens are essentially what they are now â although they arenât in the RBToken hierarchy. So far, the only advantages that Iâve heard you mention for nodes are visiting nodes and having a parent. The example above shows why neither of these are valid â you canât determine what is the correct parent for the comment.
Anyway, I think comments should not be in code, but rather on code. When you add a comment, you would select a node or nodes that it applied to. When viewing a method, the comment could be displayed inline (like we have now), off to the side like reviewer comments in word processors, or a highlight that when you move the mouse over would show in a popup. Yes you are right.
Furthermore, there could be different comment types. For example, one could have design comments, todo/review comments, example code comments, bug fix comments, etc. The code view could be customized to show each one differently. Comments could have pictures and other non-string items. It would be really nice to have that. I would put optional type declaration (and they should be optional). Now for the main comment of a method I would not separate it because this is too important. Having comments as objects outside the methodâs source string would allow them to be easily searched. For example, someone could search for a certain bug fix. Currently, if a bug fix id is in a comment, it requires a full text search of all method text. This is slow. Therefore, many companies start adding these bug fix ids to the code as symbols so that a senders search will work. Iâve seen companies that put symbols like #Fix12345 as statements inside of methods. However, this doesnât work for Smalltalkâs that remove unused literals, so in those cases they do something like adding a statement like #Fix12345 == #Fix12345 which generally isnât optimized away. :) In addition to comments, I believe that annotations (not primitives) should be on code instead of in code like they are now. With a good implementation one could unify the concepts of comments and annotations. Yes this is interesting. Now the problem with annotations is that you have two kinds; - the ones that decorate - the ones that change or define the semantics (for those ones I would not separate) them
Furthermore, if comments are nodes, how do they affect all of the code rewriting and validation that is part of the RB and its rewrite tools With comments cannot act as nullobjects for such operation? Yes, someone could spend time making all of this work with the existing code. However, why not fix the real problem in that comments and methods should not be a single string, but rather objects.
Marcus did that during his phd and he blew up memory. So after we got a guy that worked on tree compression but he never finished. Because this is the part that makes all these ideas flying or not. Anyway thanks for the discussion. It lets me think and I learn something. I improved the class comment. Because if it would have been good in the first place I would not even ask the question.
John Brant