TweetFollow Us on Twitter

Mar 91 Letters
Volume Number:7
Issue Number:3
Column Tag:Letters

THINK C and Benchmarks

By Kirk Chase, Editor

Objective-C® Oversight

Sarah C. Bell

The Stepstone Corporation

75 Glen Road

Sandy Hook, CT 06482

I object to Mr. C. Keith Ray’s article, “NeXT for Mac Programmers”, (MacTutor, Dec. ’90). This article dealt with the Objective-C® programming environment marketed by the Stepstone Corporation. At the end of his article, he listed all the trademarks that were included in the article. He failed to mention that Objective-C is a trademark of the Stepstone Corp.

Since the column was centered around our product, we would appreciate it if you made mention of this fact in the next issue of MacTutor.

[Consider it done - ed]

Taming The THINK C Debugger

Rex Reinhart

Irvine, CA

Here’s a simple workaround to setting and keeping breakpoints in THINK C.

Define the following macro:

/* 1 */

#define HALT asm{_Debugger}

Then simply put HALT in your code wherever you want a breakpoint (anywhere but in the middle of an expression). Then run the program under the THINK C debugger. When execution of your code reaches the HALT, your program will stop, the debugger will become active, and your source code will appear with the current line pointer at the HALT. From there you may step at your leisure.

For low level debugging, try it with MACSBUG. Compile your program and run it on its own.

Another useful variation is

/* 2 */

#define CONDHALT(Condition) if(Condition) asm {_Debugger};

The Mac has a current debugger pointer which a debugger may set to point to itself. I don’t know if this pointer is in a global, or directly in the trap dispatch table. _Debugger is a little known (not in IM I-V) trap A9FF which transfers execution to wherever this pointer points to. The THINK C debugger sets this pointer correctly. I haven’t tried this with other debuggers, but if the set this pointer it should work.

Good Luck.

Benchmark Challenge Revisited

John W. Baxter

Port Ludow, WA

This is a response to the letter “Benchmark Challenge” published in the September 1990 issue.

A significant problem exists with the benchmark source code (both C and Pascal) as printed in the September issue: the local variable b controls the flow of the program, and the letter states that it ranges from 1 to 20. However, b is neither initialized to anything, nor adjusted during the loop. Therefore, the value of b will be whatever is left over in the stack frame locations or register the compiler uses for storing b. That could, for example, mean that the value of b in the Pascal case happens to be 1 (causing execution of only one comparison per loop) while the C case it might be 100,572, causing many comparisons per loop. To fix this problem, I would suggest initializing b to 1 at the beginning of each of the test functions (procedures), and in each conditional just advance it to the next value. So the Pascal TestCase procedure would look something like:

 b := 1;
 case b of
 1: begin

Another pitfall to watch out for in designing benchmark code is code optimization performed by the compiler. Looking at the code as presented in the magazine, we find that in fact regardless of the of b, the code to be executed by the conditional structure is the same (nothing). In both C and Pascal, the compiler has the “right” in such a case to optimize the conditional structure totally out of existence in the final object code (there are no called function or procedure side effects to worry about). As it happens, fixing the undefined state of the variable b as above will prevent such optimization in this benchmark. And, I doubt that either compiler used actually goes that far in its optimization process.

Yet another potential problem is the fact that the Pascal version using a 2-byte b, while the C version happens to be using a 4-byte b. In this case, the time difference introduced by this difference should be vanishingly small (on the 68xxx family). The same benchmarks moved to the Apple IIgs, and continuing to suffer the problem (they wouldn’t as printed because the available C compilers on the IIgs use a 2-byte int), would favor the Pascal significantly, since the 2-byte arithmetic is much faster than is 4-byte arithmetic on the 65816 (which is why int is 2 bytes in those C compilers). To go a step further, C would allow the use of an unsigned 2-byte b, while Pascal does not. For best C performance on the 65816 chip, everything which CAN be unsigned SHOULD be. That leads to the question: “Does a fair benchmark comparing 2 languages and their implementations use the same data type each, or use the most efficient available data type?”

