- Timestamp:
- Sep 25, 2018, 11:35:34 AM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- c6bbcdb
- Parents:
- 341bb80 (diff), 7428ad9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- doc
- Files:
-
- 12 added
- 3 edited
- 95 moved
Legend:
- Unmodified
- Added
- Removed
-
doc/bibliography/pl.bib
r341bb80 r6d44da1 701 701 % B 702 702 703 @article{Michael13, 704 contributer = {pabuhr@plg}, 705 author = {Maged M. Michael}, 706 title = {The Balancing Act of Choosing Nonblocking Features}, 707 journal = cacm, 708 volume = 56, 709 number = 9, 710 month = sep, 711 year = 2013, 712 pages = {46--53}, 713 publisher = {ACM}, 714 address = {New York, NY, USA}, 715 } 716 703 717 @incollection{beta:old, 704 718 keywords = {beta, patterns, virtual types}, … … 908 922 909 923 @misc{Cforall, 924 contributer = {pabuhr@plg}, 910 925 key = {Cforall}, 911 title = {\textsf{C}{$\mathbf{\forall}$} Features},912 howpublished= {\ url{https://plg.uwaterloo.ca/~cforall/features}},926 author = {{\textsf{C}{$\mathbf{\forall}$} Features}}, 927 howpublished= {\href{https://plg.uwaterloo.ca/~cforall/features}{https://\-plg.uwaterloo.ca/\-~cforall/\-features}}, 913 928 optnote = {Accessed: 2018-01-01}, 914 929 } … … 926 941 927 942 @misc{CFAStackEvaluation, 943 contributer = {a3moss@plg}, 928 944 author = {Aaron Moss}, 929 945 title = {\textsf{C}$\mathbf{\forall}$ Stack Evaluation Programs}, 930 946 year = 2018, 931 howpublished= {\href{https://cforall.uwaterloo.ca/CFAStackEvaluation.zip}{ \textcolor{blue}{Q4: https://cforall.uwaterloo.ca/\-CFAStackEvaluation.zip}}},947 howpublished= {\href{https://cforall.uwaterloo.ca/CFAStackEvaluation.zip}{https://cforall.uwaterloo.ca/\-CFAStackEvaluation.zip}}, 932 948 optnote = {[Accessed May 2018]}, 933 949 } 934 950 935 951 @article{Moss18, 936 keywords = { concurrency, C++},952 keywords = {type systems, tuples, Cforall}, 937 953 contributer = {pabuhr@plg}, 938 954 author = {Aaron Moss and Robert Schluntz and Peter A. Buhr}, 939 955 title = {\textsf{C}$\mathbf{\forall}$ : Adding Modern Programming Language Features to C}, 940 956 year = 2018, 957 month = aug, 941 958 journal = spe, 942 note = { Accepted, to appear},959 note = {\href{http://dx.doi.org/10.1002/spe.2624}{http://\-dx.doi.org/\-10.1002/\-spe.2624}}, 943 960 } 944 961 … … 962 979 comment = { 963 980 The evidence given is thin. 964 } 981 }, 965 982 } 966 983 … … 1416 1433 } 1417 1434 1435 @misc{NThreadCode13, 1436 keywords = {N-thread software-solution mutual exclusion}, 1437 contributer = {pabuhr@plg}, 1438 key = {concurrent locking}, 1439 author = {Peter A. Buhr and David Dice and Wim H. Hesselink}, 1440 title = {concurrent-locking}, 1441 howpublished= {\href{https://github.com/pabuhr/concurrent-locking}{https://\-github.com/\-pabuhr/\-concurrent-locking}}, 1442 optnote = {[Accessed April 2017]}, 1443 } 1444 1418 1445 @incollection{Reppy93, 1419 1446 keywords = {ML, concurrency, continuation passing}, … … 1489 1516 month = dec, 1490 1517 year = 2017, 1491 note = {\href{http ://plg.uwaterloo.ca/~usystem/pub/uSystem/u++-7.0.0.sh}{http://\-plg.\-uwaterloo.\-ca/\-$\sim$usystem/\-pub/\-uSystem/\-u++-7.0.0.sh}},1518 note = {\href{https://plg.uwaterloo.ca/~usystem/pub/uSystem/uC++.pdf}{https://\-plg.uwaterloo.ca/\-~usystem/\-pub/\-uSystem/uC++.pdf}}, 1492 1519 } 1493 1520 … … 1556 1583 } 1557 1584 1585 @mastersthesis{Sun15, 1586 author = {Sun, Xianda}, 1587 title = {Concurrent High-performance Persistent Hash Table In {J}ava}, 1588 school = {School of Computer Science, University of Waterloo}, 1589 year = 2015, 1590 optaddress = {Waterloo, Ontario, Canada, N2L 3G1}, 1591 note = {\href{https://uwspace.uwaterloo.ca/handle/10012/10013}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-10013}}, 1592 } 1593 1558 1594 @book{Andrews91:book, 1559 1595 keywords = {concurrency}, … … 1580 1616 1581 1617 @mastersthesis{Delisle18, 1582 author = {Thierry Delisle }, 1618 keywords = {concurrency, Cforall}, 1619 contributer = {pabuhr@plg}, 1620 author = {Thierry Delisle}, 1583 1621 title = {Concurrency in \textsf{C}$\mathbf{\forall}$}, 1584 1622 school = {School of Computer Science, University of Waterloo}, 1585 1623 year = 2018, 1586 address = {Waterloo, Ontario, Canada, N2L 3G1},1624 optaddress = {Waterloo, Ontario, Canada, N2L 3G1}, 1587 1625 note = {\href{https://uwspace.uwaterloo.ca/handle/10012/12888}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-12888}}, 1626 } 1627 1628 @article{Delisle18b, 1629 keywords = {concurrency, Cforall}, 1630 contributer = {pabuhr@plg}, 1631 author = {Thierry Delisle and Peter A. Buhr}, 1632 title = {Concurrency in \textsf{C}$\mathbf{\forall}$}, 1633 year = 2018, 1634 journal = spe, 1635 pages = {1-32}, 1636 note = {submitted}, 1588 1637 } 1589 1638 … … 1827 1876 key = {Peter Buhr}, 1828 1877 title = {CS343}, 1829 year = 201 7,1878 year = 2018, 1830 1879 howpublished= {\href{https://www.student.cs.uwaterloo.ca/~cs343}{https://\-www.student.cs.uwaterloo.ca/\-~cs343}}, 1831 1880 } … … 2864 2913 keywords = {concurrency, mutual exclusion, performance experiment, software solutions}, 2865 2914 title = {Fast mutual exclusion by the {T}riangle algorithm}, 2866 author = {Wim H. Hesselink and Peter Buhr and David Dice},2915 author = {Wim H. Hesselink and Peter A. Buhr and David Dice}, 2867 2916 journal = ccpe, 2868 2917 volume = 30, … … 2871 2920 month = feb, 2872 2921 publisher = {John Wiley \& Sons}, 2873 note = {\ url{https://doi.org/10.1002/cpe.4183}}2922 note = {\href{https://doi.org/10.1002/cpe.4183}{https://\-doi.org/\-10.1002/\-cpe.4183}} 2874 2923 } 2875 2924 … … 3283 3332 edition = {{S}imon {M}arlow}, 3284 3333 year = 2010, 3285 note = {\href{https://haskell.org/definition/haskell2010.pdf}{https:// haskell.org/\-definition/\-haskell2010.pdf}},3334 note = {\href{https://haskell.org/definition/haskell2010.pdf}{https://\-haskell.org/\-definition/\-haskell2010.pdf}}, 3286 3335 } 3287 3336 … … 3357 3406 } 3358 3407 3359 @article{Hesselink17 ,3408 @article{Hesselink17b, 3360 3409 keywords = {concurrency, mutual exclusion, performance experiment, software solutions}, 3361 3410 title = {High-Contention Mutual Exclusion by Elevator Algorithms}, 3362 author = {Peter Buhr and David Dice and Wim H. Hesselink},3411 author = {Peter A. Buhr and David Dice and Wim H. Hesselink}, 3363 3412 journal = ccpe, 3364 volume opt= 30,3365 number opt = 4,3413 volume = 30, 3414 number = 18, 3366 3415 year = 2018, 3367 month = may,3416 month = sep, 3368 3417 publisher = {John Wiley \& Sons}, 3369 note = {\ url{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/cpe.4475}}3418 note = {\href{https://doi-org.proxy.lib.uwaterloo.ca/10.1002/cpe.4475}{https://\-doi-org.proxy.lib.uwaterloo.ca/\-10.1002/\-cpe.4475}}, 3370 3419 } 3371 3420 … … 3846 3895 % K 3847 3896 3897 @inproceedings{Buhr96b, 3898 author = {Peter A. Buhr and Martin Karsten and Jun Shih}, 3899 title = {{\small\textsf{KDB}}: A Multi-threaded Debugger for Multi-threaded Applications}, 3900 booktitle = {Proceedings of SPDT'96: SIGMETRICS Symposium on Parallel and Distributed Tools}, 3901 publisher = {ACM Press}, 3902 address = {Philadelphia, Pennsylvania, U.S.A.}, 3903 month = may, 3904 year = 1996, 3905 pages = {80-87}, 3906 } 3907 3848 3908 @article{Duggan96, 3849 3909 keywords = {concurrency, critical section}, 3850 3910 contributer = {pabuhr@plg}, 3851 author = {Dominic Duggan and G .V. Cormack and John Ophel},3911 author = {Dominic Duggan and Gordon V. Cormack and John Ophel}, 3852 3912 title = {Kinded Type Inference for Parametric Overloading}, 3853 3913 journal = acta, … … 4533 4593 % N 4534 4594 4595 @techreport{Drepper03, 4596 keywords = {NPTL, threading, 1:1 model}, 4597 contributer = {pabuhr@plg}, 4598 author = {Ulrich Drepper and Ingo Molnar}, 4599 title = {The Native POSIX Thread Library for Linux}, 4600 institution = {Red Hat}, 4601 year = 2003, 4602 note = {\href{http://www.cs.utexas.edu/~witchel/372/lectures/POSIX_Linux_Threading.pdf}{http://www.cs.utexas.edu/\-$\sim$witchel/\-372/\-lectures/\-POSIX\_Linux\_Threading.pdf}}, 4603 } 4604 4535 4605 @article{Haddon77, 4536 4606 keywords = {monitors, nested monitor calls}, … … 4656 4726 volume = 9, 4657 4727 pages = {157-164}, 4728 } 4729 4730 @misc{nginx, 4731 key = {nginx}, 4732 author = {{NGINX}}, 4733 howpublished= {\href{https://www.nginx.com}{https://\-www.nginx.com}}, 4658 4734 } 4659 4735 … … 4768 4844 @misc{obj-c-book, 4769 4845 keywords = {objective-c}, 4770 contributor = { a3moss@uwaterloo.ca},4846 contributor = {pabuhr@plg}, 4771 4847 key = {Objective-C}, 4772 title= {Objective-C},4848 author = {Objective-C}, 4773 4849 publisher = {Apple Inc.}, 4774 year = 201 5,4775 howpublished= {\href{https://developer.apple.com/library/ content/documentation/General/Conceptual/DevPedia-CocoaCore/ObjectiveC.html}{https://developer.apple.com/\-library/\-content/\-documentation/\-General/\-Conceptual/\-DevPedia-\-CocoaCore/\-ObjectiveC.html}},4850 year = 2014, 4851 howpublished= {\href{https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC}{https://\-developer.apple.com/\-library/archive/\-documentation/\-Cocoa/\-Conceptual/\-ProgrammingWithObjectiveC}}, 4776 4852 optnote = {Accessed: 2018-03} 4777 4853 } … … 4783 4859 title = {{X}code 7 Release Notes}, 4784 4860 year = 2015, 4785 howpublished= {\href{https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html}{https:// developer.apple.com/\-library/\-content/\-documentation/\-Xcode/\-Conceptual/\-RN-Xcode-Archive/\-Chapters/\-xc7\_release\_notes.html}},4861 howpublished= {\href{https://developer.apple.com/library/content/documentation/Xcode/Conceptual/RN-Xcode-Archive/Chapters/xc7_release_notes.html}{https://\-developer.apple.com/\-library/\-content/\-documentation/\-Xcode/\-Conceptual/\-RN-Xcode-Archive/\-Chapters/\-xc7\_release\_notes.html}}, 4786 4862 optnote = {Accessed: 2017-04} 4787 4863 } … … 5283 5359 } 5284 5360 5361 @misc{perf, 5362 contributer = {pabuhr@plg}, 5363 key = {perf}, 5364 author = {perf}, 5365 howpublished= {\href{https://perf.wiki.kernel.org/index.php/Tutorial}{https://\-perf.wiki.kernel.org/\-index.php/\-Tutorial}}, 5366 } 5367 5368 @misc{Verch12, 5369 contributer = {pabuhr@plg}, 5370 author = {Shaun Verch}, 5371 title = {Performance Analysis of 64-Bit Capriccio}, 5372 month = may, 5373 year = 2012, 5374 howpublished= {\href{http://cs.brown.edu/research/pubs/theses/masters/2012/verch.pdf}{http://cs.brown.edu/\-research/\-pubs/\-theses/\-masters/\-2012/\-verch.pdf}}, 5375 optnote = {Accessed: 2013-10-4} 5376 } 5377 5285 5378 @article{Anderson90, 5286 5379 keywords = {spin locks, back off, performance}, … … 5503 5596 note = {Proceedings of the OOPSLA'89 Conference, Oct. 1--6, 1989, New Orleans, Lousiana}, 5504 5597 abstract = {}, 5598 } 5599 5600 @inproceedings{Buhr98, 5601 keywords = {profiling, monitoring, visualization}, 5602 contributer = {pabuhr@plg}, 5603 author = {Peter A. Buhr and Robert Denda}, 5604 title = {{$\mu$Profiler} : Profiling User-Level Threads in a Shared-Memory Programming Environment}, 5605 booktitle = {Proceedings of the Second International Symposium on Computing in Object-Oriented Parallel Environments (ISCOPE'98)}, 5606 series = {Lecture Notes in Computer Science}, 5607 publisher = {Springer-Verlag}, 5608 volume = 1505, 5609 opteditor = {Dennis Caromel and Rodney R. Oldehoeft and Marydell Tholburn}, 5610 address = {Santa Fe, New Mexico, U.S.A.}, 5611 month = dec, 5612 year = 1998, 5613 pages = {159-166}, 5505 5614 } 5506 5615 … … 5855 5964 keywords = {Cyclone, existential types, polymorphism, type variables}, 5856 5965 contributer = {a3moss@plg}, 5857 author = {D .Grossman},5966 author = {Dan Grossman}, 5858 5967 title = {Quantified Types in an Imperative Language}, 5859 5968 journal = toplas, … … 5964 6073 } 5965 6074 6075 @article{Ronsse03, 6076 keywords = {profiling, replay}, 6077 contributer = {pabuhr@plg}, 6078 author = {Michiel Ronsse and De Bosschere, Koen and Mark Christiaens and Jacques Chassin de Kergommeaux and Dieter Kranzlm\"{u}ller}, 6079 title = {Record/Replay for Nondeterministic Program Executions}, 6080 journal = cacm, 6081 month = sep, 6082 year = 2003, 6083 volume = 46, 6084 number = 9, 6085 pages = {62-67}, 6086 } 6087 5966 6088 @article{Robinson48, 5967 6089 keywords = {recursion, Ackermann function}, … … 6002 6124 } 6003 6125 6126 @mastersthesis{Schuster99, 6127 author = {Oliver Schuster}, 6128 title = {Replay of Concurrent Shared-Memory Programs}, 6129 school = {Universit\"at Mannheim}, 6130 address = {Mannheim, Deutschland}, 6131 year = 1999, 6132 month = apr, 6133 type = {Diplomarbeit}, 6134 note = {\href{ftp://plg.uwaterloo.ca/pub/theses/SchusterThesis.ps.gz}{ftp://\-plg.uwaterloo.ca/\-pub/\-theses/\-SchusterThesis.ps.gz}}, 6135 } 6136 6004 6137 @article{Euclid, 6005 6138 keywords = {Euclid}, … … 6033 6166 school = {School of Computer Science, University of Waterloo}, 6034 6167 year = 2017, 6035 address = {Waterloo, Ontario, Canada, N2L 3G1},6168 optaddress = {Waterloo, Ontario, Canada, N2L 3G1}, 6036 6169 note = {\href{https://uwspace.uwaterloo.ca/handle/10012/11830}{https://\-uwspace.uwaterloo.ca/\-handle/\-10012/\-11830}}, 6037 6170 } … … 6860 6993 contributer = {pabuhr@plg}, 6861 6994 key = {TIOBE Index}, 6862 title = {{TIOBE} Index},6995 author = {{TIOBE Index}}, 6863 6996 howpublished= {\href{http://www.tiobe.com/tiobe_index}{http://\-www.tiobe.com/\-tiobe\_index}}, 6864 6997 optnote = {Accessed: 2018-09}, … … 7000 7133 year = 1980 7001 7134 } 7135 7136 @misc{TraceCompass, 7137 contributer = {pabuhr@plg}, 7138 key = {Trace Compass}, 7139 author = {{T}race {C}ompass}, 7140 howpublished= {\href{https://projects.eclipse.org/proposals/trace-compass}{https://\-projects.eclipse.org/\-proposals/\-trace-compass}}, 7141 } 7002 7142 7003 7143 @article{Leroy00, … … 7135 7275 title = {Usability Challenges in Exception Handling}, 7136 7276 booktitle = {5th International Workshop on Exception Handling (WEH)}, 7137 o rganization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)},7277 optorganization= {16th International Symposium on the Foundations of Software Engineering (FSE 16)}, 7138 7278 address = {Zurich, Switzerland}, 7139 7279 month = jun, … … 7279 7419 } 7280 7420 7421 @inproceedings{vonBehren03, 7422 keywords = {threads, events, web server}, 7423 contributer = {pabuhr@plg}, 7424 author = {Rob von Behren and Jeremy Condit and Eric Brewer}, 7425 title = {Why Events Are a Bad Idea (for high-concurrency servers)}, 7426 booktitle = {HotOS IX: The 9th Workshop on Hot Topics in Operating Systems}, 7427 publisher = {USENIX Association}, 7428 address = {Lihue, Hawaii, U.S.A.}, 7429 month = may, 7430 year = 2003, 7431 pages = {19-24}, 7432 } 7433 7281 7434 @techreport{Moss90, 7282 7435 keywords = {Swizzling, database}, … … 7343 7496 year = 1986, 7344 7497 editor = {Norman Meyrowitz}, 7345 publisher = sigplan # " 21(11)",7498 publisher = sigplan, 7346 7499 organization= {Association for Computing Machinery}, 7347 7500 address = {Portland, Oregon}, 7348 month = sep # { 29}7501 month = sep, 7349 7502 } 7350 7503 … … 7355 7508 year = 1987, 7356 7509 editor = {Norman Meyrowitz}, 7357 publisher = sigplan # " 22(12)",7510 publisher = sigplan, 7358 7511 organization= {Association for Computing Machinery}, 7359 7512 address = {Orlando, Florida}, 7360 month = oct # { 4--8}7513 month = oct, 7361 7514 } 7362 7515 … … 7367 7520 year = 1988, 7368 7521 editor = {Norman Meyrowitz}, 7369 publisher = sigplan # " 23(11)",7522 publisher = sigplan, 7370 7523 organization= {Association for Computing Machinery}, 7371 7524 address = {San Diego, California}, 7372 month = sep # { 25--30}7525 month = sep, 7373 7526 } 7374 7527 … … 7379 7532 year = 1989, 7380 7533 editor = {Norman Meyrowitz}, 7381 publisher = sigplan # " 24(10)",7534 publisher = sigplan, 7382 7535 organization= {Association for Computing Machinery}, 7383 7536 address = {New Orleans, Louisiana}, 7384 month = oct # { 1--6}7537 month = oct, 7385 7538 } 7386 7539 … … 7391 7544 year = 1990, 7392 7545 editor = {Norman Meyrowitz}, 7393 publisher = sigplan # " 25(10)",7546 publisher = sigplan, 7394 7547 organization= {Association for Computing Machinery}, 7395 7548 address = {Ottawa, Canada}, 7396 month = oct # { 21--25}7549 month = oct, 7397 7550 } 7398 7551 … … 7403 7556 year = 1991, 7404 7557 editor = {Andreas Paepcke}, 7405 publisher = sigplan # " 26(11)",7558 publisher = sigplan, 7406 7559 organization= {Association for Computing Machinery}, 7407 7560 address = {Phoenix, Arizona}, 7408 month = oct # { 6--11}7409 } 7561 month = oct, 7562 } -
doc/papers/general/Paper.tex
r341bb80 r6d44da1 196 196 \author[1]{Robert Schluntz} 197 197 \author[1]{Peter A. Buhr} 198 \author[]{\textcolor{blue}{Q1 AUTHOR NAMES CORRECT}}199 198 \authormark{MOSS \textsc{et al}} 200 199 … … 208 207 The C programming language is a foundational technology for modern computing with millions of lines of code implementing everything from hobby projects to commercial operating systems. 209 208 This installation base and the programmers producing it represent a massive software engineering investment spanning decades and likely to continue for decades more. 210 Nevertheless, C, which was first standardized almost 30 \textcolor{blue}{CHANGE ``40'' TO ``30''}years ago, lacks many features that make programming in more modern languages safer and more productive.209 Nevertheless, C, which was first standardized almost 30 years ago, lacks many features that make programming in more modern languages safer and more productive. 211 210 The goal of the \CFA project (pronounced ``C for all'') is to create an extension of C that provides modern safety and productivity features while still ensuring strong backward compatibility with C and its programmers. 212 211 Prior projects have attempted similar goals but failed to honor the C programming style; … … 226 225 227 226 227 \vspace*{-10pt} 228 228 \section{Introduction} 229 229 230 230 The C programming language is a foundational technology for modern computing with millions of lines of code implementing everything from hobby projects to commercial operating systems. 231 231 This installation base and the programmers producing it represent a massive software engineering investment spanning decades and likely to continue for decades more. 232 The TIOBE index~\cite{TIOBE} \textcolor{blue}{CHANGE ``TIOBE'' TO ``The TIOBE index''}ranks the top five most \emph{popular} programming languages as Java 15\%, \Textbf{C 12\%}, \Textbf{\CC 5.5\%}, and Python 5\%, \Csharp 4.5\% = 42\%, where the next 50 languages are less than 4\% each with a long tail.232 The TIOBE index~\cite{TIOBE} ranks the top five most \emph{popular} programming languages as Java 15\%, \Textbf{C 12\%}, \Textbf{\CC 5.5\%}, and Python 5\%, \Csharp 4.5\% = 42\%, where the next 50 languages are less than 4\% each with a long tail. 233 233 The top three rankings over the past 30 years are as follows. 234 \newpage235 \textcolor{blue}{MOVE TABLE HERE}236 234 \begin{center} 237 235 \setlength{\tabcolsep}{10pt} … … 246 244 \lstMakeShortInline@% 247 245 \end{center} 248 249 246 Love it or hate it, C is extremely popular, highly used, and one of the few systems languages. 250 247 In many cases, \CC is often used solely as a better C. 251 Nevertheless, C, which was first standardized almost 30 \textcolor{blue}{CHANGE ``40'' TO ``30''}years ago~\cite{ANSI89:C}, lacks many features that make programming in more modern languages safer and more productive.248 Nevertheless, C, which was first standardized almost 30 years ago~\cite{ANSI89:C}, lacks many features that make programming in more modern languages safer and more productive. 252 249 253 250 \CFA (pronounced ``C for all'' and written \CFA or Cforall) is an evolutionary extension of the C programming language that adds modern language features to C, while maintaining source and runtime compatibility in the familiar C programming model. … … 281 278 ultimately, a compiler is necessary for advanced features and optimal performance. 282 279 % The translator design is based on the \emph{visitor pattern}, allowing multiple passes over the abstract code-tree, which works well for incrementally adding new feature through additional visitor passes. 283 Two key translator components are expression analysis, determining expression validity and what operations are required for its implementation, and code generation, dealing with multiple forms of overloading, polymorphism, and multiple return values by converting them into C code for a C compiler that supports none of these features.280 Two key translator components are expression analysis, determining expression validity and what operations are required for its implementation, and code generation, dealing with multiple forms of overloading, polymorphism, and multiple return values by converting them into the C code for a C compiler that supports none of these features. 284 281 Details of these components are available in chapters 2 and 3 in the work of Bilson~\cite{Bilson03} and form the base for the current \CFA translator. 285 282 % @plg2[8]% cd cfa-cc/src; cloc libcfa … … 345 342 Section~\ref{sec:libraries} includes a number of examples of how this overloading simplifies \CFA programming relative to C. 346 343 Code generation for these overloaded functions and variables is implemented by the usual approach of mangling the identifier names to include a representation of their type, while \CFA decides which overload to apply based on the same ``usual arithmetic conversions'' used in C to disambiguate operator overloads. 347 \textcolor{blue}{REMOVE ``We have the following as an example''} 344 348 345 \newpage 349 \textcolor{blue}{UPDATE FOLLOWING PROGRAM EXAMPLE WITH ADJUSTED COMMENTS TO FIT PAGE WIDTH.}350 346 \begin{cfa} 351 347 int max = 2147483647; $\C[4in]{// (1)}$ … … 362 358 In some cases, hundreds of names can be reduced to tens, resulting in a significant cognitive reduction. 363 359 In the above, the name @max@ has a consistent meaning, and a programmer only needs to remember the single concept: maximum. 364 To prevent significant ambiguities, \CFA uses the return type in selecting overloads, \eg in the assignment to @m@, the compiler use @m@'s type to unambiguously select the most appropriate call to function @max@ (as does Ada).360 To prevent significant ambiguities, \CFA uses the return type in selecting overloads, \eg in the assignment to @m@, the compiler uses @m@'s type to unambiguously select the most appropriate call to function @max@ (as does Ada). 365 361 As is shown later, there are a number of situations where \CFA takes advantage of available type information to disambiguate, where other programming languages generate ambiguities. 366 362 … … 380 376 \label{sec:poly-fns} 381 377 382 The signature feature of \CFA is parametric-polymorphic functions~\cite{forceone:impl,Cormack90,Duggan96} with functions generalized using a @forall@ clause (giving the language its name). \textcolor{blue}{REMOVE ``as follows''}378 The signature feature of \CFA is parametric-polymorphic functions~\cite{forceone:impl,Cormack90,Duggan96} with functions generalized using a @forall@ clause (giving the language its name). 383 379 \begin{cfa} 384 380 `forall( otype T )` T identity( T val ) { return val; } … … 395 391 396 392 Since bare polymorphic types provide a restricted set of available operations, \CFA provides a \newterm{type assertion}~\cite[pp.~37-44]{Alphard} mechanism to provide further type information, where type assertions may be variable or function declarations that depend on a polymorphic type variable. 397 For example, the function @twice@ can be defined using the \CFA syntax for operator overloading. \textcolor{blue}{REMOVE ``as follows''}393 For example, the function @twice@ can be defined using the \CFA syntax for operator overloading. 398 394 \begin{cfa} 399 395 forall( otype T `| { T ?+?(T, T); }` ) T twice( T x ) { return x `+` x; } $\C{// ? denotes operands}$ … … 409 405 Crucial to the design of a new programming language are the libraries to access thousands of external software features. 410 406 Like \CC, \CFA inherits a massive compatible library base, where other programming languages must rewrite or provide fragile interlanguage communication with C. 411 A simple example is leveraging the existing type-unsafe (@void *@) C @bsearch@ to binary search a sorted float array. \textcolor{blue}{REMOVE ``as follows''}407 A simple example is leveraging the existing type-unsafe (@void *@) C @bsearch@ to binary search a sorted float array. 412 408 \begin{cfa} 413 409 void * bsearch( const void * key, const void * base, size_t nmemb, size_t size, … … 605 601 To enable interoperation among equivalent instantiations of a generic type, the translator saves the set of instantiations currently in scope and reuses the generated structure declarations where appropriate. 606 602 A function declaration that accepts or returns a concrete generic type produces a declaration for the instantiated structure in the same scope, which all callers may reuse. 607 For example, the concrete instantiation for @pair( const char *, int )@ is \textcolor{blue}{REMOVE ``as follows.''}603 For example, the concrete instantiation for @pair( const char *, int )@ is 608 604 \begin{cfa} 609 605 struct _pair_conc0 { … … 634 630 If a dynamic generic type is declared to be passed or returned by value from a polymorphic function, the translator can safely assume that the generic type is complete (\ie has a known layout) at any call site, and the offset array is passed from the caller; 635 631 if the generic type is concrete at the call site, the elements of this offset array can even be statically generated using the C @offsetof@ macro. 636 As an example, the body of the second @value@ function is implemented as \textcolor{blue}{REMOVE ``follows.''}632 As an example, the body of the second @value@ function is implemented as 637 633 \begin{cfa} 638 634 _assign_T( _retval, p + _offsetof_pair[1] ); $\C{// return *p.second}$ … … 640 636 \newpage 641 637 \noindent 642 \textcolor{blue}{NO PARAGRAPH INDENT}Here, @_assign_T@ is passed in as an implicit parameter from @otype T@, and takes two @T *@ (@void *@ in the generated code), a destination and a source, and @_retval@ is the pointer to a caller-allocated buffer for the return value, the usual \CFA method to handle dynamically sized return types.638 Here, @_assign_T@ is passed in as an implicit parameter from @otype T@, and takes two @T *@ (@void *@ in the generated code), a destination and a source, and @_retval@ is the pointer to a caller-allocated buffer for the return value, the usual \CFA method to handle dynamically sized return types. 643 639 @_offsetof_pair@ is the offset array passed into @value@; 644 this array is generated at the call site as \textcolor{blue}{REMOVE ``follows.''}640 this array is generated at the call site as 645 641 \begin{cfa} 646 642 size_t _offsetof_pair[] = { offsetof( _pair_conc0, first ), offsetof( _pair_conc0, second ) } … … 677 673 678 674 Another useful pattern enabled by reused dtype-static type instantiations is zero-cost \newterm{tag structures}. 679 Sometimes, information is only used for type checking and can be omitted at runtime. \textcolor{blue}{REMOVE ``As an example, we have the following''}675 Sometimes, information is only used for type checking and can be omitted at runtime. 680 676 \begin{cquote} 681 677 \lstDeleteShortInline@% … … 724 720 Both approaches are awkward. 725 721 % FIX 726 Alternatively, a programming language can directly support returning multiple values, \eg \CFA provides the following. \textcolor{blue}{REPLACE ``in \CFA, we have the following'' WITH ``\CFA provides the following''}722 Alternatively, a programming language can directly support returning multiple values, \eg \CFA provides the following. 727 723 \begin{cfa} 728 724 [ int, int ] div( int num, int den ); $\C{// return two integers}$ … … 745 741 As such, \CFA allows assigning multiple values from a function into multiple variables, using a square-bracketed list of lvalue expressions (as above), called a \newterm{tuple}. 746 742 747 However, functions also use \newterm{composition} (nested calls), with the direct consequence that MRVFs must also support composition to be orthogonal with single-returning-value functions (SRVFs), \eg, \CFA provides the following. \textcolor{blue}{REPLACE ``As an example, we have the following'' WITH ``\CFA provides the following''}743 However, functions also use \newterm{composition} (nested calls), with the direct consequence that MRVFs must also support composition to be orthogonal with single-returning-value functions (SRVFs), \eg, \CFA provides the following. 748 744 \begin{cfa} 749 745 printf( "%d %d\n", div( 13, 5 ) ); $\C{// return values seperated into arguments}$ … … 781 777 printf( "%d %d\n", qr ); 782 778 \end{cfa} 783 \CFA also supports \newterm{tuple indexing} to access single components of a tuple expression. \textcolor{blue}{REMOVE ``as follows''}779 \CFA also supports \newterm{tuple indexing} to access single components of a tuple expression. 784 780 \begin{cfa} 785 781 [int, int] * p = &qr; $\C{// tuple pointer}$ … … 809 805 In the call to @f@, @x@ is implicitly flattened so the components of @x@ are passed as two arguments. 810 806 In the call to @g@, the values @y@ and @10@ are structured into a single argument of type @[int, int]@ to match the parameter type of @g@. 811 Finally, in the call to @h@, @x@ is flattened to yield an argument list of length 3, of which the first component of @x@ is passed as the first parameter of @h@, and the second component \textcolor{blue}{CHANGE ``components'' TO ``component''}of @x@ and @y@ are structured into the second argument of type @[int, int]@.812 The flexible structure of tuples permits a simple and expressive function call syntax to work seamlessly with both SRVFs and MRVFs \textcolor{blue}{REMOVE ``and''}with any number of arguments of arbitrarily complex structure.807 Finally, in the call to @h@, @x@ is flattened to yield an argument list of length 3, of which the first component of @x@ is passed as the first parameter of @h@, and the second component of @x@ and @y@ are structured into the second argument of type @[int, int]@. 808 The flexible structure of tuples permits a simple and expressive function call syntax to work seamlessly with both SRVFs and MRVFs with any number of arguments of arbitrarily complex structure. 813 809 814 810 815 811 \subsection{Tuple assignment} 816 812 813 \enlargethispage{-10pt} 817 814 An assignment where the left side is a tuple type is called \newterm{tuple assignment}. 818 815 There are two kinds of tuple assignment depending on whether the right side of the assignment operator has a tuple type or a nontuple type, called \newterm{multiple} and \newterm{mass assignment}, respectively. … … 828 825 Both kinds of tuple assignment have parallel semantics, so that each value on the left and right sides is evaluated before any assignments occur. 829 826 As a result, it is possible to swap the values in two variables without explicitly creating any temporary variables or calling a function, \eg, @[x, y] = [y, x]@. 830 This semantics means mass assignment differs from C cascading 831 \newpage 832 assignment (\eg @a = b = c@) in that conversions are applied in each individual assignment, which prevents data loss from the chain of conversions that can happen during a cascading assignment. 827 This semantics means mass assignment differs from C cascading assignment (\eg @a = b = c@) in that conversions are applied in each individual assignment, which prevents data loss from the chain of conversions that can happen during a cascading assignment. 833 828 For example, @[y, x] = 3.14@ performs the assignments @y = 3.14@ and @x = 3.14@, yielding @y == 3.14@ and @x == 3@, whereas C cascading assignment @y = x = 3.14@ performs the assignments @x = 3.14@ and @y = x@, yielding @3@ in @y@ and @x@. 834 829 Finally, tuple assignment is an expression where the result type is the type of the left-hand side of the assignment, just like all other assignment expressions in C. … … 857 852 [int, int, int] y = x.[2, 0, 2]; $\C{// duplicate: [y.0, y.1, y.2] = [x.2, x.0.x.2]}$ 858 853 \end{cfa} 859 It is also possible for a member access to contain other member accesses. \textcolor{blue}{REMOVE ``, as follows.''}854 It is also possible for a member access to contain other member accesses. 860 855 \begin{cfa} 861 856 struct A { double i; int j; }; … … 969 964 Since nothing is known about a parameter pack by default, assertion parameters are key to doing anything meaningful. 970 965 Unlike variadic templates, @ttype@ polymorphic functions can be separately compiled. 971 For example, the following is a \textcolor{blue}{CHANGE ``As an example, we have the following'' TO ``For example, the following is a''}generalized @sum@ function.966 For example, the following is a generalized @sum@ function. 972 967 \begin{cfa} 973 968 int sum$\(_0\)$() { return 0; } … … 1003 998 Unlike C variadic functions, it is unnecessary to hard code the number and expected types. 1004 999 Furthermore, this code is extendable for any user-defined type with a @?+?@ operator. 1005 Summing \textcolor{blue}{REMOVE ``up''}arbitrary heterogeneous lists is possible with similar code by adding the appropriate type variables and addition operators.1000 Summing arbitrary heterogeneous lists is possible with similar code by adding the appropriate type variables and addition operators. 1006 1001 1007 1002 It is also possible to write a type-safe variadic print function to replace @printf@: … … 1039 1034 Tuples are implemented in the \CFA translator via a transformation into \newterm{generic types}. 1040 1035 For each $N$, the first time an $N$-tuple is seen in a scope, a generic type with $N$ type parameters is generated. 1041 For example, the following \textcolor{blue}{CHANGE ``, as follows:'' TO ``For example, the following''}1036 For example, the following 1042 1037 \begin{cfa} 1043 1038 [int, int] f() { … … 1519 1514 \end{cfa} 1520 1515 1521 \textcolor{blue}{PARAGRAPH INDENT}Finally, \CFA provides a Java-like @finally@ clause after the catch clauses.1516 Finally, \CFA provides a Java-like @finally@ clause after the catch clauses. 1522 1517 \begin{cfa} 1523 1518 try { … … 1655 1650 1656 1651 C declaration syntax is notoriously confusing and error prone. 1657 For example, many C programmers are confused by a declaration as simple as the following. \textcolor{blue}{CHANGE ``simple a declaration as in'' TO ``declaration as simple as''}1652 For example, many C programmers are confused by a declaration as simple as the following. 1658 1653 \begin{cquote} 1659 1654 \lstDeleteShortInline@% … … 1709 1704 % Specifically, the character @*@ is used to indicate a pointer, square brackets @[@\,@]@ are used to represent an array or function return value, and parentheses @()@ are used to indicate a function parameter. 1710 1705 However, unlike C, \CFA type declaration tokens are distributed across all variables in the declaration list. 1711 For instance, variables @x@ and @y@ of type pointer to integer are defined in \CFA as \textcolor{blue}{REMOVE ``follows.''}1706 For instance, variables @x@ and @y@ of type pointer to integer are defined in \CFA as 1712 1707 \begin{cquote} 1713 1708 \lstDeleteShortInline@% … … 1959 1954 Since \CFA in not object oriented, adopting dynamic scoping does not make sense; 1960 1955 instead, \CFA adopts \CC static nesting, using the member-selection operator ``@.@'' for type qualification, as does Java, rather than the \CC type-selection operator ``@::@'' (see Figure~\ref{f:TypeNestingQualification}). 1956 In the C left example, types @C@, @U@ and @T@ are implicitly hoisted outside of type @S@ into the containing block scope. 1957 In the \CFA right example, the types are not hoisted and accessible. 1961 1958 1962 1959 \begin{figure} … … 2028 2025 \vspace*{-8pt} 2029 2026 \end{figure} 2030 2031 In the C left example, types @C@, @U@ and @T@ are implicitly hoisted outside of type @S@ into the containing block scope.2032 In the \CFA right example, the types are not hoisted and accessible.2033 2027 2034 2028 … … 2066 2060 For details of the code-generation placement of implicit constructor and destructor calls among complex executable statements, see section~2.2 in the work of Schlintz~\cite{Schluntz17}. 2067 2061 2068 \CFA also provides syntax for \newterm{initialization} and \newterm{copy}. \textcolor{blue}{REMOVE ``, as follows''}2062 \CFA also provides syntax for \newterm{initialization} and \newterm{copy}. 2069 2063 \begin{cfa} 2070 2064 void ?{}( VLA & vla, int size, char fill = '\0' ) { $\C{// initialization}$ … … 2131 2125 2132 2126 A simple example is allowing the underscore, as in Ada, to separate prefixes, digits, and suffixes in all \CFA constants, \eg @0x`_`1.ffff`_`ffff`_`p`_`128`_`l@, where the underscore is also the standard separator in C identifiers. 2133 \CC uses a single quote as a separator, but it is restricted among digits, precluding its use in the literal prefix or suffix, \eg @0x1.ffff@@`'@@ffffp128l@, and causes problems with most \textcolor{blue}{Q2 CHANGE ``IDEs'' TO ``integrated development environments (IDEs)''}, which must be extended to deal with this alternate use of the single quote.2127 \CC uses a single quote as a separator, but it is restricted among digits, precluding its use in the literal prefix or suffix, \eg @0x1.ffff@@`'@@ffffp128l@, and causes problems with most integrated development environments (IDEs), which must be extended to deal with this alternate use of the single quote. 2134 2128 2135 2129 … … 2203 2197 y = "12345678901234567890123456789"|`mp| + "12345678901234567890123456789"|`mp|; 2204 2198 \end{cfa} 2205 Because \CFA uses a standard function, all types and literals are applicable, as well as overloading and conversions, where @?`@ \textcolor{blue}{USE CHARACTER \lstinline@`@ NOT \textsf{'}} denotes a postfix-function name and @`@ \textcolor{blue}{USE CHARACTER \lstinline@`@ NOT `}denotes a postfix-function call.2199 Because \CFA uses a standard function, all types and literals are applicable, as well as overloading and conversions, where @?`@ denotes a postfix-function name and @`@ denotes a postfix-function call. 2206 2200 }% 2207 2201 \begin{cquote} … … 2345 2339 \lstMakeShortInline@% 2346 2340 \end{cquote} 2347 The result is a significant reduction in names to access typed constants. \textcolor{blue}{REMOVE ``, as follows.''}2341 The result is a significant reduction in names to access typed constants. 2348 2342 \begin{cquote} 2349 2343 \lstDeleteShortInline@% … … 2390 2384 \lstMakeShortInline@% 2391 2385 \end{cquote} 2392 The result is a significant reduction in names to access math functions. \textcolor{blue}{REMOVE ``, as follows.''}2386 The result is a significant reduction in names to access math functions. 2393 2387 \begin{cquote} 2394 2388 \lstDeleteShortInline@% … … 2437 2431 \lstMakeShortInline@% 2438 2432 \end{cquote} 2439 The result is a significant reduction in names to access the utility functions. \textcolor{blue}{REMOVE ``, as follows.''}2433 The result is a significant reduction in names to access the utility functions. 2440 2434 \begin{cquote} 2441 2435 \lstDeleteShortInline@% … … 2458 2452 In addition, there are polymorphic functions, like @min@ and @max@, that work on any type with operator @?<?@ or @?>?@. 2459 2453 2460 The following shows one example where \CFA \ textcolor{blue}{ADD SPACE} \emph{extends} an existing standard C interface to reduce complexity and provide safety.2454 The following shows one example where \CFA \emph{extends} an existing standard C interface to reduce complexity and provide safety. 2461 2455 C/\Celeven provide a number of complex and overlapping storage-management operations to support the following capabilities. 2462 2456 \begin{list}{}{\itemsep=0pt\parsep=0pt\labelwidth=0pt\leftmargin\parindent\itemindent-\leftmargin\let\makelabel\descriptionlabel} … … 2649 2643 \label{s:MultiPrecisionIntegers} 2650 2644 2651 \CFA has an interface to the \textcolor{blue}{Q3 CHANGE ``GMP multiprecision'' TO ``GNU multiple precision (GMP)''}signed integers~\cite{GMP}, similar to the \CC interface provided by GMP.2645 \CFA has an interface to the GNU multiple precision (GMP) signed integers~\cite{GMP}, similar to the \CC interface provided by GMP. 2652 2646 The \CFA interface wraps GMP functions into operator functions to make programming with multiprecision integers identical to using fixed-sized integers. 2653 2647 The \CFA type name for multiprecision signed integers is @Int@ and the header file is @gmp@. … … 2742 2736 Figure~\ref{fig:eval} and Table~\ref{tab:eval} show the results of running the benchmark in Figure~\ref{fig:BenchmarkTest} and its C, \CC, and \CCV equivalents. 2743 2737 The graph plots the median of five consecutive runs of each program, with an initial warm-up run omitted. 2744 All code is compiled at \texttt{-O2} by gcc or g++ 6.4.0, with all \CC code compiled as \CCfourteen. \textcolor{blue}{CHANGE ``\CC{}fourteen'' TO ``\CCfourteen''}2745 The benchmarks are run on an Ubuntu 16.04 workstation with 16 GB of RAM and a 6-core AMD FX-6300 CPU with 3.5 GHz \textcolor{blue}{REMOVE ``of''}maximum clock frequency.2738 All code is compiled at \texttt{-O2} by gcc or g++ 6.4.0, with all \CC code compiled as \CCfourteen. 2739 The benchmarks are run on an Ubuntu 16.04 workstation with 16 GB of RAM and a 6-core AMD FX-6300 CPU with 3.5 GHz maximum clock frequency. 2746 2740 2747 2741 \begin{figure} … … 2770 2764 \end{table} 2771 2765 2766 \enlargethispage{-10pt} 2772 2767 The C and \CCV variants are generally the slowest with the largest memory footprint, due to their less-efficient memory layout and the pointer indirection necessary to implement generic types; 2773 2768 this inefficiency is exacerbated by the second level of generic types in the pair benchmarks. … … 2860 2855 Tuples are a generalization of @std::pair@, in that they allow for arbitrary length, fixed-size aggregation of heterogeneous values. 2861 2856 Operations include @std::get<N>@ to extract values, @std::tie@ to create a tuple of references used for assignment, and lexicographic comparisons. 2862 \CCseventeen \textcolor{blue}{CHANGE ``\CC{}seventeen TO ``\CCseventeen''}proposes \emph{structured bindings}~\cite{Sutter15} to eliminate predeclaring variables and the use of @std::tie@ for binding the results.2857 \CCseventeen proposes \emph{structured bindings}~\cite{Sutter15} to eliminate predeclaring variables and the use of @std::tie@ for binding the results. 2863 2858 This extension requires the use of @auto@ to infer the types of the new variables; hence, complicated expressions with a nonobvious type must be documented with some other mechanism. 2864 2859 Furthermore, structured bindings are not a full replacement for @std::tie@, as it always declares new variables. -
doc/user/user.tex
r341bb80 r6d44da1 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Thu Jul 26 17:29:05201814 %% Update Count : 33 6613 %% Last Modified On : Fri Aug 31 07:54:50 2018 14 %% Update Count : 3396 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 210 210 Even with all its problems, C continues to be popular because it allows writing software at virtually any level in a computer system without restriction. 211 211 For system programming, where direct access to hardware, storage management, and real-time issues are a requirement, C is usually the only language of choice. 212 The TIOBE index~\cite{TIOBE} for July 2018 ranks the top 5 most \emph{popular} programming languages as:\Index*{Java} 16\%, C 14\%, \Index*[C++]{\CC{}} 7.5\%, Python 6\%, Visual Basic 4\% = 47.5\%, where the next 50 languages are less than 4\% each, with a long tail.212 The TIOBE index~\cite{TIOBE} for July 2018 ranks the top five most \emph{popular} programming languages as \Index*{Java} 16\%, C 14\%, \Index*[C++]{\CC{}} 7.5\%, Python 6\%, Visual Basic 4\% = 47.5\%, where the next 50 languages are less than 4\% each, with a long tail. 213 213 The top 3 rankings over the past 30 years are: 214 214 \begin{center} … … 351 351 The 2011 C standard plus GNU extensions. 352 352 \item 353 \Indexc[deletekeywords=inline]{-fgnu89-inline}\index{compilation option!-fgnu89-inline@{\lstinline[deletekeywords=inline] @-fgnu89-inline@}}353 \Indexc[deletekeywords=inline]{-fgnu89-inline}\index{compilation option!-fgnu89-inline@{\lstinline[deletekeywords=inline]$-fgnu89-inline$}} 354 354 Use the traditional GNU semantics for inline routines in C11 mode, which allows inline routines in header files. 355 355 \end{description} … … 455 455 #endif 456 456 457 ®#include_next <bfdlink.h> 457 ®#include_next <bfdlink.h> §\C{// must have internal check for multiple expansion}§ 458 458 ® 459 459 #if defined( with ) && defined( __CFA_BFD_H__ ) §\C{// reset only if set}§ … … 504 504 505 505 C, \CC, and Java (and many other programming languages) have no exponentiation operator\index{exponentiation!operator}\index{operator!exponentiation}, \ie $x^y$, and instead use a routine, like \Indexc{pow}, to perform the exponentiation operation. 506 \CFA extends the basic operators with the exponentiation operator ©?\?©\index{?\\?@ \lstinline@?\?@} and ©?\=?©\index{?\\=?@\lstinline@?\=?@}, as in, ©x \ y© and ©x \= y©, which means $x^y$ and $x \leftarrow x^y$.506 \CFA extends the basic operators with the exponentiation operator ©?\?©\index{?\\?@©?\?©} and ©?\=?©\index{?\\=?@©\=?©}, as in, ©x \ y© and ©x \= y©, which means $x^y$ and $x \leftarrow x^y$. 507 507 The priority of the exponentiation operator is between the cast and multiplicative operators, so that ©w * (int)x \ (int)y * z© is parenthesized as ©((w * (((int)x) \ ((int)y))) * z)©. 508 508 … … 516 516 256 64 -64 0.015625 -0.015625 18.3791736799526 0.264715-1.1922i 517 517 \end{cfa} 518 Parenthesis are necessary for the complex constants or the expression is parsed as ©1.0f+(2.0fi \ 3.0f)+2.0fi©.518 Parenthesis are necessary for complex constants or the expression is parsed as ©1.0f+®(®2.0fi \ 3.0f®)®+2.0fi©. 519 519 The exponentiation operator is available for all the basic types, but for user-defined types, only the integral-computation versions are available. 520 520 For returning an integral value, the user type ©T© must define multiplication, ©*©, and one, ©1©; … … 527 527 528 528 529 %\subsection{\texorpdfstring{\protect\lstinline@if@ Statement}{if Statement}} 530 \subsection{\texorpdfstring{\LstKeywordStyle{if} Statement}{if Statement}} 531 532 The ©if© expression allows declarations, similar to ©for© declaration expression: 533 \begin{cfa} 534 if ( int x = f() ) ... §\C{// x != 0}§ 535 if ( int x = f(), y = g() ) ... §\C{// x != 0 \&\& y != 0}§ 536 if ( int x = f(), y = g(); ®x < y® ) ... §\C{// relational expression}§ 537 \end{cfa} 538 Unless a relational expression is specified, each variable is compared not equal to 0, which is the standard semantics for the ©if© expression, and the results are combined using the logical ©&&© operator.\footnote{\CC only provides a single declaration always compared not equal to 0.} 529 %\subsection{\texorpdfstring{\protect\lstinline@if@/\protect\lstinline@while@ Statement}{if Statement}} 530 \subsection{\texorpdfstring{\LstKeywordStyle{if}/\LstKeywordStyle{while} Statement}{if/while Statement}} 531 532 The ©if©/©while© expression allows declarations, similar to ©for© declaration expression. 533 (Does not make sense for ©do©-©while©.) 534 \begin{cfa} 535 if ( ®int x = f()® ) ... §\C{// x != 0}§ 536 if ( ®int x = f(), y = g()® ) ... §\C{// x != 0 \&\& y != 0}§ 537 if ( ®int x = f(), y = g(); x < y® ) ... §\C{// relational expression}§ 538 if ( ®struct S { int i; } x = { f() }; x.i < 4® ) §\C{// relational expression}§ 539 540 while ( ®int x = f()® ) ... §\C{// x != 0}§ 541 while ( ®int x = f(), y = g()® ) ... §\C{// x != 0 \&\& y != 0}§ 542 while ( ®int x = f(), y = g(); x < y® ) ... §\C{// relational expression}§ 543 while ( ®struct S { int i; } x = { f() }; x.i < 4® ) ... §\C{// relational expression}§ 544 \end{cfa} 545 Unless a relational expression is specified, each variable is compared not equal to 0, which is the standard semantics for the ©if©/©while© expression, and the results are combined using the logical ©&&© operator.\footnote{\CC only provides a single declaration always compared not equal to 0.} 539 546 The scope of the declaration(s) is local to the @if@ statement but exist within both the ``then'' and ``else'' clauses. 547 548 549 %\subsection{\texorpdfstring{\protect\lstinline@for@ Statement}{for Statement}} 550 \subsection{\texorpdfstring{\LstKeywordStyle{for} Statement}{for Statement}} 551 552 The ©for©/©while©/©do-while© loop-control allows empty or simplified ranges. 553 An empty conditional implies ©1©. 554 The up-to range ©~©\index{~@©~©} means exclusive range [M,N); 555 the up-to range ©~=©\index{~=@©~=©} means inclusive range [M,N]. 556 The down-to range ©-~©\index{-~@©-~©} means exclusive range [N,M); 557 the down-to range ©-~=©\index{-~=@©-~=©} means inclusive range [N,M]. 558 ©0© is the implicit start value; 559 ©1© is the implicit increment value for an up-to range and ©-1© for an implicit down-to range. 560 The loop index is polymorphic in the type of the start value or comparison value when start is implicitly ©0©. 561 \begin{cquote} 562 \begin{tabular}{@{}ll|l@{}} 563 \multicolumn{2}{c|}{for control} & \multicolumn{1}{c}{output} \\ 564 \hline 565 \begin{cfa} 566 while ®()® { sout | "empty"; break; } 567 do { sout | "empty"; break; } while ®()®; 568 for ®()® { sout | "empty"; break; } 569 for ( ®0® ) { sout | "A"; } 570 for ( ®1® ) { sout | "A"; } 571 for ( ®10® ) { sout | "A"; } 572 for ( ®1 ~= 10 ~ 2® ) { sout | "B"; } 573 for ( ®10 -~= 1 ~ -2® ) { sout | "C"; } 574 for ( ®0.5 ~ 5.5® ) { sout | "D"; } 575 for ( ®5.5 -~ 0.5® ) { sout | "E"; } 576 for ( ®i; 10® ) { sout | i; } 577 for ( ®i; 1 ~= 10 ~ 2® ) { sout | i; } 578 for ( ®i; 10 -~= 1 ~ -2® ) { sout | i; } 579 for ( ®i; 0.5 ~ 5.5® ) { sout | i; } 580 for ( ®i; 5.5 -~ 0.5® ) { sout | i; } 581 for ( ®ui; 2u ~= 10u ~ 2u® ) { sout | ui; } 582 for ( ®ui; 10u -~= 2u ~ -2u® ) { sout | ui; } 583 int start = 3, comp = 10, inc = 2; 584 for ( ®i; start ~ comp ~ inc + 1® ) { sout | i; } 585 \end{cfa} 586 & 587 \begin{cfa} 588 sout | endl; 589 sout | endl; 590 sout | endl; 591 sout | endl; 592 sout | endl; 593 sout | endl; 594 sout | endl; 595 sout | endl; 596 sout | endl; 597 sout | endl; 598 sout | endl; 599 sout | endl; 600 sout | endl; 601 sout | endl; 602 sout | endl; 603 sout | endl; 604 sout | endl; 605 606 sout | endl; 607 \end{cfa} 608 & 609 \begin{cfa} 610 empty 611 empty 612 empty 613 614 A 615 A A A A A A A A A A 616 B B B B B 617 C C C C C 618 D D D D D 619 E E E E E 620 0 1 2 3 4 5 6 7 8 9 621 1 3 5 7 9 622 10 8 6 4 2 623 0.5 1.5 2.5 3.5 4.5 624 5.5 4.5 3.5 2.5 1.5 625 2 4 6 8 10 626 10 8 6 4 2 627 628 3 6 9 629 \end{cfa} 630 \end{tabular} 631 \end{cquote} 540 632 541 633 … … 800 892 801 893 894 % for () => for ( ;; ) 895 % for ( 10 - t ) => for ( typeof(10 - t) ? = 0 ; ? < 10 - t; ? += 1 ) // using 0 and 1 896 % for ( i ; 10 - t ) => for ( typeof(10 - t) i = 0 ; i < 10 - t; i += 1 ) // using 0 and 1 897 % for ( T i ; 10 - t ) => for ( T i = 0 ; i < 10 - t; i += 1 ) // using 0 and 1 898 % for ( 3~9 ) => for ( int ? = 3 ; ? < 9; ? += 1 ) // using 1 899 % for ( i ; 3~9 ) => for ( int i = 3 ; i < 9; i += 1 ) // using 1 900 % for ( T i ; 3~9 ) => for ( T i = 3 ; i < 9; i += 1 ) // using 1 901 902 802 903 %\subsection{\texorpdfstring{Labelled \protect\lstinline@continue@ / \protect\lstinline@break@}{Labelled continue / break}} 803 904 \subsection{\texorpdfstring{Labelled \LstKeywordStyle{continue} / \LstKeywordStyle{break} Statement}{Labelled continue / break Statement}} … … 805 906 While C provides ©continue© and ©break© statements for altering control flow, both are restricted to one level of nesting for a particular control structure. 806 907 Unfortunately, this restriction forces programmers to use \Indexc{goto} to achieve the equivalent control-flow for more than one level of nesting. 807 To prevent having to switch to the ©goto©, \CFA extends the \Indexc{continue}\index{continue@ \lstinline@continue@!labelled}\index{labelled!continue@©continue©} and \Indexc{break}\index{break@\lstinline@break@!labelled}\index{labelled!break@©break©} with a target label to support static multi-level exit\index{multi-level exit}\index{static multi-level exit}~\cite{Buhr85}, as in Java.908 To prevent having to switch to the ©goto©, \CFA extends the \Indexc{continue}\index{continue@©continue©!labelled}\index{labelled!continue@©continue©} and \Indexc{break}\index{break@©break©!labelled}\index{labelled!break@©break©} with a target label to support static multi-level exit\index{multi-level exit}\index{static multi-level exit}~\cite{Buhr85}, as in Java. 808 909 For both ©continue© and ©break©, the target label must be directly associated with a ©for©, ©while© or ©do© statement; 809 910 for ©break©, the target label can also be associated with a ©switch©, ©if© or compound (©{}©) statement. … … 890 991 \end{figure} 891 992 892 Both labelled ©continue© and ©break© are a ©goto©\index{goto@ \lstinline@goto@!restricted} restricted in the following ways:993 Both labelled ©continue© and ©break© are a ©goto©\index{goto@©goto©!restricted} restricted in the following ways: 893 994 \begin{itemize} 894 995 \item
Note:
See TracChangeset
for help on using the changeset viewer.