Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/papers/general/response

    r3d60c08 rcfc3e0f  
    6161judithbishop@outlook.com
    6262
    63 
    64 We have attempted to response to all the issues raised by the Editor and referee's comments. For two
    65 of the issues, we have "pushed back", with an explanation. Specifically, moving the related work
    66 forward, and moving text from Section 9 into the captions of Table2 and Figure 10.  Our reasons for
    67 not making these changes are address below. Finally, as pointed out below, there are a couple of
    68 issues with the Wiley LaTeX macros that we worked around as best as possible.
    69 
    70    The paper is long by SPE standards (33 pages). We have a maximum of 40 pages. Please do not
    71    extend the paper beyond 35 pages. If necessary, find ways to cut the examples or text. If you
    72    have an accompanying website for the system where some examples are stored, please mention it.
    73 
    74 The paper is 35 pages using the supplied Wiley LaTeX macros.
    75 
    76 
    7763Referee(s)' Comments to Author:
    7864
    7965Reviewing: 1
    8066
    81    Most of the content in Section 10 RELATED WORK appears to belong to Section 1 INTRODUCTION as a
    82    Subsection or as a new Section after Section 1. (Please also see #4.1 below.) Remaining
    83    discussion that cannot be moved earlier can become a DISCUSSION Section or a Subsection within
    84    the last Section of the paper.
    85 
    86 Sometimes it is appropriate to put related work at the start of a paper and sometimes at the
    87 end. For this paper, it seems appropriate to put the related work at the end of the paper. The
    88 purpose of the related work in this paper is two fold: to introduce prior work and to contrast it
    89 with Cforall.  Only at the end of the paper does the reader have sufficient knowledge about Cforall
    90 to make detailed contrasts with other programming languages possible. If the related work is moved
    91 to the end of the introduction, the reader knows nothing about Cforall so talking about other
    92 programming languages in isolation makes little sense, especially non-C-related languages, like
    93 Java, Go, Rust, Haskell. We see no easy way to separate the related work into a general discussion
    94 at the start and a specific discussion at the end. We explicitly attempt to deal with the reader's
    95 anticipation at the end of the introduction:
    96 
    97  Finally, it is impossible to describe a programming language without usages before definitions.
    98  Therefore, syntax and semantics appear before explanations; hence, patience is necessary until
    99  details are presented.
    100 
    101 
    102    2.1 More information should be moved from the text and added to Figure 10 and Table 2 so that
    103    readers can understand the comparison quickly. Imagine a reader read the summary and jump
    104    directly to these two display elements. Questions would be raised about the binary size and pop
    105    pair result of Cforall and it would take time to find answers in the text.
    106 
    107 This suggestion is an alternative writing style. The experiment is complex enough that it is
    108 unlikely a reader could jump to the table/graph and understand the experiment without putting a
    109 substantive amount of the text from Section 9 into the table and figure, which the reader then has
    110 to read anyway.  In fact, we prefer a writing style where the reader does not have to look at the
    111 table/figure to understand the experiment and the results, i.e., the table/figure are only there to
    112 complement the discussion.
    113 
    114 
    115    2.2 The pronunciation of ("C-for-all") should be provided in the summary (page 1 line 22) so that
    116    people not having an access to the full-text can see it.
     67   Most of the content in Section 10 RELATED WORK appears to belong to Section
     68   1 INTRODUCTION as a Subsection or as a new Section after Section 1. (Please
     69   also see #4.1 below.) Remaining discussion that cannot be moved earlier can
     70   become a DISCUSSION Section or a Subsection within the last Section of the
     71   paper.
     72
     73Sometimes it is appropriate to put related work at the start of a paper and
     74sometimes at the end. For this paper, it seems appropriate to put the related
     75work at the end of the paper. The purpose of the related work in this paper is
     76two fold: to introduce prior work and to contrast it with Cforall.  Only at the
     77end of the paper does the reader have sufficient knowledge about Cforall to
     78make detailed contrasts with other programming languages possible. If the
     79related work is moved to the end of the introduction, the reader knows nothing
     80about Cforall so talking about other programming languages in isolation makes
     81little sense, especially non-C-related languages, like Java, Go, Rust,
     82Haskell. We see no easy way to separate the related work into a general
     83discussion at the start and a specific discussion at the end. We explicitly
     84attempt to deal with the reader's anticipation at the end of the introduction:
     85
     86 Finally, it is impossible to describe a programming language without usages
     87 before definitions.  Therefore, syntax and semantics appear before
     88 explanations; hence, patience is necessary until details are presented.
     89
     90
     91   2. Presentation
     92
     93   2.1 More information should be moved from the text and added to Figure 10 and
     94   Table 2 so that readers can understand the comparison quickly. Imagine a reader
     95   read the summary and jump directly to these two display elements. Questions
     96   would be raised about the binary size and pop pair result of Cforall and it
     97   would take time to find answers in the text.
     98
     99This suggestion is an alternative writing style. The experiment is complex
     100enough that it is unlikely a reader could jump to the table/graph and
     101understand the experiment without putting a substantive amount of the text from
     102Section 9 into the table and figure, which the reader then has to read anyway.
     103In fact, we prefer a writing style where the reader does not have to look at
     104the table/figure to understand the experiment and the results, i.e., the
     105table/figure are only there to complement the discussion.
     106
     107   2.2 The pronunciation of ("C-for-all") should be provided in the summary
     108   (page 1 line 22) so that people not having an access to the full-text can
     109   see it.
    117110
    118111Done.
    119112
    120 
    121    2.3 Error comment in the code should be written with the same capitalization and it will be
    122    helpful if you say specifically compilation error or runtime error. (Please see attached
    123    annotated manuscript.)
    124 
    125 Fixed. All errors in the paper are compilation errors because they are related to the type system.
    126 
    127 
    128    2.4 It is possible to provide a bit more information in Appendix A e.g. how many lines/bytes of
    129    code and some details about software/hardware can be added/moved here. The aim is to provide
    130    sufficient information for readers to reproduce the results and to appreciate the context of the
    131    comparison.
    132 
    133 Table 2 indicates the source-code size in lines of code. The third paragraph of Section 9 gives
    134 precise details of the software/hardware used in the experiments.
     113   2.3 Error comment in the code should be written with the same capitalization
     114   and it will be helpful if you say specifically compilation error or runtime
     115   error. (Please see attached annotated manuscript.)
     116
     117Fixed. All errors in the paper are compilation errors because they are related
     118to the type system.
     119
     120   2.4 It is possible to provide a bit more information in Appendix A e.g. how
     121   many lines/bytes of code and some details about software/hardware can be
     122   added/moved here. The aim is to provide sufficient information for readers
     123   to reproduce the results and to appreciate the context of the comparison.
     124
     125Table 2 indicates the source-code size in lines of code. The third paragraph of
     126Section 9 gives precise details of the software/hardware used in the
     127experiments.
    135128
    136129   3. Practical information about the work
    137130
    138    There are three separate pieces of information on pages 2 ("All features discussed in this paper
    139    are working, unless otherwise stated as under construction."),
     131   There are three separate pieces of information on pages 2 ("All features
     132   discussed in this paper are working, unless otherwise stated as under
     133   construction."),
    140134
    141135This sentence is replace with:
    142136
    143  All languages features discussed in this paper are working, except some advanced exception-handling
    144  features.
     137 All languages features discussed in this paper are working, except some
     138 advanced exception-handling features.
    145139
    146140and Section 5.4 Exception Handling states:
    147141
    148  The following framework for Cforall exception handling is in place, excluding some runtime
    149  type-information and virtual functions.
    150 
     142 The following framework for Cforall exception handling is in place, excluding
     143 some runtime type-information and virtual functions.
    151144
    152145   page 4 ("Under construction is a mechanism to distribute...")
     
    154147The feature on page 4 is now complete.
    155148
    156 
    157149   and page 33 ("There is ongoing work on a wide range ... ")
    158150
    159151This sentence is replace to indicate the ongoing work is future work.
    160152
    161  While all examples in the paper compile and run, a public beta-release of Cforall will take 6-8
    162  months to reduce compilation time, provide better debugging, and add a few more libraries.  There
    163  is also new work on a number of Cforall features, including arrays with size, runtime
    164  type-information, virtual functions, user-defined conversions, and modules.
    165 
    166 
    167    My recommendation is to move them to an appendix so that the length is preserved.
    168 
    169 There is nothing to move into an appendix, except 3 sentences. We do not intend to discuss these
    170 items in this paper.
    171 
    172 
    173    3.1 Any under construction work (only small part of page 4) should not be mingled into the main
    174    part of the manuscript.
     153 While all examples in the paper compile and run, a public beta-release of
     154 Cforall will take 6-8 months to reduce compilation time, provide better
     155 debugging, and add a few more libraries.  There is also new work on a number
     156 of Cforall features, including arrays with size, runtime type-information,
     157 virtual functions, user-defined conversions, and modules.
     158
     159   My recommendation is to move them to an appendix so that the length is
     160   preserved.
     161
     162There is nothing to move into an appendix, except 3 sentences. We do not intend
     163to discuss these items in this paper.
     164
     165   3.1 Any under construction work (only small part of page 4) should not be
     166   mingled into the main part of the manuscript.
    175167
    176168See above.
    177169
    178 
    179    3.2 Instructions on how to access/use the working functionality of Cforall should be given.
    180 
    181 We will indicate release of Cforall in a public location, when we believe the code base is
    182 acceptable. In the interim, we have made public all the experimental code from section 9, and there
    183 is a reference in the paper to access this code. We can make a private beta-copy of Cforall
    184 available to the SP&E editor for distribution to the referees so they can verify our claims.
    185 
    186    3.3 Planned work should be given a specific time of completion/release not just "8-12 months".
    187 
    188 Software development is not a rigorous engineering discipline. Given our small research
    189 development-team and the size of the project, we cannot give a specific time for completion of
    190 anything associated with the project. Having said that, we have reduced our expected time for
    191 Cforall release to 6-8 months as work is progressing well.
    192 
    193 
    194    4.1 The impression after reading Section 1 INTRODUCTION is that the referencing is poor. It is
    195    not until Section 10 RELATED WORK where majority of the prior literature are discussed. Please
    196    consider moving the content and improve citations - at least cite all main variations of C
    197    languages.
     170   3.2 Instructions on how to access/use the working functionality of Cforall
     171   should be given.
     172
     173We will indicate release of Cforall in a public location, when we believe the
     174code base is acceptable. In the interim, we have made public all the
     175experimental code from section 9, and there is a reference in the paper to
     176access this code. We can make a private beta-copy of Cforall available to the
     177SP&E editor for distribution to the referees so they can verify our claims.
     178
     179   3.3 Planned work should be given a specific time of completion/release not
     180   just "8-12 months".
     181
     182Software development is not rigorous engineering discipline. Given our small
     183research development-team and the size of the project, we cannot give a
     184specific time for completion of anything associated with the project. Having
     185said that, we have reduced our expected time for Cforall release to 6-8 months
     186as work is progressing well.
     187
     188
     189   4. Citations
     190
     191   4.1 The impression after reading Section 1 INTRODUCTION is that the
     192   referencing is poor. It is not until Section 10 RELATED WORK where majority
     193   of the prior literature are discussed. Please consider moving the content
     194   and improve citations - at least cite all main variations of C languages.
    198195
    199196See point 1.
    200197
    201 
    202    4.2 I also would like to see citations at these specific places: Page 2 after Phil Karlton, page
    203    22 after const hell problem.
     198   4.2 I also would like to see citations at these specific places: Page 2
     199   after Phil Karlton, page 22 after const hell problem.
    204200
    205201The Phil-Karlton quote is an urban legend without a specific academic citation:
     
    209205The term "const hell" is replaced with "const poisoning" with a citation.
    210206
    211 
    212    5.1 Footnotes and citations will need to have different schemes - number and perhaps letter.
    213 
    214 Switched to letters. SP&E uses symbol footnotes but this macros fails with their macros:
    215 
    216  \renewcommand*{\thefootnote}{\fnsymbol{footnote}}
    217 
    218 
    219    5.2 Many references are not properly formatted e.g. date is incomplete, extra/missing white
    220    spaces, extra dots, use of page number or section number as part of superscript ref
    221    number. Please refer to attached document.
    222 
    223 Agreed. The bibtex BST macros are at fault. I have fixed some issues but I cannot fix them all as my
    224 BST macro-knowledge is limited.
    225 
     207   5.1 Footnotes and citations will need to have different schemes - number and
     208   perhaps letter.
     209
     210The latex macros from Wiley generate those symbols. I assume during
     211copy-editing the format is changed to suit the journal format.
     212
     213   5.2 Many references are not properly formatted e.g. date is incomplete,
     214   extra/missing white spaces, extra dots, use of page number or section number
     215   as part of superscript ref number. Please refer to attached document.
     216
     217Agreed. The bibtex BST macros are at fault. I have fixed some issues but I
     218cannot fix them all as my BST macro-knowledge is limited.
    226219
    227220   5.3 Typos:
     
    240233
    241234   6. Conflict of interest
    242    I see that the work is partially supported by Huawei. Perhaps statement about any presence or
    243    absence of conflicts of interest should be explicitly added. Please get a clear direction on this
    244    from the editor of the journal.
    245 
    246 The paper now states the project is open-source, hence there is no conflict of interest with the
    247 funding received from Huawei.
     235   I see that the work is partially supported by Huawei. Perhaps statement
     236   about any presence or absence of conflicts of interest should be explicitly
     237   added. Please get a clear direction on this from the editor of the journal.
     238
     239The paper now states the project is open-source, hence there is no conflict of
     240interest with the funding received from Huawei.
    248241
    249242
     
    252245Comments to the Author
    253246
    254    Overloading requires the compiler to mangle a function's signature into its name in the object
    255    file.  I'm pretty sure that this will complicate the build process of mixed Cforall/C projects.
    256 
    257 There is no complexity with building Cforall/C programs, and there is an existence proof because C++
    258 has name mangling for overloading and has no problem interacting with C.
    259 
    260 
    261    I found the evaluation underwhelming.  There were only ~200 LoC ported from C to Cforall.  This
    262    is too less to encounter potential caveats Cforall's type system might impose.
    263 
    264 We have clarified that the evaluation is not for the type system, but rather the underlying
    265 implementation approach for the parametric polymorphism. Section 9 now starts:
    266 
    267  Cforall adds parametric polymorphism to C.  A runtime evaluation is performed to compare the cost
    268  of alternative styles of polymorphism.  The goal is to compare just the underlying mechanism for
    269  implementing different kinds of polymorphism.
    270 
    271 and ends with:
    272 
    273  We conjecture these results scale across most generic data-types as the underlying polymorphic
    274  implement is constant.
    275  
    276 
    277    Also, how is the compiler implemented?  I guess, Cforall is a source-to-source compiler (from
    278    Cforall to C).  But this is left in the dark.  What features are actually implemented?
    279 
    280 The following paragraph has been added to the introduction to address this comment:
    281 
    282  All languages features discussed in this paper are working, except some advanced exception-handling
    283  features.  Not discussed in this paper are the integrated concurrency-constructs and user-level
    284  threading-library~\cite{Delisle18}.  Cforall is an open-source project implemented as an
    285  source-to-source translator from Cforall to the gcc-dialect of C~\cite{GCCExtensions}, allowing it
    286  to leverage the portability and code optimizations provided by gcc, meeting goals (1)--(3).
    287  Ultimately, a compiler is necessary for advanced features and optimal performance.  The Cforall
    288  translator is 200+ files and 46,000+ lines of code written in C/C++.  Starting with a translator
    289  versus a compiler makes it easier and faster to generate and debug C object-code rather than
    290  intermediate, assembler or machine code.  The translator design is based on the visitor pattern,
    291  allowing multiple passes over the abstract code-tree, which works well for incrementally adding new
    292  feature through additional visitor passes.  At the heart of the translator is the type resolver,
    293  which handles the polymorphic routine/type overload-resolution.  The Cforall runtime system is 100+
    294  files and 11,000+ lines of code, written in Cforall.  Currently, the Cforall runtime is the largest
    295  user of Cforall providing a vehicle to test the language features and implementation.  The Cforall
    296  tests are 290+ files and 27,000+ lines of code.  The tests illustrate syntactic and semantic
    297  features in Cforall, plus a growing number of runtime benchmarks.  The tests check for correctness
    298  and are used for daily regression testing of commits (3800+).
    299 
    300 
    301    Furthermore, the article lacks some related work.  Many proposed features are present in
    302    functional languages such as Haskell, ML etc.  In particular, the dealing of parametric
    303    polymorphism reminds me of Haskell.
     247   Overloading requires the compiler to mangle a function's signature into its
     248   name in the object file.  I'm pretty sure that this will complicate the
     249   build process of mixed Cforall/C projects.
     250
     251There is no complexity with building Cforall/C programs, and there is an
     252existence proof because C++ has name mangling for overloading and has no problem
     253interacting with C.
     254
     255   I found the evaluation underwhelming.  There were only ~200 LoC ported from
     256   C to Cforall.  This is too less to encounter potential caveats Cforall's
     257   type system might impose.
     258
     259
     260
     261   Also, how is the compiler implemented?  I guess, Cforall is a
     262   source-to-source compiler (from Cforall to C).  But this is left in the
     263   dark.  What features are actually implemented?
     264
     265The following paragraph has been added to the introduction to address this
     266comment:
     267
     268 All languages features discussed in this paper are working, except some
     269 advanced exception-handling features.  Not discussed in this paper are the
     270 integrated concurrency-constructs and user-level
     271 threading-library~\cite{Delisle18}.  Cforall is an open-source project
     272 implemented as an source-to-source translator from Cforall to the gcc-dialect
     273 of C~\cite{GCCExtensions}, allowing it to leverage the portability and code
     274 optimizations provided by gcc, meeting goals (1)--(3).  Ultimately, a compiler
     275 is necessary for advanced features and optimal performance.  The Cforall
     276 translator is 200+ files and 46,000+ lines of code written in C/C++.  Starting
     277 with a translator versus a compiler makes it easier and faster to generate and
     278 debug C object-code rather than intermediate, assembler or machine code.  The
     279 translator design is based on the visitor pattern, allowing multiple passes
     280 over the abstract code-tree, which works well for incrementally adding new
     281 feature through additional visitor passes.  At the heart of the translator is
     282 the type resolver, which handles the polymorphic routine/type
     283 overload-resolution.  The Cforall runtime system is 100+ files and 11,000+
     284 lines of code, written in Cforall.  Currently, the Cforall runtime is the
     285 largest user of Cforall providing a vehicle to test the language features and
     286 implementation.  The Cforall tests are 290+ files and 27,000+ lines of code.
     287 The tests illustrate syntactic and semantic features in Cforall, plus a
     288 growing number of runtime benchmarks.  The tests check for correctness and are
     289 used for daily regression testing of commits (3800+).
     290
     291   Furthermore, the article lacks some related work.  Many proposed features
     292   are present in functional languages such as Haskell, ML etc.  In particular,
     293   the dealing of parametric polymorphism reminds me of Haskell.
    304294
    305295The following paragraph has been added at the start of Section 10.1:
    306296
    307  ML~\cite{ML} was the first language to support parametric polymorphism.  Like Cforall, it supports
    308  universal type parameters, but not the use of assertions and traits to constrain type arguments.
    309  Haskell~\cite{Haskell10} combines ML-style polymorphism, polymorphic data types, and type inference
    310  with the notion of type classes, collections of overloadable methods that correspond in intent to
    311  traits in Cforall.  Unlike Cforall, Haskell requires an explicit association between types and
    312  their classes that specifies the implementation of operations.  These associations determine the
    313  functions that are assertion arguments for particular combinations of class and type, in contrast
    314  to Cforall where the assertion arguments are selected at function call sites based upon the set of
    315  operations in scope at that point.  Haskell also severely restricts the use of overloading: an
    316  overloaded name can only be associated with a single class, and methods with overloaded names can
    317  only be defined as part of instance declarations.
    318 
    319 
    320    Cforall's approach to tuples is also quite similar to many functional languages.
     297 ML~\cite{ML} was the first language to support parametric polymorphism.  Like
     298 Cforall, it supports universal type parameters, but not the use of assertions
     299 and traits to constrain type arguments.  Haskell~\cite{Haskell10} combines
     300 ML-style polymorphism, polymorphic data types, and type inference with the
     301 notion of type classes, collections of overloadable methods that correspond in
     302 intent to traits in Cforall.  Unlike Cforall, Haskell requires an explicit
     303 association between types and their classes that specifies the implementation
     304 of operations.  These associations determine the functions that are assertion
     305 arguments for particular combinations of class and type, in contrast to
     306 Cforall where the assertion arguments are selected at function call sites
     307 based upon the set of operations in scope at that point.  Haskell also
     308 severely restricts the use of overloading: an overloaded name can only be
     309 associated with a single class, and methods with overloaded names can only be
     310 defined as part of instance declarations.
     311
     312   Cforall's approach to tuples is also quite similar to many functional
     313   languages.
    321314
    322315At the end of Section 10.2, we state:
    323316
    324  Tuples are a fundamental abstraction in most functional programming languages, such as Standard ML,
    325  Haskell}, and Scala, which decompose tuples using pattern matching.
     317 Tuples are a fundamental abstraction in most functional programming languages,
     318 such as Standard ML, Haskell}, and Scala, which decompose tuples using pattern
     319 matching.
    326320
    327321
Note: See TracChangeset for help on using the changeset viewer.