Unfortunately, the answer to that is “Yes.” It depends upon what one wishes to compare. When ignored, this issue invalidates carelessly-written benchmark articles, including the original Byte magazine Sieve benchmark, which made UCSD Pascal look much worse than it needed to. For the Apple II version, about a 40% speed improvement was produced in the Byte Sieve simply by (a) turning off range checking, and (b) defining the variables with the big array last, so that the other variables could be reached by more efficient p-code. A benchmark needs to make clear whether it is comparing the best source found for a given language/implementation/ platform, or a direct translation.

More on Benchmarks

Tom Pittman

Spreckels, CA

Davis and Bayer have some interesting figures, but their conclusions are misinformed.

First (and trivially), the “assembly language” put out by the compiler has nothing to do with the speed of the compiled code, since most compilers (and THINK in particular) don’t put out assembly language at all, but go directly to native machine code. I consider this point trivial, as I assume that is what they would have intended to say, anyway. But the point as corrected is still misleading, since the quality of the machine code generated by a compiler is largely affected by the nature of the source language, as their benchmarks clearly show.

If you ask experienced compiler people (not just run-of-the-mill programmers), you will get an entirely different answer concerning the relative merits of C and Pascal. You see, compiler people know that C is a low-level language designed to fit the PDP-11 very well; to the extent that other computers are similar in architecture to the PDP-11, it’s possible to generate correspondingly good code for them. But as machine design moves away from that obsolete architecture, compiler designers have a harder and harder time of undoing all those low-level optimizations that C encourages the programmers to write, in order to generate the correct and optimal code that a Pascal compiler can do with ease. For some C constructs it’s utterly impossible; any self-respecting compiler just throws up its metaphorical hands and puts out something that works somehow, never mind how slowly or awkwardly. Pascal, by distancing itself from the low-level machine details, does the compiler writer a favor. Pascal compilers on the Macintosh still put out some rotten code; they have not even begun to show what Pascal is capable of. The C compilers on the other hand, are pretty much maxed out. Draw your own conclusions.

So why do programmers all think C is so much better? It’s widely recognized to be a religious issue. That does not mean, as is commonly believed, that there are no right answers (for the benchmarks tell us otherwise), but only that bringing evidence to the discussion will not change anybody’s mind. As interesting as the Davis and Bayer benchmarks are, I doubt they will change any C hackers into Pascal programmers. More’s the pity.

[I didn’t change over. C is still my language of preference to code in. I do code in Pascal, but I find C an easier one to code in. This “preference” benchmark can go a long way. Code optimization is nice, but I feel that developers, programmers, hackers, and hobbyists should be familiar with many languages and do their work with the best language for the need of the job. At some point, C and Pascal will reach a point where they are nearly equal in code generated. - ed]

Bypassing SANE

Michael J. Gibbs

Surprise, AZ

In response to Martin E. Huber’s letter (September 1990):

Radius includes some nice software with their monitors, including an INIT called Radius Math. Radius Math speeds up floating point by bypassing SANE.

On machines with FPUs, SANE uses the floating point unit for most operations but not transcendental or trigonometric functions. The reason for this is that the 68881/882 does not provide the accuracy for these functions that SANE requires, so they are done in software. Apparently the last 4 or 5 bit positions are inaccurate on the FPU (not important for most applications).

Radius Math patches SANE to use FPU for all floating point operations, including those mentioned above. This is not as fast as inline floating point instructions for the FPU, but it does work for all applications that use SANE.

I ran the following benchmarks using Radius Math version 1.4 and THINK Pascal 3.0.1 on my Macintosh IIcx:

Trig Test

Radius Math Generate FPU instructions Time(ticks)

NO NO 875




Arithmetic Test

Radius Math Generate FPU instructions Time(ticks)

NO NO 54




It appears that THINK Pascal generates inline floating point instructions, since the presence of Radius Math has no effect on performance with 881/882 code generation turned on. Notice that for applications that use SANE, Radius Math speeds normal operations by a factor of 2, and trig by a factor of 23.

