From: "Dan'l Miller" <optikos@verizon.net>
Subject: Re: Teaching C/C++ from Ada perspective?
Date: Sat, 30 Jun 2018 12:07:51 -0700 (PDT)
Date: 2018-06-30T12:07:51-07:00 [thread overview]
Message-ID: <1bd0ac50-7e70-41be-aa16-a3e7d30461e6@googlegroups.com> (raw)
In-Reply-To: <856189aa-fa00-4960-929e-174f352310ad@googlegroups.com>
On Saturday, June 30, 2018 at 1:04:30 PM UTC-5, koua...@gmail.com wrote:
> Hello,
>
> Ada is my programming language of choice. I have used it much in scientific programming. At an University I am asked to teach programming but in C and C++ to fist year students. After having spent some years with Ada, I'm relecutant to "throw away" my good programming habits from Ada and embrace C/C++. I would like to know if there exist(s) good book(s) at introductory level for C/C++ that may go in the spirit of Ada so that I won't feel wasting my time and energy teaching C/C++?
>
> Also I will start the above course with Algorithms in which I have little knowledge. Any suggestions for good books on this topic?
>
>
> Thank you.
>
> Kouaoua
Short answer: purge as close to 100% of your usage of C semantics from your C++ code.
Long answer:
Well, if you are really really wanting to do this, you would write a whole bunch of class templates to displace every usage of C-semantics stuff. You would start with C-semantics scalar types; replace them wholesale. You would then progress onward to C-semantics typedefs; replace then wholesale with struct-wrapped templates. You would then progress onward to making a before-after list of all C-semantics C++ language constructs to never ever utilize (the before column in the table) followed by the corresponding replacement in the modern C++ standard library. You would then extend your table to also have before-after list of all C-semantics idioms to never ever utilize (the before column in the table) followed by the corresponding replacement in the modern C++{11,14,17} idioms.
When writing wholesale replacements for C-semantics scalar data, you would go chapter by chapter through the Ada _LRM_ and design Ada-esque ‘language design’ utilizing C++ templates of every single C-semantics topic.
1) Every time that you would otherwise write {int, short, long, signed, unsigned, float, double, char, uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t, any combination/permutation thereof}, you would instead write ::Adaesque::Integer< _LowerBound_, _UpperBound_ > as the Ada-esque replacement in C++ for the lack of subtype constraints.
2) Every time that you would otherwise write one of the C-isms in the ‘before’ column of the table, you would instead utilize the Ada-esque idioms in the ‘after’ column of the table.
3) You would utilize C++ allocators to emulate Ada-esque pools and subpools.
4) You would utilize C++{11,14,17,20} concurrency library content and/or language primitives to emulate Ada tasking.
Wholesale replacement of C++'s scalar types with class template replacements is first explored in §5 of Chapter 16 of Barton & Nackman's _Scientific and Engineering C++: An introduction with advanced techniques and examples_ (1993). This was done for adding physical-units dimensions to C++; your motivation is analogous but endorsing Ada instead of SI as the philosophical projection onto C++. This was then developed further by Walter Brown at Fermi Lab and presented to the C++ standardization committee during 2002. AIUI, that Fermi Lab work fed into Boost Units library:
https://www.boost.org/doc/libs/1_37_0/doc/html/boost_units.html
Here is another treatment of the topic by Scott Meyers, much the same as Barton & Nackman's:
http://se.ethz.ch/~meyer/publications/OTHERS/scott_meyers/dimensions.pdf
In other words, your coursework would not be the first programming culture to jettison C-semantics baggage from C++, replacing it wholesale with class template replacements.
Hmmmm, the more that I think about this, the more that I think that this would be an outreach mechanism to draw C++ programmers into Ada: get them to start programming in Ada-esque concepts as close to 100% of the time while still remaining in C++.
next prev parent reply other threads:[~2018-06-30 19:07 UTC|newest]
Thread overview: 117+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-30 18:04 Teaching C/C++ from Ada perspective? kouaoua16
2018-06-30 18:15 ` Luke A. Guest
2018-06-30 19:27 ` Dan'l Miller
2018-06-30 19:07 ` Dan'l Miller [this message]
2018-07-01 16:12 ` kouaoua16
2018-07-01 17:08 ` Luke A. Guest
2018-07-01 19:19 ` Dan'l Miller
2018-07-02 6:12 ` Maciej Sobczak
2018-07-01 20:52 ` Maciej Sobczak
2018-07-01 21:35 ` Dan'l Miller
2018-07-02 5:56 ` Maciej Sobczak
2018-07-02 9:58 ` Marius Amado-Alves
2018-07-02 11:03 ` Maciej Sobczak
2018-07-02 13:52 ` Marius Amado-Alves
2018-07-04 12:10 ` Dan'l Miller
2018-07-02 20:14 ` Paul Rubin
2018-07-03 9:48 ` Marius Amado-Alves
2018-07-04 2:52 ` Paul Rubin
2018-07-02 18:52 ` Dan'l Miller
2018-07-03 8:00 ` Maciej Sobczak
2018-07-03 12:40 ` Dan'l Miller
2018-07-03 20:54 ` Maciej Sobczak
2018-07-04 3:10 ` Dan'l Miller
2018-07-04 7:59 ` Maciej Sobczak
2018-07-04 8:37 ` Marius Amado-Alves
2018-07-04 12:22 ` Maciej Sobczak
2018-07-04 14:13 ` Simon Wright
2018-07-04 14:56 ` Maciej Sobczak
2018-07-04 15:52 ` Dmitry A. Kazakov
2018-07-04 16:24 ` Alejandro R. Mosteo
2018-07-04 20:00 ` Jeffrey R. Carter
2018-07-05 18:35 ` Randy Brukardt
2018-07-05 19:39 ` Jeffrey R. Carter
2018-07-06 18:45 ` Randy Brukardt
2018-07-04 20:13 ` Maciej Sobczak
2018-07-04 21:09 ` Dmitry A. Kazakov
2018-07-05 5:49 ` Maciej Sobczak
2018-07-05 7:37 ` Dmitry A. Kazakov
2018-07-05 13:14 ` Maciej Sobczak
2018-07-05 15:18 ` Dmitry A. Kazakov
2018-07-05 19:16 ` Randy Brukardt
2018-07-07 15:09 ` Lucretia
2018-07-05 19:12 ` Randy Brukardt
2018-07-05 20:10 ` Maciej Sobczak
2018-07-06 19:01 ` Randy Brukardt
2018-07-06 19:35 ` Dmitry A. Kazakov
2018-07-05 7:43 ` Alejandro R. Mosteo
2018-07-05 18:53 ` Randy Brukardt
2018-07-05 19:06 ` Dan'l Miller
2018-07-06 18:47 ` Randy Brukardt
2018-07-05 20:12 ` Maciej Sobczak
2018-07-06 18:51 ` Randy Brukardt
2018-07-06 19:43 ` Dmitry A. Kazakov
2018-07-06 20:18 ` Dan'l Miller
2018-07-07 8:39 ` Dmitry A. Kazakov
2018-07-07 11:53 ` Björn Lundin
2018-07-06 20:22 ` Maciej Sobczak
2018-07-06 23:26 ` Paul Rubin
2018-07-07 6:17 ` J-P. Rosen
2018-07-07 6:37 ` Micronian Coder
2018-07-07 8:48 ` Privacy and child packages (Was: Teaching C/C++ from Ada perspective?) Jacob Sparre Andersen
2018-07-07 20:19 ` Teaching C/C++ from Ada perspective? Maciej Sobczak
2018-07-08 15:25 ` Simon Wright
2018-07-08 20:00 ` Maciej Sobczak
2018-07-09 9:04 ` Alejandro R. Mosteo
2018-07-05 15:30 ` Dan'l Miller
2018-07-05 20:38 ` Maciej Sobczak
2018-07-05 21:05 ` Dan'l Miller
2018-07-05 18:47 ` Randy Brukardt
2018-07-04 16:01 ` Simon Wright
2018-07-04 17:12 ` G. B.
2018-07-04 20:18 ` Maciej Sobczak
2018-07-04 21:03 ` G.B.
2018-07-04 17:21 ` Dan'l Miller
2018-07-04 20:36 ` Maciej Sobczak
2018-07-04 22:44 ` Dan'l Miller
2018-07-05 2:01 ` Luke A. Guest
2018-07-05 5:03 ` Dan'l Miller
2018-07-05 5:58 ` Maciej Sobczak
2018-07-05 19:25 ` Randy Brukardt
2018-07-05 19:22 ` Randy Brukardt
2018-07-05 18:31 ` Randy Brukardt
2018-07-06 3:32 ` Dan'l Miller
2018-07-06 12:05 ` Dan'l Miller
2018-07-06 20:42 ` Maciej Sobczak
2018-07-06 21:32 ` Dan'l Miller
2018-07-07 20:43 ` Maciej Sobczak
2018-07-08 17:36 ` Dan'l Miller
2018-07-08 18:39 ` Bill Findlay
2018-07-08 19:28 ` Dan'l Miller
2018-07-09 12:34 ` Bill Findlay
2018-07-09 15:19 ` Dan'l Miller
2018-07-09 19:34 ` Bill Findlay
2018-07-09 22:03 ` Dan'l Miller
2018-07-09 22:35 ` Bill Findlay
2018-07-10 1:56 ` Lucretia
2018-07-10 23:14 ` Randy Brukardt
2018-07-11 14:05 ` Dan'l Miller
2018-07-11 20:20 ` Randy Brukardt
2018-07-08 20:43 ` Maciej Sobczak
2018-07-08 23:17 ` Dan'l Miller
2018-07-09 6:13 ` Maciej Sobczak
2018-07-09 16:35 ` Dan'l Miller
2018-07-10 23:20 ` Randy Brukardt
2018-07-10 23:51 ` Britt
2018-07-02 17:10 ` kouaoua16
2018-07-02 17:28 ` Dennis Lee Bieber
2018-07-02 18:22 ` Maciej Sobczak
2018-07-02 20:27 ` G.B.
2018-07-02 0:11 ` Paul Rubin
2018-07-02 14:26 ` kouaoua16
2018-07-02 19:57 ` G.B.
2018-07-02 20:17 ` Dan'l Miller
2018-07-03 9:56 ` Brian Drummond
2018-07-04 12:18 ` Olivier Henley
2018-07-04 14:17 ` kouaoua16
2018-07-12 5:38 ` robin.vowels
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox