Case implementation
[email protected] Sat, 20 Nov 2004 10:33:12 +0100 (CET)
| Newsgroups | gmane.comp.lang.forth.picforth |
|---|---|
| Message-ID | <[email protected]> |
was Subject: [PicForth] Re: Feature Requests >>>>> "David" == David McNab <[email protected]> writes: > David> 1) case ... of .. endof .. endcase > > David> As per standard Forth > > David> Since PicForth already has begin/while/repeat/until/if/then, > David> the mechanisms for branch resolution are already in place. > David> While 'case' statements don't necessarily add more power to the > David> language, they certainly make for far more readable code, and > David> might even facilitate smaller code (eliminating dup/drop > David> statements) etc. Sam wrote: > I've implemented it in my development version (you can get it using > darcs as explained on http://www.rfc1149.net/devel/picforth). > However, as with other "if" cases that cannot be cleverly optimized, the > generated code is ugly. >From distant past memories of a p-code implementation, CASE is either: 1. mere syntax-sugar for repeated IFELSE or 2. provided the 'density' between the lowest and highest cases is sufficient: efficiently implementated by indexed jumps. Which is probably nice with PICasm, but I don't know how it fits with picforth. eg. CASE 13: do13 ; 15: do15 ; 16: do16 ; 20: twenty ELSE doDefault; Translates to: fixOffsetToLowestCase13; jump do13 ; jump doDefault; //for 14 jump do15 ; jump do16 ; jump doDefault; //for 17 jump doDefault; //for 18 jump doDefault; //for 19 jump twenty; doDefault; == Chris Glur. PS. I think that attempting to 'ape' C on a proper micro-processor with forth on a PIC can be taken too far -- well beyond 'productive optimum'. OTOH since we've got some original thinkers here: * every new Uproc has to invent it's own arbitrary mnemonics, because others are copyright. * Intel might have started with: ldi 7, A * and Motorola then said: movi 7, A * what does PIC say for: "7 -> W" ? Which is also only 6 chars [including white-chars], and UNDERSTOOD immediately what it means ?! Whereas "ldi 7, A" is 7 chars, and you have to 'look in the "explanation-table" ' to check the syntax. Do you want to get married [do a training course] every time you work with a new micro-processor ?! IMO this absurdity is perpetuated [and the greater absurdity of selecting a "R" a "E" a ..."I" a "L" from the keyboard, instead of a single-token: "REPEAT UNTIL"] because people want to pretend that they are 'communicating' in near English with the little man in the box. When you control a lift/elevator, and there are exactly nine valid destinations, you select one "token" ; you don't type "eight floor" !! Why pretend that the the programmer has the freedom of a poet, when at many stages of the 'code' there are only 2 or 3 valid options, for well structured languages ? The earliest killer-aps: spread-sheets used this principle. How did we get lost ? Once I needed to code a minimal assembler for an 8-bit Uproc, and I used the: 'A + B -> A' format; instead of apeing the Motorola-book's eg.: adda a,b [or whatever]. It was beautifully easy to read/understand the code. The next best thing is to just select full-tokens from a menu, instead of building with characters. Correct syntax is FORCED by the menu.