Changes in doc/papers/general/response [3d60c08:cfc3e0f]
- File:
-
- 1 edited
-
doc/papers/general/response (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/general/response
r3d60c08 rcfc3e0f 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 two65 of the issues, we have "pushed back", with an explanation. Specifically, moving the related work66 forward, and moving text from Section 9 into the captions of Table2 and Figure 10. Our reasons for67 not making these changes are address below. Finally, as pointed out below, there are a couple of68 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 not71 extend the paper beyond 35 pages. If necessary, find ways to cut the examples or text. If you72 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 77 63 Referee(s)' Comments to Author: 78 64 79 65 Reviewing: 1 80 66 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 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. 117 110 118 111 Done. 119 112 120 121 2.3 Error comment in the code should be written with the same capitalization and it will be122 helpful if you say specifically compilation error or runtime error. (Please see attached123 annotated manuscript.) 124 125 Fixed. All errors in the paper are compilation errors because they are relatedto 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 of129 code and some details about software/hardware can be added/moved here. The aim is to provide130 sufficient information for readers to reproduce the results and to appreciate the context of the131 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 theexperiments.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 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 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 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. 135 128 136 129 3. Practical information about the work 137 130 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."), 140 134 141 135 This sentence is replace with: 142 136 143 All languages features discussed in this paper are working, except some advanced exception-handling144 features.137 All languages features discussed in this paper are working, except some 138 advanced exception-handling features. 145 139 146 140 and Section 5.4 Exception Handling states: 147 141 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. 151 144 152 145 page 4 ("Under construction is a mechanism to distribute...") … … 154 147 The feature on page 4 is now complete. 155 148 156 157 149 and page 33 ("There is ongoing work on a wide range ... ") 158 150 159 151 This sentence is replace to indicate the ongoing work is future work. 160 152 161 While all examples in the paper compile and run, a public beta-release of Cforall will take 6-8162 months to reduce compilation time, provide better debugging, and add a few more libraries. There163 is also new work on a number of Cforall features, including arrays with size, runtime164 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 main174 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 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 main part of the manuscript. 175 167 176 168 See above. 177 169 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 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. 198 195 199 196 See point 1. 200 197 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. 204 200 205 201 The Phil-Karlton quote is an urban legend without a specific academic citation: … … 209 205 The term "const hell" is replaced with "const poisoning" with a citation. 210 206 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 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. 226 219 227 220 5.3 Typos: … … 240 233 241 234 6. Conflict of interest 242 I see that the work is partially supported by Huawei. Perhaps statement about any presence or243 ab sence of conflicts of interest should be explicitly added. Please get a clear direction on this244 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 the247 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 239 The paper now states the project is open-source, hence there is no conflict of 240 interest with the funding received from Huawei. 248 241 249 242 … … 252 245 Comments to the Author 253 246 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 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. 304 294 305 295 The following paragraph has been added at the start of Section 10.1: 306 296 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. 321 314 322 315 At the end of Section 10.2, we state: 323 316 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. 326 320 327 321
Note:
See TracChangeset
for help on using the changeset viewer.