Changeset 3d60c08 for doc/papers/general/response
- Timestamp:
- May 8, 2018, 9:20:23 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- b4a835d
- Parents:
- 83034ec
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/general/response
r83034ec r3d60c08 61 61 judithbishop@outlook.com 62 62 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 63 77 Referee(s)' Comments to Author: 64 78 65 79 Reviewing: 1 66 80 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 73 Sometimes it is appropriate to put related work at the start of a paper and 74 sometimes at the end. For this paper, it seems appropriate to put the related 75 work at the end of the paper. The purpose of the related work in this paper is 76 two fold: to introduce prior work and to contrast it with Cforall. Only at the 77 end of the paper does the reader have sufficient knowledge about Cforall to 78 make detailed contrasts with other programming languages possible. If the 79 related work is moved to the end of the introduction, the reader knows nothing 80 about Cforall so talking about other programming languages in isolation makes 81 little sense, especially non-C-related languages, like Java, Go, Rust, 82 Haskell. We see no easy way to separate the related work into a general 83 discussion at the start and a specific discussion at the end. We explicitly 84 attempt 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 99 This suggestion is an alternative writing style. The experiment is complex 100 enough that it is unlikely a reader could jump to the table/graph and 101 understand the experiment without putting a substantive amount of the text from 102 Section 9 into the table and figure, which the reader then has to read anyway. 103 In fact, we prefer a writing style where the reader does not have to look at 104 the table/figure to understand the experiment and the results, i.e., the 105 table/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. 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. 110 117 111 118 Done. 112 119 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 runtime115 error. (Please see attached annotated manuscript.)116 117 Fixed. All errors in the paper are compilation errors because they are related 118 to 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 be122 added/moved here. The aim is to provide sufficient information for readers123 to reproduce the results and to appreciate the context of the comparison.124 125 Table 2 indicates the source-code size in lines of code. The third paragraph of 126 Section 9 gives precise details of the software/hardware used in the 127 experiments.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. 128 135 129 136 3. Practical information about the work 130 137 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."), 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."), 134 140 135 141 This sentence is replace with: 136 142 137 All languages features discussed in this paper are working, except some 138 advanced exception-handlingfeatures.143 All languages features discussed in this paper are working, except some advanced exception-handling 144 features. 139 145 140 146 and Section 5.4 Exception Handling states: 141 147 142 The following framework for Cforall exception handling is in place, excluding 143 some runtime type-information and virtual functions. 148 The following framework for Cforall exception handling is in place, excluding some runtime 149 type-information and virtual functions. 150 144 151 145 152 page 4 ("Under construction is a mechanism to distribute...") … … 147 154 The feature on page 4 is now complete. 148 155 156 149 157 and page 33 ("There is ongoing work on a wide range ... ") 150 158 151 159 This sentence is replace to indicate the ongoing work is future work. 152 160 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 better155 debugging, and add a few more libraries. There is also new work on a number156 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 162 There is nothing to move into an appendix, except 3 sentences. We do not intend 163 to 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 mainpart of the manuscript.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. 167 175 168 176 See above. 169 177 170 3.2 Instructions on how to access/use the working functionality of Cforall 171 should be given. 172 173 We will indicate release of Cforall in a public location, when we believe the 174 code base is acceptable. In the interim, we have made public all the 175 experimental code from section 9, and there is a reference in the paper to 176 access this code. We can make a private beta-copy of Cforall available to the 177 SP&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 182 Software development is not rigorous engineering discipline. Given our small 183 research development-team and the size of the project, we cannot give a 184 specific time for completion of anything associated with the project. Having 185 said that, we have reduced our expected time for Cforall release to 6-8 months 186 as 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. 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. 195 198 196 199 See point 1. 197 200 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. 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. 200 204 201 205 The Phil-Karlton quote is an urban legend without a specific academic citation: … … 205 209 The term "const hell" is replaced with "const poisoning" with a citation. 206 210 207 5.1 Footnotes and citations will need to have different schemes - number and 208 perhaps letter. 209 210 The latex macros from Wiley generate those symbols. I assume during 211 copy-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 217 Agreed. The bibtex BST macros are at fault. I have fixed some issues but I 218 cannot fix them all as my BST macro-knowledge is limited. 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 219 226 220 227 5.3 Typos: … … 233 240 234 241 6. Conflict of interest 235 I see that the work is partially supported by Huawei. Perhaps statement 236 ab out any presence or absence of conflicts of interest should be explicitly237 added. Please get a clear direction on thisfrom the editor of the journal.238 239 The paper now states the project is open-source, hence there is no conflict of 240 interest with thefunding received from Huawei.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. 241 248 242 249 … … 245 252 Comments to the Author 246 253 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 251 There is no complexity with building Cforall/C programs, and there is an 252 existence proof because C++ has name mangling for overloading and has no problem 253 interacting 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 265 The following paragraph has been added to the introduction to address this 266 comment: 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. 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. 294 304 295 305 The following paragraph has been added at the start of Section 10.1: 296 306 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. 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. 314 321 315 322 At the end of Section 10.2, we state: 316 323 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. 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. 320 326 321 327
Note: See TracChangeset
for help on using the changeset viewer.