Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #402647 > unrolled thread
| Started by | Lawrence D’Oliveiro <ldo@nz.invalid> |
|---|---|
| First post | 2026-10-03 08:43 +0000 |
| Last post | 2026-10-13 23:19 +0100 |
| Articles | 20 on this page of 328 — 21 participants |
Back to article view | Back to comp.lang.c
Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-03 08:43 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-03 11:24 +0100
Re: Taming The Switch-Statement Kaz Kylheku <046-301-5902@kylheku.com> - 2026-10-05 22:15 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-03 14:22 +0200
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-03 18:02 +0200
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-04 00:24 +0800
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-03 17:36 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-03 16:31 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-04 10:23 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-04 12:18 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-04 16:20 +0200
Re: Taming The Switch-Statement Kaz Kylheku <046-301-5902@kylheku.com> - 2026-10-05 21:34 +0000
Re: Taming The Switch-Statement "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-10-06 16:04 -0700
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-04 16:18 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-04 16:09 +0100
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-04 16:59 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-04 18:30 +0100
Re: Taming The Switch-Statement Richard Harnden <richard.nospam@gmail.invalid> - 2026-10-04 19:49 +0100
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-04 20:35 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-04 22:27 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-04 22:47 +0100
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-04 21:59 +0000
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-04 23:38 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-05 01:24 +0100
Re: Taming The Switch-Statement Kaz Kylheku <046-301-5902@kylheku.com> - 2026-10-05 21:48 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-06 00:11 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 09:49 +0200
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-06 11:12 +0200
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 12:41 +0200
Re: Taming The Switch-Statement Richard Harnden <richard.nospam@gmail.invalid> - 2026-10-06 12:33 +0100
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-06 15:16 +0100
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-06 14:37 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-06 17:27 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-06 23:14 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 01:25 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-07 04:19 +0000
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-07 06:28 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 11:39 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-07 12:57 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 11:32 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-07 15:10 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 19:41 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-08 04:49 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-08 12:24 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-07 09:07 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 11:49 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-07 13:11 +0200
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 16:17 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-06 15:32 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 17:25 +0200
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-06 14:39 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-06 19:48 +0200
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-06 18:12 +0000
[OT] substances (was Re: Taming The Switch-Statement) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-06 21:50 +0200
Re: Taming The Switch-Statement "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-10-06 17:06 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-06 19:25 +0200
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-07 10:28 +0200
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-07 15:16 +0200
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-07 16:40 +0200
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-08 07:24 -0700
Re: Taming The Switch-Statement "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-10-06 16:08 -0700
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-06 23:45 +0000
Re: Taming The Switch-Statement "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-10-06 17:08 -0700
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-07 10:35 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-06 12:33 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 17:16 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-06 16:41 -0700
Re: Taming The Switch-Statement tTh <tth@none.invalid> - 2026-10-06 12:14 +0200
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 12:43 +0200
Re: Taming The Switch-Statement Jim Jackson <jj@franjam.org.uk> - 2026-10-06 11:47 +0000
Re: Taming The Switch-Statement "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-10-06 16:05 -0700
Re: Taming The Switch-Statement Kaz Kylheku <046-301-5902@kylheku.com> - 2026-10-07 00:42 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 13:52 +0100
Re: Taming The Switch-Statement "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2026-10-07 14:06 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-07 23:31 +0100
Re: Taming The Switch-Statement Kaz Kylheku <046-301-5902@kylheku.com> - 2026-10-05 21:32 +0000
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-06 06:07 +0800
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-05 16:42 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-05 18:05 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-06 09:04 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-06 04:11 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-06 21:40 +0200
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-16 13:12 -0700
Re: Taming The Switch-Statement Andrey Tarasevich <noone@noone.net> - 2026-10-06 00:59 -0700
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-06 08:16 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-06 04:21 -0700
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-16 04:46 -0700
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-06 14:43 +0000
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-06 17:36 +0200
Re: Taming The Switch-Statement Andrey Tarasevich <noone@noone.net> - 2026-10-06 20:36 -0700
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-04 00:20 +0800
Re: Taming The Switch-Statement Andrey Tarasevich <noone@noone.net> - 2026-10-04 09:05 -0700
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-04 23:44 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-05 01:46 +0100
Re: Taming The Switch-Statement Andrey Tarasevich <noone@noone.net> - 2026-10-04 20:48 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-05 06:24 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-05 11:09 +0100
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-06 05:22 +0800
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-06 05:26 +0800
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-10 00:25 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-10 01:58 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-09 19:17 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-10 11:53 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 14:01 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-10 14:11 +0100
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-10 21:34 +0800
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-10 21:58 +0800
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-10 17:50 +0200
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-11 05:52 +0000
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-11 21:16 +0000
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-11 23:38 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 11:58 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-11 14:42 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 14:39 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-11 15:35 -0700
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-11 14:42 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 17:23 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-11 17:48 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 19:10 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-12 07:01 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 16:41 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 20:08 +0200
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-10 22:02 +0300
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-10 19:03 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-10 22:29 +0300
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 21:55 +0200
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-10 23:03 +0300
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 22:33 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-10 21:53 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 23:16 +0200
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-11 15:29 +0000
Re: Taming The Switch-Statement Andrey Tarasevich <noone@noone.net> - 2026-10-10 15:30 -0700
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-10 22:58 +0000
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-11 09:09 +0800
Re: Taming The Switch-Statement ram@zedat.fu-berlin.de (Stefan Ram) - 2026-10-11 10:14 +0000
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-11 21:12 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 03:58 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 15:32 -0700
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-11 01:58 +0300
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 01:43 +0100
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-11 09:12 +0800
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 04:07 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 20:13 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 10:36 +0200
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-16 14:22 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-16 15:00 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-17 01:29 +0200
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-17 19:39 +0300
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-17 18:23 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-17 17:36 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-17 21:03 +0300
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-17 10:30 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-17 10:54 -0700
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-11 04:26 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 13:35 +0100
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-11 06:13 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 14:51 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-11 15:33 +0200
Re: Taming The Switch-Statement Andrey Tarasevich <noone@noone.net> - 2026-10-11 09:01 -0700
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-11 19:17 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 18:57 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-11 14:28 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 23:02 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-11 16:29 -0700
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-12 04:03 -0700
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-12 22:02 +0300
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 21:09 +0200
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-12 22:31 +0300
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-12 22:32 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 22:05 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 23:14 +0200
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-13 07:23 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-13 12:12 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 11:26 +0100
Re: Taming The Switch-Statement Richard Harnden <richard.nospam@gmail.invalid> - 2026-10-13 12:10 +0100
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-13 06:55 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-13 13:33 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 13:41 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-13 14:38 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-13 18:04 +0200
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-13 20:52 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 22:24 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-14 00:03 +0200
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 10:53 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-14 17:54 +0200
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 19:48 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 11:16 +0100
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-13 21:54 +0000
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-16 15:24 +0000
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-16 21:42 +0000
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-16 21:46 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-16 15:03 -0700
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-13 07:40 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 16:46 +0100
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-13 09:10 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 18:15 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-13 18:27 -0700
Re: Taming The Switch-Statement gazelle@shell.xmission.com (Kenny McCormack) - 2026-10-14 01:50 +0000
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 10:58 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-13 22:54 +0300
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-13 16:45 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-13 18:34 -0700
Re: Taming The Switch-Statement Kaz Kylheku <046-301-5902@kylheku.com> - 2026-10-14 05:17 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 13:46 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 07:05 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 14:37 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 16:12 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 16:32 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 19:05 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 19:15 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 16:43 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 16:45 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-12 23:46 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 00:56 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-12 17:58 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 20:38 +0100
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-12 19:52 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-12 22:56 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 21:57 +0100
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-12 21:21 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 22:46 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-13 09:27 +0200
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-13 12:18 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 11:33 +0100
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-13 00:25 +0300
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-12 22:20 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 17:02 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 01:53 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-13 03:54 +0200
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-13 10:52 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-13 23:16 +0300
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-13 18:44 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 17:33 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 00:21 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-13 20:40 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 03:59 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-13 21:35 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 11:27 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 12:17 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 12:38 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 16:49 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 19:30 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-14 23:28 +0300
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-14 21:30 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 21:56 +0100
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 21:59 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-15 01:26 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-15 12:01 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-15 11:45 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-15 15:57 +0100
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-15 18:10 +0100
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-16 02:42 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-15 20:42 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-15 23:57 +0300
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-15 23:22 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-16 12:40 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-17 00:01 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-16 16:53 -0700
Re: Taming The Switch-Statement gazelle@shell.xmission.com (Kenny McCormack) - 2026-10-17 11:09 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-17 13:11 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-17 15:15 +0200
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-17 08:34 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-17 03:19 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-17 12:34 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-17 17:58 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-17 21:40 +0100
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-15 05:17 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-15 14:37 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-15 20:50 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-15 19:59 +0100
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-15 20:49 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-14 18:51 +0100
Re: Taming The Switch-Statement "Peyton" <peyton@solacium.com> - 2026-10-14 11:04 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-14 19:47 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-14 13:58 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-15 12:08 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-14 14:23 -0700
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-14 14:35 +0000
Re: Taming The Switch-Statement Tim Rentsch <tr.17687@z991.linuxsc.com> - 2026-10-16 03:36 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 16:38 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-10 21:09 +0100
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 23:14 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-10 23:01 +0100
Re: Taming The Switch-Statement antispam@fricas.org (Waldek Hebisch) - 2026-10-11 08:00 +0000
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 10:27 +0200
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 10:49 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 16:30 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 02:12 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 19:55 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 11:00 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 12:21 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-11 14:04 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 23:05 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 07:22 +0200
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 11:42 +0100
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-12 16:15 +0200
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-12 14:34 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 16:47 +0100
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-13 00:15 +0800
Re: Taming The Switch-Statement ram@zedat.fu-berlin.de (Stefan Ram) - 2026-10-12 17:02 +0000
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-13 20:04 +0800
Re: Taming The Switch-Statement ram@zedat.fu-berlin.de (Stefan Ram) - 2026-10-13 17:28 +0000
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-14 02:05 +0800
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-12 17:17 +0000
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-12 17:37 +0000
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-12 17:34 +0000
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-12 18:46 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-12 19:52 +0100
Re: Taming The Switch-Statement scott@slp53.sl.home (Scott Lurndal) - 2026-10-12 19:42 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 16:29 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 00:53 +0100
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 18:14 -0700
Re: Taming The Switch-Statement cross@spitfire.i.gajendra.net (Dan Cross) - 2026-10-12 22:35 +0000
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-12 16:14 -0700
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-11 22:36 +0100
Re: Taming The Switch-Statement gazelle@shell.xmission.com (Kenny McCormack) - 2026-10-10 13:14 +0000
Re: Taming The Switch-Statement Michael S <already5chosen@yahoo.com> - 2026-10-10 19:50 +0300
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-10 20:13 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 15:54 -0700
Re: Taming The Switch-Statement Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2026-10-11 03:41 +0200
Re: Taming The Switch-Statement Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-10-11 09:51 +0800
Re: Taming The Switch-Statement David Brown <david.brown@hesbynett.no> - 2026-10-11 11:41 +0200
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 16:44 -0700
Re: Taming The Switch-Statement Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2026-10-10 16:56 -0700
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-11 21:26 +0000
Re: Taming The Switch-Statement Jon Ribbens <jon+usenet@unequivocal.eu> - 2026-10-11 22:12 +0000
Re: Taming The Switch-Statement Lawrence D’Oliveiro <ldo@nz.invalid> - 2026-10-13 22:00 +0000
Re: Taming The Switch-Statement bart <bc@freeuk.com> - 2026-10-13 23:19 +0100
Page 13 of 17 — ← Prev page 1 … 11 12 [13] 14 15 … 17 Next page →
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-14 16:49 +0100 |
| Message-ID | <11ao8af$1k8p3$1@dont-email.me> |
| In reply to | #403150 |
On 14/10/2026 13:38, Dan Cross wrote:
> In article <11anobe$1dt0e$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>> I'd even suggest that using distinct keywords in the original C compiler
>> would have made it a tiny bit simpler.)
>
> Unlikely. I'm trying to chase down the citation, but it was
> known that getting B to fit on the PDP-7 was a challenge. From
> the C history paper,
Perhaps Switch should have been left out then if it was that tight.
Sharing a keyword is just crass. Or maybe they should have considered
not needing 'break' for switch.
> The irony here, of course, is that you are claiming that C is
> deficient because it doesn't solve what you see as a problem,
> but trying to force the problem space specifically so that it
No, /you/ are trying to discredit a simple solution by widening the
goalposts.
The main problem being discussed, and the one my test fixed, is that of
'break' being used for two purposes and therefore resulting in clashes
when Switches and Loops are mixed.
That could easily have been fixed by DMR choosing to use distinct
keywords. Do you agree so far?
That of breaking out of nested loops is a different problem that would
need a different solution, and nothing to do with the clash with switch.
It is also one that seems to be about 100 times less common IME.
> ...except for all the other cases where it is still awkward and
> solves nothing.
IT WAS ONLY SUPPOSED TO SOLVE THIS PROBLEM! Namely the issues that
ensued from DMR overloading 'break'. NOTHING ELSE.
In fact the confusion between switch-break and loop-break will still be
there even if labels are added.
>> Unless you've invented a new requirement where you want 'break' within a
>> switch (itself solving an artificial problem) to jump straight to the
>> end of an outer switch.
>
> Yes, that's exactly what I'm saying. Again, you've identified
> one narrow problem,
It's not that narrow a problem, unless you want to call loops themselves
a narrow feature.
It is one that many languages solve for LOOPs by using break or
equivalent. But they tend not to broaden it either to include breaks out
of arbitrary kinds of blocks.
> I think this is the central reason people don't take your
> criticism of C particularly seriously.
I'm sorry but here I don't take yours seriously either. (Have you ever
implemented any of this stuff, or even used such features that you propose?)
>> 'Jumping to function scope' is poorly defined. Do you mean cutting
>> across not only all loops, but any containing nested 'if' and 'switch'
>> statements?
>
> What I mean is this:
>
> void
> foo(void)
> {
> for (int i = 0; i < n; i++) {
> for (int j = 0; j < m; i++) {
> switch (something) {
> case ...:
> // I want to break out
> // of the switch and
> // both loops here.
> goto label;
> }
> }
> }
> label:
> }
This example just breaks out of both loops. That the outer one is at
function scope is incidental.
If the outer loop was contained within an IF statement, could you jump
to outside that statement using your proposed feature? If not then that
is not function scope.
>> I could have done that in C but it would have taken more than 5
minutes,>> and this was anyway a proof of concept.
>
> Yup. And it took less than that to point out problems.
But it solved the problem I wanted to solve! It would solve the problem
Michael S reported! That is, using distinct keywords for two different
things.
>> I've already used that approach for some decades in my other languages,
>> but as I showed in the tables I posted, it is not common, and where
>> used, it was always to break out of all loops.
>>
>> Anyway, I normally use 'all' instead of a specific number to quit all
>> loops. A number works too but I dislike it.
>
> That sounds overly specific.
So is breaking out of an inner loop with 'break;'! But it works well as
it's by far the most common requirement. The next most common IME is to
quit all loops (like you do in your example).
In fact, if there are only two nested loops, the inner and outer cover
all the possibilities.
> This is actually the argument against the counted multi-level
> break: if I add or remove a level of nesting, I have to find and
> adjust all of the counts. The labeled break mechanism ties the
> `break` or `continue` to another syntactic element (a label), so
No, it's just another set of problems as I said.
You can add new inner loops, delete inner loops, add outer ones, and
each time you will need to consider whether the labels need to be moved,
or extra ones added.
Here's another solution I favour (not implemented), but it only works
for FOR loops:
for i in a..b
for j in c..d
... break i
It's a little like using a label, but here that 'label' is the loop
index. (This won't work in C as there are no formal loop indices.)
> if I add or remove a nesting level, I'm still breaking to where
> I had intended to before.
Yes, but that might now be the wrong loop.
> That said, applying the argument to the labeled case is silly.
> Software engineering and good programming practice still matter.
> If you are changing the nested looping structure of your
> program, then you should know where you want to break to;
> presumably your program's behavior depends on it.
Agreed; see below.
> I'd say the stronger argument for the labeled control structure
> is actually nested switch statements, where I may change a
> series of `if`s to a `switch` with a `case` that contains a
> nested `switch`, or I may change a `switch` to an `if`; if the
> intent is to break out of an enclosing loop, labeled breaks are
> resilient to that, but counted breaks are not.
You're assuming that the count in indexed breaks includes switch
statements. It shouldn't; that would be preposterous, and it all still
comes down to the shared 'break' keyword.
How about fixing that first, or even admitting it was wrong, before
>> Maybe the original set of loop performed some task T, and the new
loop>> wants to repeat T, in which case it must stay inside.
>
> Yes.
>
>> Or maybe it is really has to quit ALL loops including any future outer
>> ones. Neither labeling or numbering solves this.
>
> No. If I want to break out of *all* loops, I just make sure
> that the outermost loop is labeled thusly.
But in my first example, that is not what you want! It all depends.
I don't like using multi-level loop exit, it's an untidy feature even
though I implement it. And I don't like using labeled solutions, as they
just turn them into thinly disguised gotos.
>> Labeled loops may also have a new problem with scoping: is the loop name
>> local to this nest of loops, or could an outer loop name especially
>> clash with other loop elsewhere?
>
> Since labels are, you know, labels, they follow the semantics of
> ... labels.
Careful here: do you really mean that loop-labels will be in the same
name-space as ordinary labels? That means:
* Getting clashes when a labeled loop is copied elsewhere within the
function
* Being able to do an ordinary 'goto' to a loop-label ...
* ... which will also be confusing when loop labels are placed at the
beginning of a loop rather than the end:
L1:
while () {
goto L1: This jumps to L1
goto L2; This jumps to L2
continue L1; This jumps to L2
break L1; This jumps to L3
L2:
}
L3:
See there's a bit more to this language-design lark!
>> I've just done a survey in my major apps and haven't found an instance
>> where those latter two needed to cross two or more loops.
>
> Anecdotal evidence, I'm afraid.
You're welcome to post your own surveys. Although unless the languages
used in your survey support such features, you may find that hard.
> It's easy enough to look it up in the draft document; Keith
> posted a link.
Is that that 793-page document? Perhaps you can summarise how it works!
>
>>> This illustrates one reason why changing a language can be hard:
>>> your idea sounds good at first blush, but it has its own
>>> deficiencies.
>>
>> I appreciate your concern. I've only been doing this (devising and
>> implementing systems languages) for 45 years!
>
> That really doesn't mean anything. Just doing something for a
> long time doesn't mean you're good at it: I have been shooting
> baskets for 45 years, but I will never be a point guard in the
> NBA.
And yet I've solved all the problems in this thread and many others.
[toc] | [prev] | [next] | [standalone]
| From | cross@spitfire.i.gajendra.net (Dan Cross) |
|---|---|
| Date | 2026-10-14 19:30 +0000 |
| Message-ID | <11aol8k$adq$1@reader2.panix.com> |
| In reply to | #403155 |
In article <11ao8af$1k8p3$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>On 14/10/2026 13:38, Dan Cross wrote:
>> In article <11anobe$1dt0e$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>>> I'd even suggest that using distinct keywords in the original C compiler
>>> would have made it a tiny bit simpler.)
>>
>> Unlikely. I'm trying to chase down the citation, but it was
>> known that getting B to fit on the PDP-7 was a challenge. From
>> the C history paper,
>
>Perhaps Switch should have been left out then if it was that tight.
Why? It's genuinely useful.
>Sharing a keyword is just crass.
Don't you share `end`?
>Or maybe they should have considered
>not needing 'break' for switch.
Maybe? And yet here we are, 50+ years later.
>> The irony here, of course, is that you are claiming that C is
>> deficient because it doesn't solve what you see as a problem,
>> but trying to force the problem space specifically so that it
>
>No, /you/ are trying to discredit a simple solution by widening the
>goalposts.
Here we go again. Suffice it to say, no one is trying to
persecute you. People would take you more seriously if you
stopped whining about being a victim all the time.
>The main problem being discussed,
No, that is the problem _you_ are discussing. You're ignoring
any other problem anyone else points out, and you seem incapable
of considering that people might be dismissing your proposed
solution because it doesn't solve enough of a problem, and other
mechanisms are more general.
I recognize you are not going to understand, let alone
appreciate, the distinction here.
>and the one my test fixed, is that of
>'break' being used for two purposes and therefore resulting in clashes
>when Switches and Loops are mixed.
And what many others in this thread have told you is that that
is a "problem" that is trivially worked around, that a special
case for _that problem only_ is not worth it, and that a more
general solution is being added to the language in C2y.
What more do you want anyone to say?
>That could easily have been fixed by DMR choosing to use distinct
>keywords. Do you agree so far?
No. You've described what I consider to be a non-problem; a
mild annoyance at best, and certainly not something that
deserves complicating the language for.
The general category is more interesting, which is what I (and
probably others) have been trying to tell you. Instead of
appreciating that a more general solution to the entire category
of problems, that oh-by-the-way also solves this specific
problem exists, you instead whine about people moving goalposts.
No wonder the language never gets better in your view; you can't
see anything beyond your way of doing things.
>That of breaking out of nested loops is a different problem that would
>need a different solution, and nothing to do with the clash with switch.
Wrong. The new solution shows that it's actually the same
solution to the entire category of problems. And that's the
issue: it doesn't _need_ a different solution.
>It is also one that seems to be about 100 times less common IME.
...and yet it's easily solved using the labeled break mechanism
that is _already in the C2y draft_.
>> ...except for all the other cases where it is still awkward and
>> solves nothing.
>
>IT WAS ONLY SUPPOSED TO SOLVE THIS PROBLEM! Namely the issues that
>ensued from DMR overloading 'break'. NOTHING ELSE.
But that problem is easily solved using labeled breaks.
Overloading `break` is orthogonal to the solution.
>In fact the confusion between switch-break and loop-break will still be
>there even if labels are added.
I don't know that many C programmers are "confused" by the two
uses of that single keyword. Certainly, I've seen no evidence
that such confusion is widespread.
>>> Unless you've invented a new requirement where you want 'break' within a
>>> switch (itself solving an artificial problem) to jump straight to the
>>> end of an outer switch.
>>
>> Yes, that's exactly what I'm saying. Again, you've identified
>> one narrow problem,
>
>It's not that narrow a problem, unless you want to call loops themselves
>a narrow feature.
>
>It is one that many languages solve for LOOPs by using break or
>equivalent. But they tend not to broaden it either to include breaks out
>of arbitrary kinds of blocks.
I posted a bunch of languages that use labeled breaks earlier.
>> I think this is the central reason people don't take your
>> criticism of C particularly seriously.
>
>I'm sorry but here I don't take yours seriously either. (Have you ever
>implemented any of this stuff, or even used such features that you propose?)
Yes.
>>> 'Jumping to function scope' is poorly defined. Do you mean cutting
>>> across not only all loops, but any containing nested 'if' and 'switch'
>>> statements?
>>
>> What I mean is this:
>>
>> void
>> foo(void)
>> {
>> for (int i = 0; i < n; i++) {
>> for (int j = 0; j < m; i++) {
>> switch (something) {
>> case ...:
>> // I want to break out
>> // of the switch and
>> // both loops here.
>> goto label;
>> }
>> }
>> }
>> label:
>> }
>
>This example just breaks out of both loops. That the outer one is at
>function scope is incidental.
>
>If the outer loop was contained within an IF statement, could you jump
>to outside that statement using your proposed feature? If not then that
>is not function scope.
I thought that the context would have made it obvious what I
meant. I think you are attempting to be pedantic because you
want to save face by scoring a rhetorical point. Fine, my
earlier phrasing was poor. Happy?
With labeled break, this is actually quite clear: `break foo;`
jumps to the point immediately after the loop or switch
construct "named" by the label `foo`. Perhaps if you were more
familiar with the problem space it would have have been clearer.
> >> I could have done that in C but it would have taken more than 5
>minutes,>> and this was anyway a proof of concept.
>>
>> Yup. And it took less than that to point out problems.
>
>But it solved the problem I wanted to solve! It would solve the problem
>Michael S reported! That is, using distinct keywords for two different
>things.
That's the thing: that's not what the fundamental problem is.
The _actual_ problem is that, because of that and absent some
more expressive mechanism like a labeled break, you have no way
to express that you want to leave anything more than the most
deeply nested level.
for (;;) {
int ch = getchar();
switch (ch) {
case EOF:
break; // No way to say break out of the loop.
case 'a':
// ...whatever you want to do with 'a'....
break; // Continue the loop.
default:
// whatever....
break;
}
}
You are fixating on the overloaded keyword as _the problem_ and
thus intent on addressing that as _the solution_. But there the
_problem_ is actually more general. Here's how this might be
addressed using a labeled break:
loop: for (;;) {
int ch = getchar();
switch (ch) {
case EOF:
break loop;
case 'a':
// whatever.
break;
default:
// whatever.
break;
}
}
// Control resumes here after `break loop` above.
See? Problem solved. Along with a bunch of _other_ problems:
sw: switch (foo) {
case 'a':
while ((bar = whatever()) != -1) {
if (bar == SOMETHING) break sw;
}
whatnot();
break;
default:
// etc....
break;
}
>>> I've already used that approach for some decades in my other languages,
>>> but as I showed in the tables I posted, it is not common, and where
>>> used, it was always to break out of all loops.
>>>
>>> Anyway, I normally use 'all' instead of a specific number to quit all
>>> loops. A number works too but I dislike it.
>>
>> That sounds overly specific.
>
>So is breaking out of an inner loop with 'break;'! But it works well as
>it's by far the most common requirement. The next most common IME is to
>quit all loops (like you do in your example).
>
>In fact, if there are only two nested loops, the inner and outer cover
>all the possibilities.
...and all of this can be done with labeled break, which is
being added to the language.
Look, bart! Rejoice! The 50 year sin cardinal sin of Ritchie is
being corrected! Surely you must be simultaneously vindicated
and elated.
>> This is actually the argument against the counted multi-level
>> break: if I add or remove a level of nesting, I have to find and
>> adjust all of the counts. The labeled break mechanism ties the
>> `break` or `continue` to another syntactic element (a label), so
>
>No, it's just another set of problems as I said.
Not really.
>You can add new inner loops, delete inner loops, add outer ones, and
>each time you will need to consider whether the labels need to be moved,
>or extra ones added.
Yup. Welcome to being a programmer. Play your cards right and
one day you may even graduate to being a software engineer.
>Here's another solution I favour (not implemented), but it only works
>for FOR loops:
>
> for i in a..b
> for j in c..d
> ... break i
>
>It's a little like using a label, but here that 'label' is the loop
>index. (This won't work in C as there are no formal loop indices.)
And with C2y, you can write:
outer: for (int i = a, i < b; i++) {
for (int j = c; j < d; j++) {
// ...
break outer;
}
}
// We continue here after `break outer`.
Problem solved.
>> if I add or remove a nesting level, I'm still breaking to where
>> I had intended to before.
>
>Yes, but that might now be the wrong loop.
Yup. But note the difference between "may be" and "will be".
With counts, it will be. And as I said, none of these
constructs absolve one of the responsibility to be a competent
programmer.
>> That said, applying the argument to the labeled case is silly.
>> Software engineering and good programming practice still matter.
>> If you are changing the nested looping structure of your
>> program, then you should know where you want to break to;
>> presumably your program's behavior depends on it.
>
>Agreed; see below.
>
>> I'd say the stronger argument for the labeled control structure
>> is actually nested switch statements, where I may change a
>> series of `if`s to a `switch` with a `case` that contains a
>> nested `switch`, or I may change a `switch` to an `if`; if the
>> intent is to break out of an enclosing loop, labeled breaks are
>> resilient to that, but counted breaks are not.
>
>You're assuming that the count in indexed breaks includes switch
>statements. It shouldn't; that would be preposterous, and it all still
>comes down to the shared 'break' keyword.
>
>How about fixing that first, or even admitting it was wrong, before
That's the thing; it's orthogonal to the root problem. "Admit
that it was wrong" is the wrong way to look at it. Was it
weird? I dunno; maybe. Unconventional at the time? I have no
idea. Fundamentally broken? No.
> >> Maybe the original set of loop performed some task T, and the new
>loop>> wants to repeat T, in which case it must stay inside.
>>
>> Yes.
>>
>>> Or maybe it is really has to quit ALL loops including any future outer
>>> ones. Neither labeling or numbering solves this.
>>
>> No. If I want to break out of *all* loops, I just make sure
>> that the outermost loop is labeled thusly.
>
>But in my first example, that is not what you want! It all depends.
As I said, welcome to being a programmer. Hard, isn't it?
>I don't like using multi-level loop exit, it's an untidy feature even
>though I implement it. And I don't like using labeled solutions, as they
>just turn them into thinly disguised gotos.
ALL of these control constructs are "thinly disguised gotos."
That is the arc of development over time: we started with blunt
instruments like `goto`, and refined practices to where we have
identified useful patterns, that we then extract into first
class constructs of their own.
This ebbs and flows over time; C++-style exceptions were seen as
a necessary feature at one point, now many people strive to
avoid them; Google prohibits their use outright, in a code base
with billions of lines of code written in that language.
>>> Labeled loops may also have a new problem with scoping: is the loop name
>>> local to this nest of loops, or could an outer loop name especially
>>> clash with other loop elsewhere?
>>
>> Since labels are, you know, labels, they follow the semantics of
>> ... labels.
>
>Careful here: do you really mean that loop-labels will be in the same
>name-space as ordinary labels? That means:
Yes, that's what I mean. Go read the draft standard yourself.
>[snip chest thumping puffery]
>
>See there's a bit more to this language-design lark!
Indeed! You demonstrated just how easily it can break down with
your `breakloop` proposal.
>>> I've just done a survey in my major apps and haven't found an instance
>>> where those latter two needed to cross two or more loops.
>>
>> Anecdotal evidence, I'm afraid.
>
>You're welcome to post your own surveys. Although unless the languages
>used in your survey support such features, you may find that hard.
I'm not the one trying to make the point you are attempting to
make. You made a claim; the onus is on you to provide evidence
for that claim.
>> It's easy enough to look it up in the draft document; Keith
>> posted a link.
>
>Is that that 793-page document? Perhaps you can summarise how it works!
I understand; it's a difficult document to follow when you are
already pre-biased to disregard what it says, as you have
repeatedly shown yourself to be.
In this case, it's not too hard, though; the second page says,
|The following changes were made on or after the 2024
|September/October Minneapolis, USA meeting:
|
| ...about 2/3rds of the way down the list...
| - N3355: Named/Labeled Loops
So we can look at N3355 for discussion:
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3355.htm
That's much shorter than the 793-page draft standard. Perhaps
you'll find it easier to understand.
>>>> This illustrates one reason why changing a language can be hard:
>>>> your idea sounds good at first blush, but it has its own
>>>> deficiencies.
>>>
>>> I appreciate your concern. I've only been doing this (devising and
>>> implementing systems languages) for 45 years!
>>
>> That really doesn't mean anything. Just doing something for a
>> long time doesn't mean you're good at it: I have been shooting
>> baskets for 45 years, but I will never be a point guard in the
>> NBA.
>
>And yet I've solved all the problems in this thread and many others.
Congratulations! And yet, despite you being obviously more
intelligent than all of Ritchie, McIlroy, Thompson, Johnson,
Kernighan, Plauger, and all of those who have and continue to
contribute to the development of C combined, we don't see your
name on the list of contributors to that language, nor does
anyone other than you use your language.
But keep shooting hoops, bart. Maybe some day a talent scout
will see you in your driveway and give you a starting position
on a playoff team.
- Dan C.
[toc] | [prev] | [next] | [standalone]
| From | Michael S <already5chosen@yahoo.com> |
|---|---|
| Date | 2026-10-14 23:28 +0300 |
| Message-ID | <20261014232810.0000352a@yahoo.com> |
| In reply to | #403162 |
On Wed, 14 Oct 2026 19:30:28 -0000 (UTC)
cross@spitfire.i.gajendra.net (Dan Cross) wrote:
> In article <11ao8af$1k8p3$1@dont-email.me>, bart <bc@freeuk.com>
> wrote:
> >On 14/10/2026 13:38, Dan Cross wrote:
> >> In article <11anobe$1dt0e$1@dont-email.me>, bart <bc@freeuk.com>
> >> wrote:
> >>> I'd even suggest that using distinct keywords in the original C
> >>> compiler would have made it a tiny bit simpler.)
> >>
> >> Unlikely. I'm trying to chase down the citation, but it was
> >> known that getting B to fit on the PDP-7 was a challenge. From
> >> the C history paper,
> >
> >Perhaps Switch should have been left out then if it was that tight.
>
> Why? It's genuinely useful.
>
C switch is in the middle between low level construct (computed goto)
and higher level select/case/whatever of many other languages.
I suppose that implementing true low level alternative would have been
simpler for compiler. And it would be even more powerful than current
construct. Of course, also more dangerous, but being dangerous is not
against C philosophy.
int foo()
{
...
case 42:
....
switch(bar(x)); // can go not just to 6 and 7, but to 42 as well.
// if there is no 'default:' in the scope then default ends up here
....
case 6:
...
case 7:
etc...
}
[toc] | [prev] | [next] | [standalone]
| From | Tim Rentsch <tr.17687@z991.linuxsc.com> |
|---|---|
| Date | 2026-10-14 21:30 -0700 |
| Message-ID | <86o6cvr3g4.fsf@linuxsc.com> |
| In reply to | #403166 |
Michael S <already5chosen@yahoo.com> writes:
> On Wed, 14 Oct 2026 19:30:28 -0000 (UTC)
> cross@spitfire.i.gajendra.net (Dan Cross) wrote:
>
>> In article <11ao8af$1k8p3$1@dont-email.me>, bart <bc@freeuk.com>
>> wrote:
>>
>>> On 14/10/2026 13:38, Dan Cross wrote:
>>>
>>>> In article <11anobe$1dt0e$1@dont-email.me>, bart <bc@freeuk.com>
>>>> wrote:
>>>>
>>>>> I'd even suggest that using distinct keywords in the original C
>>>>> compiler would have made it a tiny bit simpler.)
>>>>
>>>> Unlikely. I'm trying to chase down the citation, but it was
>>>> known that getting B to fit on the PDP-7 was a challenge. From
>>>> the C history paper,
>>>
>>> Perhaps Switch should have been left out then if it was that tight.
>>
>> Why? It's genuinely useful.
>
> C switch is in the middle between low level construct (computed goto)
> and higher level select/case/whatever of many other languages.
> I suppose that implementing true low level alternative would have been
> simpler for compiler. And it would be even more powerful than current
> construct. Of course, also more dangerous, but being dangerous is not
> against C philosophy.
>
> int foo()
> {
> ...
> case 42:
> ....
> switch(bar(x)); // can go not just to 6 and 7, but to 42 as well.
> // if there is no 'default:' in the scope then default ends up here
> ....
> case 6:
> ...
> case 7:
> etc...
>
> }
I'm reminded of a quote from E.W. Dijkstra:
"No, gentlemen. Three times no."
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-14 21:56 +0100 |
| Message-ID | <11aoqa9$1rgda$1@dont-email.me> |
| In reply to | #403162 |
On 14/10/2026 20:30, Dan Cross wrote:
> In article <11ao8af$1k8p3$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>> Perhaps Switch should have been left out then if it was that tight.
>
> Why? It's genuinely useful.
If-else chains can do the same job.
>> Sharing a keyword is just crass.
>
> Don't you share `end`?
No, that has one meaning which is to terminate a block, there are no
repercussions as there are with C-break which has two meanings.
>> That could easily have been fixed by DMR choosing to use distinct
>> keywords. Do you agree so far?
>
> No. You've described what I consider to be a non-problem; a
> mild annoyance at best, and certainly not something that
> deserves complicating the language for.
I'd call it a 'howler'. Even if trivial, it was ludicrously simple to
avoid, and Michael S wouldn't have needed workarounds or to have waited
for C2y to be generally available which provides an official workaround.
Yes, in the simple case of while-switch (see below) it is still
something extra that is need to overcome that 1972 boo-boo.
> So we can look at N3355 for discussion:
> https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3355.htm
I found it eventually. But I saw two proposals, I think the other was
N3357(?). The difference is that the latter puts the loop label after
the keyword, so 'for label (' rather than 'label: for (', which makes
the labels local to the loop, so avoiding the issues below.
gcc 16.2.0 seems to implement N3355, so the points I made are actually
true, which is surprising. So here:
L1:
while (1) {
goto L1; // jumps to L1
continue L1; // jumps to just before }
break L1; // jumps to just after }
}
L1: // error: duplicate label
while ...
Meanwhile:
while (1) {
if (x == 3)
break; // this quits the loop as before
}
while (1) {
switch (x) {
case 3:
break; // this doesn't break the loop
}
}
So this part hasn't changed. What's changed is that there is a more
direct workaround:
loop:
while (1) {
switch (x) {
case 3:
break loop; // this doesn't break the loop
}
}
Which looks remarkably like the solution I knocked up in 2 minutes:
while (1) {
switch (x) {
case 3:
breakloop; // this doesn't break the loop
}
}
The difference is, I can consistently use 'breakloop' everywhere: I can
duplicate this in the same function. But the 'loop' label is unique to
that while-loop. (This is what NN3357 or whatever could have fixed.)
As for multiple nested loops, this will fix that too, that's great. We
just require some real examples of that being needed!
>> And yet I've solved all the problems in this thread and many others.
> Congratulations! And yet, despite you being obviously more
> intelligent than all of Ritchie, McIlroy, Thompson, Johnson,
> Kernighan, Plauger, and all of those who have and continue to
> contribute to the development of C combined,
Well, my personal C has 'breakloop'! Usually these micro-extensions are
shortlived, but I'll keep this one.
we don't see your
> name on the list of contributors to that language, nor does
> anyone other than you use your language.
It's enough that I used it and benefited from it.
This is that last example in my syntax (if the switch were the only
statement within the loop otherwise two more tokens needed):
doswitch x
when 3 then exit
end
7 tokens vs. 20 tokens using N3355, and it's repeatable within the
function because 'exit' is relative.
> But keep shooting hoops, bart. Maybe some day a talent scout
> will see you in your driveway and give you a starting position
> on a playoff team.
I really don't care. Most things in the world are not going the way I'd
like, and I'm not the only one who thinks that.
This language stuff is small potatoes but it gives me kick to have long
ago come up with solutions that some languages take ... 54 years to
produce a compromise.
Anyway, at least you've been a sport, unlike Mr. P.
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-14 21:59 +0100 |
| Message-ID | <11aoqfp$1rgda$2@dont-email.me> |
| In reply to | #403167 |
On 14/10/2026 21:56, bart wrote: > On 14/10/2026 20:30, Dan Cross wrote: > break loop; // this doesn't break the loop > breakloop; // this doesn't break the loop Ignore those comments, which are not true!
[toc] | [prev] | [next] | [standalone]
| From | cross@spitfire.i.gajendra.net (Dan Cross) |
|---|---|
| Date | 2026-10-15 01:26 +0000 |
| Message-ID | <11apa4b$kv$1@reader2.panix.com> |
| In reply to | #403167 |
In article <11aoqa9$1rgda$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>On 14/10/2026 20:30, Dan Cross wrote:
>[snip more of the same already hashed and rehashed ad naseum]
>
>As for multiple nested loops, this will fix that too, that's great. We
>just require some real examples of that being needed!
Here's a pretty terrible way to write part of a lexical
analyzer. I just typed this in an hour or so ago.
#include <ctype.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static size_t lineno = 1;
static size_t colno = 0;
#define MAXTOKLEN 1024
typedef enum TokenType TokenType;
enum TokenType {
TkERROR = -1,
TkEOF = 0,
TkSTAR = '*',
TkSLASH = '/',
TkPLUS = '+',
TkMINUS = '-',
TkLT = '<',
TkGT = '>',
TkEQ = '=',
TkBANG = '!',
TkGE = 0x1000,
TkLE,
TkSTRING,
TkIDENT,
// etc....
};
typedef struct Token Token;
struct Token {
TokenType type;
char *token;
};
Token *
newtoken(TokenType tt, char *s, char *e)
{
size_t len = sizeof(Token) + (e - s) + 1 + (e == s);
Token *token = malloc(len);
if (token == NULL) abort();
memset(token, 0, len);
token->type = tt;
token->token = (char *)token + sizeof(*token);
token->token[0] = tt;
if (e != s)
memcpy(token->token, s, e - s);
return token;
}
static int
peek(FILE *fp)
{
int ch = fgetc(fp);
if (ch != EOF)
ungetc(ch, fp);
return ch;
}
Token *
nexttoken(FILE *fp)
{
char tokstr[MAXTOKLEN], *tp = tokstr, *te = tokstr + MAXTOKLEN - 1;
enum TokenType tt = TkEOF;
Token *next = NULL;
int ch;
unsigned char c;
loop:
while ((ch = fgetc(fp)) != EOF) {
tt = TkERROR;
++colno;
switch (ch) {
case '\n':
++lineno;
colno = 0;
case ' ':
case '\t':
case '\f':
case '\v':
case '\r':
break;
case '*':
tt = TkSTAR;
break loop;
case '/':
tt = TkSLASH;
ch = peek(fp);
switch (ch) {
case EOF:
break loop;
case '/':
while ((ch = fgetc(fp)) != '\n')
if (ch == EOF)
break loop;
ungetc(ch, fp);
continue;
default:
break;
}
break loop;
case '+':
tt = TkPLUS;
break loop;
case '-':
tt = TkMINUS;
break loop;
case '<':
tt = TkLT;
*tp++ = '<';
ch = peek(fp);
switch (ch) {
case EOF:
break loop;
case '=':
tt = TkLE;
*tp++ = '=';
break;
default:
break;
}
*tp++ = '\0';
break loop;
case '>':
tt = TkGT;
*tp++ = '>';
ch = peek(fp);
switch (ch) {
case EOF:
break loop;
case '=':
tt = TkGE;
*tp++ = '=';
break;
default:
break;
}
*tp++ = '\0';
break loop;
case '=':
tt = TkEQ;
break loop;
case '!':
tt = TkBANG;
break loop;
case '"':
tt = TkERROR;
sloop:
while (tp != te) {
ch = fgetc(fp);
switch (ch) {
case EOF:
break loop;
case '"':
break sloop;
case '\\':
ch = fgetc(fp);
switch (ch) {
case EOF:
break loop;
case 'n':
ch = '\n';
break;
case 'r':
ch = '\r';
break;
case 't':
ch = '\t';
break;
default:
break;
}
default:
*tp++ = ch;
break;
}
}
*tp++ = '\0';
tt = TkSTRING;
break loop;
default:
c = ch;
if (c != '_' && !isalnum(c))
break loop;
*tp++ = c;
while (tp != te) {
ch = fgetc(fp);
if (ch == EOF)
break loop;
c = ch;
if (c != '_' && !isalnum(c)) {
ungetc(ch, fp);
break;
}
*tp++ = c;
}
*tp++ = '\0';
tt = TkIDENT;
break loop;
}
}
next = newtoken(tt, tokstr, tp);
return next;
}
int
main(void)
{
Token *tok;
while ((tok = nexttoken(stdin)) != NULL) {
if (tok->type == TkEOF)
break;
if (tok->type != TkERROR)
printf("tok: tt = %x, token = '%s'\n", tok->type, tok->token);
free(tok);
}
return 0;
}
>>> And yet I've solved all the problems in this thread and many others.
>
>> Congratulations! And yet, despite you being obviously more
>> intelligent than all of Ritchie, McIlroy, Thompson, Johnson,
>> Kernighan, Plauger, and all of those who have and continue to
>> contribute to the development of C combined,
>
>Well, my personal C has 'breakloop'! Usually these micro-extensions are
>shortlived, but I'll keep this one.
Consider that perhaps your obstinance about keeping this sort
of poorly thought-through extension is WHY no one but you uses
your stuff.
> we don't see your
>> name on the list of contributors to that language, nor does
>> anyone other than you use your language.
>
>It's enough that I used it and benefited from it.
>
>This is that last example in my syntax (if the switch were the only
>statement within the loop otherwise two more tokens needed):
>
> doswitch x
> when 3 then exit
> end
>
>7 tokens vs. 20 tokens using N3355, and it's repeatable within the
>function because 'exit' is relative.
Ok. Don't really care.
>> But keep shooting hoops, bart. Maybe some day a talent scout
>> will see you in your driveway and give you a starting position
>> on a playoff team.
>
>I really don't care. Most things in the world are not going the way I'd
>like, and I'm not the only one who thinks that.
>
>This language stuff is small potatoes but it gives me kick to have long
>ago come up with solutions that some languages take ... 54 years to
>produce a compromise.
>
>Anyway, at least you've been a sport, unlike Mr. P.
*shrug*
- Dan C.
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-15 12:01 +0100 |
| Message-ID | <11aqbqv$2avn3$1@dont-email.me> |
| In reply to | #403173 |
On 15/10/2026 02:26, Dan Cross wrote:
> In article <11aoqa9$1rgda$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>> On 14/10/2026 20:30, Dan Cross wrote:
>> [snip more of the same already hashed and rehashed ad naseum]
>>
>> As for multiple nested loops, this will fix that too, that's great. We
>> just require some real examples of that being needed!
>
> Here's a pretty terrible way to write part of a lexical
> analyzer. I just typed this in an hour or so ago.
....
Wow, it's impressive that you went to that trouble just to prove a point
about nested loops. (Even if it might have been a little bit contrived.)
But this is an interesting pattern with all those breaks:
break;
break loop;
break loop;
break loop;
break;
break loop;
break loop;
break loop;
break loop;
break;
break;
break loop;
break loop;
break;
break;
break loop;
break loop;
break loop;
break loop;
break sloop;
break loop;
break;
break;
break;
break;
break;
break loop;
break loop;
break loop;
break; // loop
break loop;
break; // loop
It seems most uses of 'break;' to break out of a loop have disappeared
to be replaced with labeled versions.
The remaining breaks are switch-breaks.
Then I start looking at some of those "breaks;". Some (maybe one) is at
top-level, it jumps to the end of that switch, so the end of the while,
so is really 'continue'.
Most are in nested switches, some of those jump to a 'break loop'. Some
jump somewhere else...
Basically this is spaghetti code (I know you said it was terrible); your
eyes glaze over with breaks everywhere and you give up trying to figure
out the control flow.
There are examples like this:
continue;
default:
break;
}
break loop;
Do you even need 'default: break;}' or even an empty default:?
I then tried an experiment where I got rid of switch-break, to see what
C code with automatic switch-break would look like.
It was a big improvement, now that you know that every case-blocks
proceeds to the end of that switch, and you don't need to double-check
every 'break' to see if it's to do with switches or loops:
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break loop;
break sloop;
break loop;
break loop;
break loop;
break loop;
break;
break loop;
break;
All these are known to be loops, even 'break;'.
But also, labeled versions except three 'break loops' can be written as
'break', since 'switch break' does not exist. You're left with:
break loop;
break loop;
break loop;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
break;
(Not ordered.) Compare with the first set.
>> [snip more of the same already hashed and rehashed ad naseum]
Perhaps that reused keyword thing is a bigger deal than you think. The
effect of it is unnecessary obfuscation.
[toc] | [prev] | [next] | [standalone]
| From | cross@spitfire.i.gajendra.net (Dan Cross) |
|---|---|
| Date | 2026-10-15 11:45 +0000 |
| Message-ID | <11aqect$hpr$1@reader2.panix.com> |
| In reply to | #403184 |
In article <11aqbqv$2avn3$1@dont-email.me>, bart <bc@freeuk.com> wrote: >On 15/10/2026 02:26, Dan Cross wrote: >> In article <11aoqa9$1rgda$1@dont-email.me>, bart <bc@freeuk.com> wrote: >>> On 14/10/2026 20:30, Dan Cross wrote: >>> [snip more of the same already hashed and rehashed ad naseum] >>> >>> As for multiple nested loops, this will fix that too, that's great. We >>> just require some real examples of that being needed! >> >> Here's a pretty terrible way to write part of a lexical >> analyzer. I just typed this in an hour or so ago. >.... > >Wow, it's impressive that you went to that trouble just to prove a point >about nested loops. (Even if it might have been a little bit contrived.) > >But this is an interesting pattern with all those breaks: > > [snip] > >It seems most uses of 'break;' to break out of a loop have disappeared >to be replaced with labeled versions. > >The remaining breaks are switch-breaks. > >Then I start looking at some of those "breaks;". Some (maybe one) is at >top-level, it jumps to the end of that switch, so the end of the while, >so is really 'continue'. > >Most are in nested switches, some of those jump to a 'break loop'. Some >jump somewhere else... > >Basically this is spaghetti code (I know you said it was terrible); your >eyes glaze over with breaks everywhere and you give up trying to figure >out the control flow. Perhaps if I had spent more than like, 30 minutes, on it I would have tidied it up. The point was to illustrate a contrived example where one might break out of nested switch statements, loops inside of switch, switch inside of loops, loops inside of switch inside of loops, and so on. >There are examples like this: > > continue; > default: > break; > } > break loop; > >Do you even need 'default: break;}' or even an empty default:? You don't, but some compilers will complain if it isn't there. See above. It was merely a quick and dirty example. >I then tried an experiment where I got rid of switch-break, to see what >C code with automatic switch-break would look like. > >It was a big improvement, now that you know that every case-blocks >proceeds to the end of that switch, and you don't need to double-check >every 'break' to see if it's to do with switches or loops: > > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break loop; > break sloop; > break loop; > break loop; > break loop; > break loop; > break; > break loop; > break; > >All these are known to be loops, even 'break;'. > >But also, labeled versions except three 'break loops' can be written as >'break', since 'switch break' does not exist. You're left with: > > break loop; > break loop; > break loop; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > break; > >(Not ordered.) Compare with the first set. Compare what? Without the surrounding context, this is utterly meaningless: this isn't a useful illustration of working code; this is the output of `grep`. (btw, if you `|sort |uniq -c` you can actually get counts! You can even `|sort |uniq -c |sort -n` to order by frequency of occurrence!) > >> [snip more of the same already hashed and rehashed ad naseum] > >Perhaps that reused keyword thing is a bigger deal than you think. The >effect of it is unnecessary obfuscation. This is certainly not evidence of that. This is just your assertion that you took a silly example and apparently (maybe?) improved it, based on some unstated, but apparently subjective, criteria. - Dan C.
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-15 15:57 +0100 |
| Message-ID | <11aqpl3$2gdup$1@dont-email.me> |
| In reply to | #403186 |
On 15/10/2026 12:45, Dan Cross wrote:
> In article <11aqbqv$2avn3$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>> Perhaps that reused keyword thing is a bigger deal than you think. The
>> effect of it is unnecessary obfuscation.
>
> This is certainly not evidence of that. This is just your
> assertion that you took a silly example and apparently (maybe?)
> improved it, based on some unstated, but apparently subjective,
> criteria.
I am stating that 'break' used to fix C's poor 'switch' feature
interferes with 'break' used for loops.
It's not even my opinion: it's fact. In your example, about a third of
'break' tokens are for taking care of switch.
My opinion is that it generates pointless clutter (this it would do even
if a different keyword was used), and it can get confusing when switch
and loop are mixed up.
I actually took your program and ported it to my syntax, as I was
curious how it would look. This is the result:
https://github.com/bart-2026/langs/blob/main/lexertest.m
(It's been spaced out more, vertically.)
There were some tricky bits of the C to translate, such as:
break;
default:
break;
}
default:
*tp++ = ch;
break;
}
}
*tp++ = '\0';
tt = TkSTRING;
where it seems to break from one switch then sneakily falls through into
the default clauses of the enclosing one!
Well, here are some stats:
C Mine
Size 3374 2997 characters (both with hard tabs)
Non-blank lines 210 174 Lines
I did try and run mine:
c:\mapps>test
1234
tok: tt = tkident, token = '1234'
abc
tok: tt = tkident, token = 'abc'
It shows both of these as an identifier. But yours does the same:
c:\c>a
1234
tok: tt = 1003, token = '1234'
abc
tok: tt = 1003, token = 'abc'
Whatever '1003' means, it's showing the same. So it will do (I don't
care if the code is buggy, just whether my version is reasonably faithful).
Of course, my actual lexers have a different structure.
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-15 18:10 +0100 |
| Message-ID | <11ar1f5$2jod3$1@dont-email.me> |
| In reply to | #403190 |
On 15/10/2026 15:57, bart wrote: > On 15/10/2026 12:45, Dan Cross wrote: >> In article <11aqbqv$2avn3$1@dont-email.me>, bart <bc@freeuk.com> wrote: > >>> Perhaps that reused keyword thing is a bigger deal than you think. The >>> effect of it is unnecessary obfuscation. >> >> This is certainly not evidence of that. This is just your >> assertion that you took a silly example and apparently (maybe?) >> improved it, based on some unstated, but apparently subjective, >> criteria. > I am stating that 'break' used to fix C's poor 'switch' feature > interferes with 'break' used for loops. > > It's not even my opinion: it's fact. In your example, about a third of > 'break' tokens are for taking care of switch. > > My opinion is that it generates pointless clutter (this it would do even > if a different keyword was used), and it can get confusing when switch > and loop are mixed up. > > I actually took your program and ported it to my syntax, as I was > curious how it would look. This is the result: > > https://github.com/bart-2026/langs/blob/main/lexertest.m > > (It's been spaced out more, vertically.) > Well, here are some stats: > I did try and run mine: Enough worked that I decided to try a speed test. Both use exactly the same algorithm, and I didn't expect either to be fast. Still, the version in my language/compiler was 50% faster than the C compiled with gcc-O3. I don't know why. (My production lexers, even in my language so unoptimised, tend to be at least a magnitude faster and do more stuff such as symbol table lookups.)
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-16 02:42 +0100 |
| Message-ID | <11arveu$2tq3v$1@dont-email.me> |
| In reply to | #403192 |
On 15/10/2026 18:10, bart wrote: > On 15/10/2026 15:57, bart wrote: >> On 15/10/2026 12:45, Dan Cross wrote: >>> In article <11aqbqv$2avn3$1@dont-email.me>, bart <bc@freeuk.com> wrote: >> >>>> Perhaps that reused keyword thing is a bigger deal than you think. The >>>> effect of it is unnecessary obfuscation. >>> >>> This is certainly not evidence of that. This is just your >>> assertion that you took a silly example and apparently (maybe?) >>> improved it, based on some unstated, but apparently subjective, >>> criteria. >> I am stating that 'break' used to fix C's poor 'switch' feature >> interferes with 'break' used for loops. >> >> It's not even my opinion: it's fact. In your example, about a third of >> 'break' tokens are for taking care of switch. >> >> My opinion is that it generates pointless clutter (this it would do >> even if a different keyword was used), and it can get confusing when >> switch and loop are mixed up. >> >> I actually took your program and ported it to my syntax, as I was >> curious how it would look. This is the result: >> >> https://github.com/bart-2026/langs/blob/main/lexertest.m >> >> (It's been spaced out more, vertically.) > >> Well, here are some stats: > >> I did try and run mine: > Enough worked that I decided to try a speed test. Both use exactly the > same algorithm, and I didn't expect either to be fast. > > Still, the version in my language/compiler was 50% faster than the C > compiled with gcc-O3. I don't know why. I'm mildly curious about this even if no one else is (or they think it is some sort of boasting although I said I didn't know the reason). I've now converted DC's C program to use normal gotos, so that I can try with other compilers. For my test (10M lines of the same 8 tokens): gcc 16.x 28 seconds (any opt. level) gcc 14.x 18 seconds clang-O3 18 seconds tcc 18 seconds bcc 18 seconds mm 18 seconds (my lang) Figures are pretty much at those two levels. So it's more likely a library thing and it is i/o bound. Anyway, I'm done with all this now; my C compiler and related apps are no more.
[toc] | [prev] | [next] | [standalone]
| From | cross@spitfire.i.gajendra.net (Dan Cross) |
|---|---|
| Date | 2026-10-15 20:42 +0000 |
| Message-ID | <11ardsd$26m$1@reader2.panix.com> |
| In reply to | #403190 |
In article <11aqpl3$2gdup$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>On 15/10/2026 12:45, Dan Cross wrote:
>> In article <11aqbqv$2avn3$1@dont-email.me>, bart <bc@freeuk.com> wrote:
>
>>> Perhaps that reused keyword thing is a bigger deal than you think. The
>>> effect of it is unnecessary obfuscation.
>>
>> This is certainly not evidence of that. This is just your
>> assertion that you took a silly example and apparently (maybe?)
>> improved it, based on some unstated, but apparently subjective,
>> criteria.
>
>I am stating that 'break' used to fix C's poor 'switch' feature
>interferes with 'break' used for loops.
Sure.
>It's not even my opinion: it's fact. In your example, about a third of
>'break' tokens are for taking care of switch.
Ok.
>My opinion is that it generates pointless clutter (this it would do even
>if a different keyword was used), and it can get confusing when switch
>and loop are mixed up.
Ok.
>I actually took your program and ported it to my syntax, as I was
>curious how it would look. This is the result:
>
>https://github.com/bart-2026/langs/blob/main/lexertest.m
>
>(It's been spaced out more, vertically.)
>
>There were some tricky bits of the C to translate, such as:
>
> break;
> default:
> break;
> }
> default:
> *tp++ = ch;
> break;
> }
> }
> *tp++ = '\0';
> tt = TkSTRING;
>
>where it seems to break from one switch then sneakily falls through into
>the default clauses of the enclosing one!
Yup.
>Well, here are some stats:
>
> C Mine
>
> Size 3374 2997 characters (both with hard tabs)
> Non-blank lines 210 174 Lines
Those seem like pretty meaningless statistics. I could really
care less about 377 fewer bytes. Naturally, different languages
will express these things differently.
>I did try and run mine:
>
> c:\mapps>test
> 1234
> tok: tt = tkident, token = '1234'
> abc
> tok: tt = tkident, token = 'abc'
>
>It shows both of these as an identifier. But yours does the same:
>
> c:\c>a
> 1234
> tok: tt = 1003, token = '1234'
> abc
> tok: tt = 1003, token = 'abc'
Yup. It's a poorly written program; I am not surprised there
are bugs. It wasn't meant to be an illustration of exemplary
programming, it was meant to illustrate a use case for a
language construct that addresses a use case you appeared to
want support for, but that are now upset about, because it was
not provided in the way you like. Or something.
>Whatever '1003' means, it's showing the same. So it will do (I don't
>care if the code is buggy, just whether my version is reasonably faithful).
This is actually a good example of the problem you often run
into in these endless c.l.c threads: You seem to take a thing
that was something that was only meant to show one thing, and
asserting that it represents something other than what it was
meant to show, and no matter how many times it is explained to
you that it is not, in fact, what you seem to think that it is,
you persist in your delusion and think that it proves something.
But it doesn't, since you are starting from a false premise, at
which point you whine that you are picked on, treated poorly,
misunderstood, or generally dismissed, to which you conclude
that this can only be due to a slavish devotion to C as it is,
and a refusal to entertain that the language is not perfect. It
is totally lost on you that people may be objecting to what you
are saying on its own merits, since (ironically) you don't seem
able to admit that your own ideas may have their own
deficiencies.
This whole discussion could be summarized as:
Bart: "C sucks because Dennis Ritchie stupidly reused `break`
for both loops and switch. He was a tasteless fool."
All: "You can work around that really easily."
Keith: "C added labeled break and continue...."
Bart: "C sucks. My language is better. Here, I fixed C in 4
lines of code with my `breakloop`, but it still sucks
because C is hopeless."
Me: "No, the real problem is that there's no structured way
break out of nested contexts; your thing only addresses
one special case, and does not compose, so can't cover
the general case."
Bart: "No, it's the overloading. C is terrible and you're all
just too blind to see it. You are all fools, like
Dennis Ritchie."
Me: "I mean, Keith told you how the language is being changed
to address your problem _and_ the other problems in this
general category."
Bart: "Those other problems don't matter. C will never change.
It will suck forever. I mean, have you ever even seen a
use case for these labeled blocks? I don't like them,
therefore they suck, just like C. They also suck
because they solve a problem I don't care about. I have
been doing this for 45 years."
Me: "Here's a program that illustrates the problem. The code
is shit, but shows how it can be used...."
Bart: "This program sucks! You don't _need_ to do it this
way."
Me: "...I mean, I told you it sucked when I posted it...."
Bart: "...I rewrote it in my language. I saved 377 bytes. See
how much C sucks now? My language is better.
Me: "...."
Bart: "My lexer is 50% faster than your lexer. My production
code is an order of magnitude faster. I am a very smart
boy, and deserve a very special gold star on my report
card."
Me: "...Bruh."
Bart: "Dennis Ritchie was a fool. A fool, I say! Haha!
Ahahaha! Muwhahaha!"
>Of course, my actual lexers have a different structure.
If I actually wanted a real lexer for C, I'd probably use a
lexer generator to generate one from a declarative description
of the language's lexemes.
Now then. Did you see how it used labeled break and continue to
move about through the various control structures in ways that
would not be representable if you only had `breakloop`? Yes, of
course you can restructure the code, but that's not the point;
the point was only to show how one might use labeled loops and
switches and so on to implement control flows that one cannot
express _without_ such facil
The irony is that you are saying, in effect, "oh but you don't
actually _need_ to do it that way..." to something you don't
care for, when throughout the thread you have been specifically
rejecting that same argument as a response your assertion that
something that addressed this very use case was badly needed, to
fix Dennis Ritchie's "mistake" of using `break` for both loops
and `switch`. Seriously. The stunning lack of self-awareness
is really quite breathtaking.
- Dan C.
[toc] | [prev] | [next] | [standalone]
| From | Michael S <already5chosen@yahoo.com> |
|---|---|
| Date | 2026-10-15 23:57 +0300 |
| Message-ID | <20261015235752.00002222@yahoo.com> |
| In reply to | #403195 |
On Thu, 15 Oct 2026 20:42:53 -0000 (UTC) cross@spitfire.i.gajendra.net (Dan Cross) wrote: > In article <11aqpl3$2gdup$1@dont-email.me>, bart <bc@freeuk.com> > wrote: > >On 15/10/2026 12:45, Dan Cross wrote: > >> In article <11aqbqv$2avn3$1@dont-email.me>, bart <bc@freeuk.com> > >> wrote: > > > >>> Perhaps that reused keyword thing is a bigger deal than you > >>> think. The effect of it is unnecessary obfuscation. > >> > >> This is certainly not evidence of that. This is just your > >> assertion that you took a silly example and apparently (maybe?) > >> improved it, based on some unstated, but apparently subjective, > >> criteria. > > > >I am stating that 'break' used to fix C's poor 'switch' feature > >interferes with 'break' used for loops. > > Sure. > > >It's not even my opinion: it's fact. In your example, about a third > >of 'break' tokens are for taking care of switch. > > Ok. > > >My opinion is that it generates pointless clutter (this it would do > >even if a different keyword was used), and it can get confusing when > >switch and loop are mixed up. > > Ok. > > >I actually took your program and ported it to my syntax, as I was > >curious how it would look. This is the result: > > > >https://github.com/bart-2026/langs/blob/main/lexertest.m > > > >(It's been spaced out more, vertically.) > > > >There were some tricky bits of the C to translate, such as: > > > > break; > > default: > > break; > > } > > default: > > *tp++ = ch; > > break; > > } > > } > > *tp++ = '\0'; > > tt = TkSTRING; > > > >where it seems to break from one switch then sneakily falls through > >into the default clauses of the enclosing one! > > Yup. > > >Well, here are some stats: > > > > C Mine > > > > Size 3374 2997 characters (both with hard > > tabs) Non-blank lines 210 174 Lines > > Those seem like pretty meaningless statistics. I could really > care less about 377 fewer bytes. Naturally, different languages > will express these things differently. > > >I did try and run mine: > > > > c:\mapps>test > > 1234 > > tok: tt = tkident, token = '1234' > > abc > > tok: tt = tkident, token = 'abc' > > > >It shows both of these as an identifier. But yours does the same: > > > > c:\c>a > > 1234 > > tok: tt = 1003, token = '1234' > > abc > > tok: tt = 1003, token = 'abc' > > Yup. It's a poorly written program; I am not surprised there > are bugs. It wasn't meant to be an illustration of exemplary > programming, it was meant to illustrate a use case for a > language construct that addresses a use case you appeared to > want support for, but that are now upset about, because it was > not provided in the way you like. Or something. > > >Whatever '1003' means, it's showing the same. So it will do (I don't > >care if the code is buggy, just whether my version is reasonably > >faithful). > > This is actually a good example of the problem you often run > into in these endless c.l.c threads: You seem to take a thing > that was something that was only meant to show one thing, and > asserting that it represents something other than what it was > meant to show, and no matter how many times it is explained to > you that it is not, in fact, what you seem to think that it is, > you persist in your delusion and think that it proves something. > But it doesn't, since you are starting from a false premise, at > which point you whine that you are picked on, treated poorly, > misunderstood, or generally dismissed, to which you conclude > that this can only be due to a slavish devotion to C as it is, > and a refusal to entertain that the language is not perfect. It > is totally lost on you that people may be objecting to what you > are saying on its own merits, since (ironically) you don't seem > able to admit that your own ideas may have their own > deficiencies. > > This whole discussion could be summarized as: > > Bart: "C sucks because Dennis Ritchie stupidly reused `break` > for both loops and switch. He was a tasteless fool." > All: "You can work around that really easily." > Keith: "C added labeled break and continue...." > Bart: "C sucks. My language is better. Here, I fixed C in 4 > lines of code with my `breakloop`, but it still sucks > because C is hopeless." > Me: "No, the real problem is that there's no structured way > break out of nested contexts; your thing only addresses > one special case, and does not compose, so can't cover > the general case." > Bart: "No, it's the overloading. C is terrible and you're all > just too blind to see it. You are all fools, like > Dennis Ritchie." > Me: "I mean, Keith told you how the language is being changed > to address your problem _and_ the other problems in this > general category." > Bart: "Those other problems don't matter. C will never change. > It will suck forever. I mean, have you ever even seen a > use case for these labeled blocks? I don't like them, > therefore they suck, just like C. They also suck > because they solve a problem I don't care about. I have > been doing this for 45 years." > Me: "Here's a program that illustrates the problem. The code > is shit, but shows how it can be used...." > Bart: "This program sucks! You don't _need_ to do it this > way." > Me: "...I mean, I told you it sucked when I posted it...." > Bart: "...I rewrote it in my language. I saved 377 bytes. See > how much C sucks now? My language is better. > Me: "...." > Bart: "My lexer is 50% faster than your lexer. My production > code is an order of magnitude faster. I am a very smart > boy, and deserve a very special gold star on my report > card." > Me: "...Bruh." > Bart: "Dennis Ritchie was a fool. A fool, I say! Haha! > Ahahaha! Muwhahaha!" > So, you don't like Donald Trump. Most people that read comp.os.vms already knew it. But why do you make bart responsible for that?
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-15 23:22 +0100 |
| Message-ID | <11arjmc$2qid7$1@dont-email.me> |
| In reply to | #403195 |
On 15/10/2026 21:42, Dan Cross wrote:
> In article <11aqpl3$2gdup$1@dont-email.me>, bart <bc@freeuk.com> wrote:
> Those seem like pretty meaningless statistics.
> Naturally, different languages will express these things differently.
My syntax has cleaner and simpler syntax compared to C, and handles
features like 'switch' more ergonomically. In this case, C had a 20%
higher line count - fact.
But it seems people don't value cleaner, more productive syntax when it
it comes to 'serious' languages, only scripting ones. OK; your loss.
> This whole discussion could be summarized as:
>
> Bart: "C sucks because Dennis Ritchie stupidly reused `break`
> for both loops and switch. He was a tasteless fool."
> All: "You can work around that really easily."
> Keith: "C added labeled break and continue...."
> Bart: "C sucks. My language is better. Here, I fixed C in 4
> lines of code with my `breakloop`, but it still sucks
> because C is hopeless."
> Me: "No, the real problem is that there's no structured way
> break out of nested contexts; your thing only addresses
> one special case, and does not compose, so can't cover
> the general case."
> Bart: "No, it's the overloading. C is terrible and you're all
> just too blind to see it. You are all fools, like
> Dennis Ritchie."
> Me: "I mean, Keith told you how the language is being changed
> to address your problem _and_ the other problems in this
> general category."
> Bart: "Those other problems don't matter. C will never change.
> It will suck forever. I mean, have you ever even seen a
> use case for these labeled blocks? I don't like them,
> therefore they suck, just like C. They also suck
> because they solve a problem I don't care about. I have
> been doing this for 45 years."
> Me: "Here's a program that illustrates the problem. The code
> is shit, but shows how it can be used...."
> Bart: "This program sucks! You don't _need_ to do it this
> way."
> Me: "...I mean, I told you it sucked when I posted it...."
> Bart: "...I rewrote it in my language. I saved 377 bytes. See
> how much C sucks now? My language is better.
> Me: "...."
> Bart: "My lexer is 50% faster than your lexer. My production
> code is an order of magnitude faster. I am a very smart
> boy, and deserve a very special gold star on my report
> card."
> Me: "...Bruh."
You know, I could well be right about all those points. Maybe my
language that has been around for 45 years really is a sweeter, cleaner
'C' which has solved most of the latter's quirks.
And maybe other people's responses to that is just sour grapes.
However one of interests is PL design - specifically at this level - and
how C gets it so wrong, how people defend it so much, how it evolves so
glacially, how much fixing its shortcomings is offloaded to tools, is
fascinating.
It would have been nice to have a more objective discussion about such
aspects, with people not afraid to be a LOT more critical of C and its
tools that they have been.
But I guess this is the wrong forum for that.
> Bart: "Dennis Ritchie was a fool. A fool, I say! Haha!>
Ahahaha! Muwhahaha!"
Simplest kind of function pointer:
Bart: ref proc
DMR: void(*)(void)
Simplest function pointer variable:
Bart: ref proc abc
DMR: void(*abc)(void);
Two such variables:
Bart: ref proc one, two
DMR void (*one)(void), (*two)void; // I think
Two variables each an array 10 of such pointers:
Bart: [10]ref proc one, two
DMR: No fucking clue mate...
(Apparently it would be this, according to a tool which transpiles to C:
void (*one[10])(void), (*two[10])(void);
Fucking hell. Actually I didn't call DMR a fool. I did mention a
'numskull' which I now withdraw; I prefer to criticise ideas not people.
But this is a disaster.)
[toc] | [prev] | [next] | [standalone]
| From | cross@spitfire.i.gajendra.net (Dan Cross) |
|---|---|
| Date | 2026-10-16 12:40 +0000 |
| Message-ID | <11at5vi$5vu$1@reader2.panix.com> |
| In reply to | #403199 |
In article <11arjmc$2qid7$1@dont-email.me>, bart <bc@freeuk.com> wrote: >... >My syntax has cleaner and simpler syntax compared to C,... I'm sure you meant to say, "my language has...". >But it seems people don't value cleaner, more productive syntax when it >it comes to 'serious' languages, only scripting ones.... > >[snip] >>You know, I could well be right about all those points. Maybe my >language that has been around for 45 years really is a sweeter, cleaner >'C' which has solved most of the latter's quirks. > >And maybe other people's responses to that is just sour grapes. > >However one of interests is PL design - specifically at this level - and >how C gets it so wrong, how people defend it so much, how it evolves so >glacially, how much fixing its shortcomings is offloaded to tools, is >fascinating. > >It would have been nice to have a more objective discussion about such >aspects, with people not afraid to be a LOT more critical of C and its >tools that they have been. > >But I guess this is the wrong forum for that. I think objective discussions of C are appropriate for comp.lang.c. Your description is not objective. For example, you claim that "people don't value cleaner, more productive syntax...". But those are subjective criteria. Has it truly never occurred to you that many other people just don't consider your syntax significantly cleaner, or more productive? I'm sure your language is very nice. I recall looking at it at one point and thinking it was fine, though I saw nothing particularly special about it that would motivate me to want to give up the considerable network advantages of using a more common language. You really think that's just sour grapes? That everyone else is just, what...mad at you because they feel the need to defend C's honor or something? C isn't a member of my family. You're not insulting my ancestry by pointing out flaws in it. I'm not going to get personally upset about its imperfections. Perhaps people dismiss what you say because, despite your self-aggrandizing words, you've shown that you don't actually know C very well, and that you either do not care about, or misunderstand, basic aspects of the language. By your own admission you ignore in the standards documents. It is hard to take the criticism of someone who doesn't understand what they are criticizing very seriously, and subjectivity aside, relative statements about the superiority of your language with respect to a language you yourself don't know very well are similarly difficult to take seriously. > > Bart: "Dennis Ritchie was a fool. A fool, I say! Haha!> >Ahahaha! Muwhahaha!" > >Simplest kind of function pointer: > > [snip; don't care] > >(Apparently it would be this, according to a tool which transpiles to C: > > void (*one[10])(void), (*two[10])(void); Yes, that's right. >Fucking hell. Actually I didn't call DMR a fool. I did mention a >'numskull' which I now withdraw; I prefer to criticise ideas not people. >But this is a disaster.) For someone who claims to want to discuss C objectively, you sure do make a lot of subjective statements. - Dan C.
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-17 00:01 +0100 |
| Message-ID | <11auad0$3no1k$1@dont-email.me> |
| In reply to | #403213 |
On 16/10/2026 13:40, Dan Cross wrote: > In article <11arjmc$2qid7$1@dont-email.me>, bart <bc@freeuk.com> wrote: > Has it truly > never occurred to you that many other people just don't consider > your syntax significantly cleaner, or more productive? So why is this style of syntax popular within scripting languages? (Lua, Julia, Ruby...) Those are considered more productive. > Perhaps people dismiss what you say because, despite your > self-aggrandizing words, you've shown that you don't actually > know C very well, See the type syntax example below. How well do you need to know a language to see that that is just effing crazy? This is supposed to be a HLL, not a puzzle that needs to be solved or decoded via algorithms or employing tools! > For someone who claims to want to discuss C objectively, you > sure do make a lot of subjective statements. Concerning type declaration syntax, lots of people including the C creators agree that it was misguided. If lots of people agree, is that still being subjective? This is the example I think used in K&R: char *(*(**foo [][8])())[]; Most would consider this gobbledygook even if you know the rules. It is atrocious syntax. And what's 'foo' doing in the middle of it! I think being defensive about it is being subjective, as you demonstrate here: >> [snip; don't care] That is pretty much the attitude here in a nutshell. What's often stated also is how successful C has been, but that doesn't magically make the syntax wonderful. If DMR had instead produced a language that looked like mine (say like one of the Algols), and I came along in 2026 and proposed a syntax that looked like the above, what do you think the response would be? I would rightly be laughed out of the forum. So being 'objective' means disregarding history and widespread adoption. The latter doesn't make the language better, just more tolerated, with more effort put into tools to make it practical to use (with a nice sideline in teaching all its ins and outs). Anyway, to me, pretty much the whole of C looked as badly and crudely put together as that, when I first came across it in 1982. My background had been with quite different languages.
[toc] | [prev] | [next] | [standalone]
| From | Keith Thompson <Keith.S.Thompson+u@gmail.com> |
|---|---|
| Date | 2026-10-16 16:53 -0700 |
| Message-ID | <11audde$3oci5$1@kst.eternal-september.org> |
| In reply to | #403228 |
bart <bc@freeuk.com> writes:
[...]
> What's often stated also is how successful C has been, but that
> doesn't magically make the syntax wonderful.
NOBODY THINKS C'S SYNTAX IS WONDERFUL.
We surrender. You win. Stop fighting.
[...]
--
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */
[toc] | [prev] | [next] | [standalone]
| From | gazelle@shell.xmission.com (Kenny McCormack) |
|---|---|
| Date | 2026-10-17 11:09 +0000 |
| Message-ID | <11avl11$poq2$1@news.xmission.com> |
| In reply to | #403230 |
In article <11audde$3oci5$1@kst.eternal-september.org>,
Keith Thompson <Keith.S.Thompson+u@gmail.com> wrote:
>bart <bc@freeuk.com> writes:
>[...]
>> What's often stated also is how successful C has been, but that
>> doesn't magically make the syntax wonderful.
>
>NOBODY THINKS C'S SYNTAX IS WONDERFUL.
The funny thing is: I actually do.
I may be the only person here who actually thinks the syntax of C's
"switch" statement is just fine. Once you realize that it *is* more of a
computed goto rather than a high level alternation construct like you'd
find in a real high level language (C is *not* a high level language; it is
properly referred to as a "mid level" language).
Note that the underlying issue here is easily dealt with if you do both of
the following:
a) Enable the warning in your compiler that warns about (unannotated)
fallthrough.
and
b) Always put a comment when you intentionally do fallthrough.
This issue is kind of similar to the old:
if (a = b) ...
thing - which really was a problem - right up until compilers started
warning about it. Now that all compilers warn if you do that, it is no
longer a live issue, but people still bring it up occasionally.
FWIW, to take another popular whipping boy of C, I also actually like the
variable declaration syntax - which many people like to criticize as
"backwards" or "inside out". Once you get used to it, it makes perfect
sense (to me, anyway). I have no problem with a declaration like:
int i,j,*ip,arr[10],foo(int bar);
Some would say that declares lots of different types of objects, but I
think of them all as ints (which is what the declaration is telling us).
--
The randomly chosen signature file that would have appeared here is more than 4-ish
lines long. As such, it violates one or more Usenet RFCs. In order to remain
in compliance with said RFCs, the actual sig can be found at the following URL:
http://user.xmission.com/~gazelle/Sigs/Seneca
[toc] | [prev] | [next] | [standalone]
| From | bart <bc@freeuk.com> |
|---|---|
| Date | 2026-10-17 13:11 +0100 |
| Message-ID | <11avolp$61gp$1@dont-email.me> |
| In reply to | #403233 |
On 17/10/2026 12:09, Kenny McCormack wrote:
> In article <11audde$3oci5$1@kst.eternal-september.org>,
> Keith Thompson <Keith.S.Thompson+u@gmail.com> wrote:
>> bart <bc@freeuk.com> writes:
>> [...]
>>> What's often stated also is how successful C has been, but that
>>> doesn't magically make the syntax wonderful.
>>
>> NOBODY THINKS C'S SYNTAX IS WONDERFUL.
>
> The funny thing is: I actually do.
>
> I may be the only person here who actually thinks the syntax of C's
> "switch" statement is just fine. Once you realize that it *is* more of a
> computed goto
Then maybe the syntax for it should have been:
goto (x) {}
instead of:
switch (x) {}
That would not clash with 'goto label', nor the 'goto *(x)' of gnu C.
It would make it clearer that this is a cruder construct than 'switch'
pretends to be, AND it saves a keyword!
That saving could have gone towards giving switch-break its own keyword
instead of having to share 'break' with loops (because there was
apparently a shortage of keywords in 1972).
That was always going to clash at some point, and it does.
> sense (to me, anyway). I have no problem with a declaration like:
>
> int i,j,*ip,arr[10],foo(int bar);
>
> Some would say that declares lots of different types of objects, but I
> think of them all as ints (which is what the declaration is telling us).
It's taking a bunch of unrelated types of arbitrary complexity, but
because they all end with a type T when expressed in LTR form, they all
belong together?
That doesn't work: i, ip, arr, foo all have different types.
They only have the same types when fully dereferenced, indexed or
called, when written as i, *ip, arr[i], foo(i). This is NOT when happens
within the declaration, and it might not happen when they appear in
expressions either.
It's just confusing.
[toc] | [prev] | [next] | [standalone]
Page 13 of 17 — ← Prev page 1 … 11 12 [13] 14 15 … 17 Next page →
Back to top | Article view | comp.lang.c
csiph-web