Remember to use extended precision for all floating point that uses SANE. SANE converts single and double precision numbers to extended precision for calculations, then back again to store the results, so you will get better performance by avoiding the conversion. For inline FPU code, there is not much difference, except for double precision (64 bit), which is considerably slower than extended (80 or 96 bit) and single (32 bit) precision.


Community Search:
MacTech Search:

Software Updates via MacUpdate

Skype - Voice-over-internet p...
Skype allows you to talk to friends, family and co-workers across the Internet without the inconvenience of long distance telephone charges. Using peer-to-peer data transmission technology, Skype... Read more
Bookends 12.6.0 - Reference management a...
Bookends is a full-featured bibliography/reference and information-management system for students and professionals. Access the power of Bookends directly from Mellel, Nisus Writer Pro, or MS Word (... Read more
Apple iBooks Author 2.4 - Create and pub...
Apple iBooks Author helps you create and publish amazing Multi-Touch books for iPad. Now anyone can create stunning iBooks textbooks, cookbooks, history books, picture books, and more for iPad. All... Read more
Web Snapper 3.3.9 - Capture entire Web p...
Web Snapper lets you capture Web pages exactly as they appear in your browser. You can send them to a file as images or vector-based, multi-page PDFs. It captures the whole Web page - eliminating the... Read more
Tunnelblick 3.6beta10 - GUI for OpenVPN...
Tunnelblick is a free, open source graphic user interface for OpenVPN on OS X. It provides easy control of OpenVPN client and/or server connections. It comes as a ready-to-use application with all... Read more
EtreCheck 2.5.1 - For troubleshooting yo...
EtreCheck is a simple little app to display the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support... Read more
Paragraphs 1.0.4 - Writing tool just for...
Paragraphs is an app just for writers. It was built for one thing and one thing only: writing. It gives you everything you need to create brilliant prose and does away with the rest. Everything in... Read more
Things 2.8 - Elegant personal task manag...
Things is a task management solution that helps to organize your tasks in an elegant and intuitive way. Things combines powerful features with simplicity through the use of tags and its intelligent... Read more
Coda 2.5.12 - One-window Web development...
Coda is a powerful Web editor that puts everything in one place. An editor. Terminal. CSS. Files. With Coda 2, we went beyond expectations. With loads of new, much-requested features, a few surprises... Read more
PCalc 4.3 - Full-featured scientific cal...
PCalc is a full-featured, scriptable scientific calculator with support for hexadecimal, octal, and binary calculations, as well as an RPN mode, programmable functions, and an extensive set of unit... Read more

Camel Up (Games)
Camel Up 1.0.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0.0 (iTunes) Description: | Read more »
The Martian: Bring Him Home (Games)
The Martian: Bring Him Home 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Based on the best selling novel and critically acclaimed film, THE MARTIAN tells the story of Astronaut Mark... | Read more »
This Week at 148Apps: September 21-30, 2...
Leap Into Fall With 148Apps How do you know what apps are worth your time and money? Just look to the review team at 148Apps. We sort through the chaos and find the apps you're looking for. The ones we love become Editor’s Choice, standing out above... | Read more »
Tweetbot 4 for Twitter (Social Networki...
Tweetbot 4 for Twitter 4.0 Device: iOS Universal Category: Social Networking Price: $4.99, Version: 4.0 (iTunes) Description: *** 50% off for a limited time. *** | Read more »
Mori (Games)
Mori 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Stop, rewind and unwind with Mori. Time is always running, take a moment to take control. Mori is an action puzzle game about infinitely... | Read more »
100 Years' War (Games)
100 Years' War 1.0 Device: iOS Universal Category: Games Price: $3.99, Version: 1.0 (iTunes) Description: | Read more »
Tower in the Sky (Games)
Tower in the Sky 0.0.60 Device: iOS Universal Category: Games Price: $1.99, Version: 0.0.60 (iTunes) Description: | Read more »
hocus. (Games)
hocus. 1.0.0 Device: iOS Universal Category: Games Price: $.99, Version: 1.0.0 (iTunes) Description: New, polished, mind-bending, minimal puzzle game with dozens of levels and extra-ordinary design Features:- Beautifully crafted... | Read more »
Mos Speedrun 2 (Games)
Mos Speedrun 2 1.0 Device: iOS Universal Category: Games Price: $1.99, Version: 1.0 (iTunes) Description: Mos is back, in her biggest and most exciting adventure ever! Wall-jump to victory through 30 mysterious, action packed levels... | Read more »
3D Touch could be a game-changer, but it...
Were you one of the lucky/financially secure enough ones to buy a new iPhone 6s or iPhone 6s Plus over the weekend? Yup, me too (I’m not convinced I was either of those two things, but let’s go with lucky for now), so I thought I’d delve into just... | Read more »

Price Scanner via

12-inch MacBooks in stock for up to $120 off,...
Adorama has 12″ Retina MacBooks in stock for up to $120 off MSRP including free shipping plus NY & NJ sales tax only. For a limited time, Adorama will include a free Apple USB-C to USB Adapter,... Read more
15-inch 2.2GHz Retina MacBook Pro on sale for... has the 15″ 2.2GHz Retina MacBook Pro on sale for $1799 including free shipping. Their price is $200 off MSRP, and it’s the lowest price available for this model (except for Apple’s $1699... Read more
iPhone 6s and 6s Plus Feature Improved Durabi...
Upgraded components in the new iPhone 6s Plus cost $16 more than the components in the earlier iPhone 6 Plus according to a preliminary estimate from IHS Inc. The bill of materials (BOM) for an... Read more
13-inch Retina MacBook Pros on sale for up to...
Adorama has 13″ Retina MacBook Pros on sale for up to $130 off MSRP. Shipping is free, and Adorama charges sales tax for NY & NJ residents only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $1199.99 $... Read more
Apple refurbished 2014 13-inch Retina MacBook...
Apple has Certified Refurbished 2014 13″ 2.6GHz/128GB SSD Retina MacBook Pros available $979, $320 off original MSRP. An Apple one-year warranty is included, and shipping is free: - 13″ 2.6GHz/128GB... Read more
iOS 9 Reflections Ten Days In – The ‘Book Mys...
I’ve never been much of an early adopter by philosophy or temperament, although I did buy the iPad Air 2 I’m typing this column on last fall only about a month after Apple unveiled it. However, my... Read more
Apple refurbished Time Capsules available for...
Apple has certified refurbished Time Capsules available for $120 off MSRP. Apple’s one-year warranty is included with each Time Capsule, and shipping is free: - 2TB Time Capsule: $179, $120 off - 3TB... Read more
OS X El Capitan Available as a Free Update To...
OS X El Capitan, the latest major release of Apple’s desktop operating system, is available today, September 30 as a free update for Mac users. “People love using their Macs, and one of the biggest... Read more
15-inch Retina MacBook Pros on sale for $150-...
B&H Photo has 2015 15″ Retina MacBook Pros on sale for up to $200 off MSRP including free shipping plus NY sales tax only: - 15″ 2.2GHz Retina MacBook Pro: $1815 $184 off - 15″ 2.5GHz Retina... Read more
Updated For iOS 9, InterConneX Lets You Store...
InterConneX version 1.2 is now a 64-bit app that’s completely compatible with iOS 9. InterConneX is a file storage, file management, and file sharing app for the iPhone or iPad that now takes... Read more

Jobs Board

*Apple* Systems Engineer (Mclean, VA and NYC...
Title: Apple Systems Engineer (Mclean, VA and NYC)Location: United States-New York-New York-NYC 200 Park Avenue (22005)Other Locations: United Read more
*Apple* Retail - Multiple Positions (US) - A...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, you're Read more
*Apple* Retail - Multiple Customer Support P...
Job Description:Customer SupportSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the Read more
*Apple* Solutions Consultant - Retail Sales...
**Job Summary** As an Apple Solutions Consultant (ASC) you are the link between our customers and our products. Your role is to drive the Apple business in a retail Read more
SW QA Engineer - *Apple* TV - Apple (United...
**Job Summary** The Apple TV team is looking for experienced Quality Assurance Engineers with a passion for delivering first in class home entertainment solutions. **Key Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.