Follow Slashdot stories on Twitter


Forgot your password?

Microsoft's New Language 601

We've been buried in submissions about Microsoft's new programming language. Here's one of them. Brohamm writes: "Microsoft has created a new language called c# (pronounced C-Sharp). It's supposed to look like C but has the same concepts as Java. Looks like they gave those J++ developers something to do. Check it out at CNet."
This discussion has been archived. No new comments can be posted.

Microsoft's New Language

Comments Filter:
  • Bell Labs has no less than three experimental language variants which are roughly similar to C/C++.
    • C+@ was a more-dynamic version of C++, with polymorphism. C+@ predates Java, It's been forgotten, probably because nobody can find it with a search engine.
    • Plan 9 comes with a compiler for a nonstandard dialect of C (not C++).
    • Inferno uses Limbo, which is a simplified language about halfway between C++ and Delphi.

    Do we have a link for "C#" yet? If you search for "C#" with the main Microsoft search engine, all the hits are irrelevant, as you'd expect.

  • Never.

    Take it from a Visual Basic programmer. The models are too far apart. Theoretically, if VB can compile to its own p-code, it can compile to Java bytecode. But the resulting executable would simply blow goats. VB always was, and always will be, a Windows-only development tool. This has allowed MS to highly optimize VB for Windows. It's not meant to be portable.

    Besides, Microsoft is leaning more toward C++ with VB. Starting with 5.0, VB added native x86 support by compiling down to VC++'s object format, then using VC++'s linker to produce the .EXE. Visual Studio 7.0 will put Basic, C++, and InterDev in the same IDE, with mixed projects. And improvements to the actual language will give VB7 real objects, with inheritance, polymorphism, structured exception handling, and more.

    Here's the final nail in the coffin. I just came back from VBITS, and Microsoft's VStudio product manager was there. He delivered Monday's keynote, which was a preview of VB7, and moderated a Q&A that night. When asked about the future of "Java" at Microsoft, he said this:
    J++ is in limbo right now.
    Sun's lawsuit against Microsoft (which is, admit it, nothing more than a pissing contest) has J++ tied up in knots right now. Microsoft can't make a move in the Java space without conceding to Sun, which billg's pride won't let him do. Therefore, C#. All of the language benefits of Java, without Scott McNeally's MS-wannabe oneupsmanship.

    Of course, all of this talk about C# is speculation right now. I'm eager to see the details, especially considering that there was not a word about C# at VBITS. Plenty of SOAP (which is a very Good Thing, BTW), but no C#.

    Every day we're standing in a wind tunnel
    Facing down the future coming fast
    - Rush
  • I mean, what's with the blind devotion to WORA concept? I mean, what's wrong with taking the nice language java is and allowing it to take advantage of the underlying platform. sure java was intended to be WORA, but why stop other people from being able to make it do *more things*.

    The entire point of Java is that it will run anywhere. Take that away and it becomes just another OOL that is almost but not quite like C++. We don't need another one of those.

  • Insistence over control of the language!@?!?!? Didn't they invent the language? Does GM give its' cars away for free?

    Wrong analogy. That's not the point I'm making. My point is how Sun, not once, but twice, went to two standards bodies (ISO and ECMA) to start the process of making Java a standard. In both cases Sun pulled out of the processes at the 11th hour. I don't have any complaints with Sun controlling Java as long as it is understood up front that this is their intention to do so, and they remain consistant about it . I liked the langauge even before Sun made the grand announcement about seeking standardization, which helped further Sun's cause. It is my feeling that Sun cynically played not only on anti-Microsoft sentiment to further their own position but on the strong pro feelings many have about open standards. It was a one-two combination that helped grease the skids of acceptance in a lot of quarters. Once Sun was assured of its position, however, it realized it had no need to complete either of the standardization processes; they had achieved what Microsoft has achieved, a defacto lockin in a lot of organizations. And many of us felt used because of it.

    The ends never justify the means, not even when fighting against Microsoft. When you use Microsoft's tactics, you're no better than they are.
  • > Yet another lame MS "techonology" marketing name.

    "Remember, it's spelled 'C#', but it's pronounced M-O-R-E-C-R-A-P-F-R-O-M-M-I-C-R-O-S-O-F-T."

  • by Tofuhead ( 40727 ) on Thursday June 22, 2000 @12:52PM (#982648)

    Why not get the stoners on our side with GANJA? Cuz Ganja Ain't No JAva, mon.

    < tofuhead >

  • by sugarman ( 33437 ) on Thursday June 22, 2000 @08:36AM (#982654)
    So when's the first O'Reilly book come out?

    I mean, we all know it ain't for geeks until there's an O'Reilly book, right?

  • are confusing Java the programming language with Java the operating environment.

    Actually, I am aware of the distinction. Usually when people refer to just Java, they mean the language, bytecode, and a VM that will run it as specified in Sun's documentation.

    By 'extending' the language, MS came up with something that would only work with MS products, which violated the intent of Java.

    If I write something in ANSI C adhering to posix specs, I expect it to COMPILE and RUN on any posix system with an ANSI C compiler (provided that I stick to libraries available on all platforms).

    For Java, the compiler is expected to accept only standard source, and compile it into bytecode that runs on all compliant JVMs using libraries that will also run on all JVMs.

    gcc does have several non-standards in it, but it doesn't purport that you can freely use those extensions and expect all to be well with other compilers. OTOH, it is more portable than MS Java since there's a gcc for just about anything these days at no cost. How many platforms does MS support?

    Go away, learn IBM COBOL (as used on MVS), learn ICL COBOL (as used on George 3), and then come and talk about language pollution :-)

    I'm not sure I want to know! COBOL is painfull enough as it is.

  • If you don't like it. Don't use it.

    I personally love the idea of reducing the redundant tasks C++ COM programmers have to go thru.
  • They are clearly not the only good technology publisher.
    I like Sams, McGraw Hill and Prentice Hall.
    Sams would go to people who made electronics and get technical information from them and use that to compile repair manuals for TVs, Radios, and other electronics.
    You could get repair manuals for the Commodore 128, The IBM PC and many other companys.
    Now a days companys have become paranoid. Oh my ghod someone might use that information and make a compeating TV set.

    Anyway O'Reilly is very populare and even used by Microsoft employees.
    They document such things as Microsoft Windows, BSD (Hah sorry Zico they DO have a BSD book) and the palm pilot.

    Zico is basicly full of it... allways is... He has some agenda. No he isn't some Microsoft plant or from the Krull invasion force.
    He has some stake in this. It's probably some stake in Microsoft but that might not be the case. Maybe it's just that you could code crud on a stick and sell it for Windows but couldn't give it away on Linux.

    Anyway O'Reilly is known for having Lary Wall on the payroll. Not for writing Linux books.
    They see themselfs as compeating with "Dumbies" books so when the populare title shifts out of tech books into self help books you find "In a nutshell" not far behind.
    Along with Dumbies and Nutshell I also recomend Sams "Teach Yourself" books...

    Zico should have gotten "Teach yourself Labotomy in a week" instead of "Labotomy for Dumbies".
  • And then there's this one that did the rounds a few years ago:

    ***New Subject Oriented Programming Language***

    C+- (pronounced "C more or less")

    Unlike C++, C+- is a subject oriented language. Each C+- class instance, known as a subject, holds hidden members, known as prejudices or undeclared preferences, which are impervious to outside messages, as well as public members known as boasts or claims. The following C operators
    are overridden as shown:

    > better than
    > much better than
    forget it
    ! not on your life
    == comparable, other things being equal

    C+- is a strongly typed language based on stereotyping and self-righteous logic. The Boolean variables TRUE and FALSE (known as constants in less realistic languages) are supplemented with CREDIBLE and DUBIOUS, which
    are fuzzier than Zadeh's traditional fuzzy categories. All Booleans can be declared with the modifiers strong and weak. Weak implication is
    said to "preserve deniability" and was added at the request of the D.O.D. to ensure compatability with future versions of Ada. Well-formed
    falsehoods (WFFs) are assignment-compatible with all booleans. What-if and why-not interactions are aided by the special conditional evenifnot X then Y.

    C+- supports information hiding and, among friend classes only, rumor sharing. Borrowing from the Eiffel lexicon, non-friend classes can be
    killed by arranging contracts. Note that friendships are intransitive, volatile, and non-Abelian.

    Single and multiple inheritance mechanisms are implemented with random mutations. Disinheritance rules are covered by a complex probate protocol. In addition to base, derived, virtual, and abstract classes, C+- supports gut classes. In certain locales, polygamous derivations and
    bastard classes are permitted. Elsewhere, loose coupling between classes is illegal, so the marriage and divorce operators may be needed:

    marriage (MParent1, FParent1);
    //child classes can now be derived
    sclass MySclass: public MParent1, FParent1
    { // define MySclass

    sclass YourSclass: public MParent1, FParent2
    // illegitimate

    divorce (MParent1, FParent1);

    marriage (MParent1, FParent2);
    sclass YourSclass: public MParent1, FParent2
    { // OK now

    Operator precedence rules can be suspended with the directive #pragma dwim, known as the "Do what I mean" pragma. ANSIfication will be firmly resisted. C+-'s slogan is "Be Your Own Standard."
  • In my experience, an "easy-to-use" programming language has the result of being horribly bloated, since you have to include features you'd never use, since it's so friendly to have everything already done for you. Reusable code should only go but so far. Personally, I like C/C++ even in its more obscure moments. I like not having to link in complex number handling when I code "Hello World".

    I live now in mortal fear that GCC will support this.
  • A friend of mine, after learning to use Visual C++, stopped calling it "C++" and started calling it "The Microsoft Language" or "TML" for short. He said that TML bore little resemblance to actual C++, what with COM and all, and was more accurately described as TML.

    Can't wait to hear his take on d-flat.
  • by ajs ( 35943 ) <> on Thursday June 22, 2000 @06:25PM (#982674) Homepage Journal
    Didn't they invent the language? Does GM give its' cars away for free?

    Cars and programming languages have a very different tradition. AT&T Bell Labs is the creator of two of the most popular programming languages in the world: C and C++. The development of both of these languages is guided by the appropriate ANSI committe. Ditto FORTRAN, ADA and many other languages which are managed through standards. Languages like Python, Perl, Scheme and TCL are not managed through standards, but their reference implimentations are open source, and thus wide open to the community.

    That leaves two newcommers as the tidings of an unfortunate trend: Java and Coctothorpe. These languages are strictly managed by their "owners" (as if one can own a language in the first place). This leaves the future somewhat uncertain for those of us who have always assumed that it was obvious to all that open standards are the way you manage a programming language.

    It's fairly moot anyhow. The correct response to Coctothorpe is to evaluate it's usefulness and, if it is deemed worthy, write a GCC front-end for it or (if it's interpreted-only like Java) then a run-time implimentation can be written and open sourced. Until our government (which in the case of intellectual property is rapidly becoming the UN) gets stupid and declares languages patentable, we're OK implimenting our own Java and Coctothorpe.
  • We already have a number of efficient, clean, simple systems programming languages:
    • Oberon
    • Modula-3
    • Limbo (from Bell Labs)
    • Sather
    • real-time Java
    It's too bad Microsoft needs to reinvent the wheel, again. But, I suppose, except for Java, those things don't use enough braces, and RT Java wasn't an option for them.

    Well, if they manage to come up with a language definition that is as decent, efficient, and simple as Oberon or Modula-3 and they manage to make it successful, that's still a big win for everybody. For systems programming, C really needs to be replaced by something that is a bit safer without being a lot more complex. But given Microsoft's track record on language design, I won't hold my breath.

  • Java has not one but two "real destructor" constructs: "try ... finally" and finalization. However, they are needed much less in Java than destructors are in C++, because memory is freed automatically.

    People have found all sorts of uses for C++ constructors/destructors, but when it comes down to it, C++ is the oddball language there, and destructors in C++ cause all sorts of problems.

  • by jetson123 ( 13128 ) on Thursday June 22, 2000 @06:38PM (#982689)
    Reference counting leaks circular references. Reference counting is also inefficient compared to a good garbage collector. And reference counting in C++ fails to give you the runtime safety that a system based on garbage collection gives you. Essentially, there is no way to write portable memory management code in C++ that works as efficiently, reliably, and safely as built-in garbage collection.
  • Didn't Apple abandon ObjC in favour of C++?
  • by Anonymous Coward on Thursday June 22, 2000 @07:54PM (#982710)
    Cool, a language with no syntax.

    When they say C# is language-independent, they're actually talking about the underlying object model, libraries, and runtime platform. It shares the same runtime platform as VB (called the "URT"), and there's no reason any language in general couldn't be made to compile to the URT. In case you haven't heard, Microsoft is also completely revamping the VB language. C# and VB will be almost identical in terms of power and what you can do with them. It seems to me that C# is more or less just an alternative for the people - including most developers at MS - who simply don't like using VB, and, as has already been pointed out, a response to Java. Even the developers at Microsoft admit (amongst themselves) that C# and Java are practically identical languages on the surface. But really, it's more or less equivalent to the new VB, it just uses a C-like syntax.

    They also are producing something called "managed C++", which is mostly a bunch of hacks to the C++ language to allow programs to compile and run on the URT. They are pretty much betting the company on this new platform. The language independence comes from the fact that all managed code (anything that runs on the runtime) uses the same object model and can share libraries. WFC has been implemented on the URT (written in C#), and it also has a bunch of system libraries which are all pretty well designed. The reason they say it's cross-platform is because everything is compiled to run on the URT, not natively. In theory, the URT can be ported to other platforms, and immediately any app that runs on it will run on those platforms. In the future, pretty much EVERY Windows app will run on the URT, so this is a good thing. The libraries for it are very rich, so there's no reason an application would need to use any Windows API calls or the like. The only real problem, of course, is that the URT will still be proprietary and controlled by Microsoft. However, it's not the mess that COM was (despite the fact the it was originally called COM+ 2.0), and may be easier to reverse engineer. The fact that it abstracts away pretty much anything that's Windows-specific (no more registry, among other things) certainly is a good step towards portability.

    In my opinion, the platform Microsoft is working on now is by far the best progress they have made in a long time, and it's long overdue. They've realized that the current Windows development model is broken, and has no future, especially as the Internet takes over. Instead of trying to continually extend what they've done before, they're pretty much completely abandoning the existing infrastructure. They are throwing backwards compatibility out the window, which is what they needed to do a long time ago. Unfortunately, due to the DOJ stuff, I wouldn't be surprised if the public never even sees the fruits of these efforts. I've never liked Microsoft's software or many of the things they've done, but this is something they've got right. I really dislike what they're intending to use it for, which is to offer software as a service over the Internet, but as a development platform, the URT is exactly what the world needs right now. Of all their major undertakings - and this is one of the biggest - it's probably the first which is truly well-designed with the potential to last for a long time.

    A lot of this progress on the URT, C#, WFC, and such can probably be attributed to Anders Hejlsberg, the mind behind Borland's Turbo Pascal and Delphi who moved to Microsoft a few years ago to be the WFC architect.

  • It seems to me Modula-3 ( is functionally equivalent to Ada and otherwise a much better choice. Like Ada, it has generics, modules, threads, objects, dynamic typing, static typing, and explicitly unsafe modules, but it is a much simpler language than Ada. There are multiple free and commercial implementations, listed at the site.
  • C++ *does* have polymorphism.

    Terminology problem. See the OOP FAQ [] for the full taxonomy of forms of polymorphism.

    The key issue is this: if B is a subclass of A, and A does not declare foo but B does, can you call foo on an A if the A is also a B? In Java, C+@, and Smalltalk, the answer is yes. In C++, the answer is no. This is why C++ needs templates.

    We don't know yet which camp "C#" is in. Probably the "yes" camp; the run-time overhead is higher, but the language is simpler.

  • Yes, but in the course of playing music a different thought process is involved with C# than is with Db. It's really subjective and really weird.
  • Nope, actually, it's the 5th string of a guitar. The strings are numbered from highest to lowest.

    I believe you are correct.

    No correction of mine would be complete without another error.

  • by Christopher B. Brown ( 1267 ) <> on Thursday June 22, 2000 @08:54AM (#982748) Homepage
    Simon Peyton Jones [] of Microsoft Research has been working on C--: a portable assembly language [] for quite some time now.

    C-- is intended, as the article suggests, as a "portable assembly language."

    Thus motivated, some colleagues and I have been working on the design of C--, a portable assembly language. C-- has to strike a balance between being high-level enough to allow the back end a fair crack of the whip, while being low level enough to give the front end the control it needs. A major goal is to provide portable support for features needed by advanced languages, such as garbage collection, exception handling, and debugging, without building in a particular garbage collector, exception semantics, or debugging model.
    There actually are some implementations available in source form.

    Microsoft may produce some software of frightening quality, but that doesn't mean that the people that they hire are ignoramuses, but merely that:

    "What you end up with, after running an operating system concept through these many marketing coffee filters, is something not unlike plain hot water." -- Matt Welsh
  • It turned out that it was just COBOL, with some code removed. The mainframers loved it, but it didn't fly too well with anyone else..

    JavaScript Error:, line 91:
  • by DrEldarion ( 114072 ) <[moc.liamg] [ta] [0791uhcsm]> on Thursday June 22, 2000 @08:54AM (#982753)
    You might be onto something there... C-Hash... CHash... sounds remarkably like 'CASH' doesn't it? This is the real reason MS is making this language.

    Although I'm sure we had figured that out already.

    -- Dr. Eldarion --
  • This sounds almost like java set up to have C keywords in it. Which, if you have studied many of the C family of languages, is usually the case with anything other than C/C++/C--.
  • by NMerriam ( 15122 ) <> on Thursday June 22, 2000 @08:55AM (#982757) Homepage

    So C# could also be pronounced "C Hash", or simply "Cash".

    Methinks it's the same guys who named WinCe...
  • I can see the source code now:

    #include &ltconio.h&gt

    #include &ltiomanip.h&gt
    #include &ltmicrosoft.h&gt

    int MS.CPM = 0; // Crashes Per Minute = 0

    void main(void) {
    m.cout &lt&lt "I Have to use Microsoft's COUT Statement, because my other statements won't work.\n";
    __MS.NOCRASH(); // Please Don't Crash.

    .- CitizenC (User Info [])
  • The JVM was created to support the Java language, but there's no reason that you must use Java to write for the JVM.

    In fact, many other languages have been written, compilers to target the JVM bytecode format. Also, the JNI (Java Native Interface) grew out of Netscape's support for C APIs to call into, and be called by, JVM bytecode.

    I wonder if Csharp/Dflat/Chash/Cpound/Coctothorpe might be targeting Microsoft's JVM implementation, which has gotten good grades on speed, or if it really is a whole new virtual machine.

    Microsoft doesn't appear to be claiming that the new language is free from entanglements with the operating system. In fact, if their "C#VM" were to make it easy to use COM/VBA automation, and to use native C# programs as clients and as services, it could be a win for them.

    I think they're missing the mark, though. Sun's reluctance to allow their JVM to be managed by an outside standards group, and Microsoft's reluctance to follow outside de facto standards, both played to this announcement.

  • Really, they shouldn't throw 'em up so easily. With a softball like that, I can just see the headlines:

    C# Falls Flat

    Microsoft hits a sour note

    and so on. Perhaps they took the view that smart people wouldn't even touch the easier ones.
  • ...none of the other vendors has the clout to do it M$-style, or their own dominant OS to lock it into.

    As for the Ob. Recursive Acronym, I propose BINJ, unless you're a fan of Vernor Vinge, in which case you might prever RINJ, SINJ, or (esp) KINJ.
  • which one of the Baby Bills gets the IP?
  • yet another kludge
    old ideas becoming new
    through # defining

    c# -- a wrap of
    15 year old libraries
    macros everywhere

    Microsoft again
    finding more ways to abuse
    the preprocessor

  • One source familiar with Microsoft's plans said C# is "intended as (a way to foster) new styles of development. Combine it with the Web services (Microsoft) is announcing and you get powerful stuff. It also so happens to effectively mirror what Java can provide. It provides operating system independence (which Java provides), but it also provides language independence, which Java can't provide."

    Uhh, it sounds to me like this is Windows-only. What [] the hell are these guys smoking? It runs on Windows 98 and NT 4 and 2000, so that makes it OS-independent? Unless Microsoft ports it so it runs on Linux or Mac OS X or something, I don't see how anyone can call it OS-independent.

    G# anyone?


  • by Temporal ( 96070 ) on Thursday June 22, 2000 @09:21AM (#982797) Journal

    Really, a C++ smart pointer class is a trivial thing to write and gives you all the same advantages. I wrote one in 100 lines a few weeks ago and it works just as well as Java's garbage collection. The article seems to suggest that this is one of C#'s greatest features. Hmm, kinda like W2k having that "symbolic linking" thing.


  • One of Microsoft's claims about C# is that it will allow "developers (to) access any hardware and software." C# provides "complete access to (the) underlying platform." At the same time they claim that this is a "web development language". Imagine , if you will, a poorly programmed piece of code that has vulnerablities in it. The kind of exploits that C# allows for (in concept) are on a different level entirely than the one's we see now. More access to hardware + a web language == A Bad Thing.

    And I don't even have to mention that the evironment (at least initially) that a C# program would run in would be written by M$ (motto: 64k is enough bugs for everyone). Remote root exploits galore.
  • ...because I'm pro-Windows will now be shocked. Here's what I have to say: GO AWAY.

    Don't want another syntax. Don't need another syntax. Like C. Like C++. Hate most everything else.

    Why? Two words: Content obsolescence. That's all Java ever did for me. Great... another language to learn. Blow me. Take your C-# (c-pound) and POUND IT.

  • by redleg141 ( 169213 ) on Thursday June 22, 2000 @09:23AM (#982811)
    Hey someone already has the trademark on C Sharp. Just ask Al Stevens of Dr. Dobb's Journal.
  • Y'know, it may be time we came up with a clear delineation between a post like this and a real troll-post. It's a short, sharp reply to the post above it. It states an opinion which is on topic and relevant to the discussion, even if it offers no support for that opinion.

    If it hadn't been modded down to -1, would it have started a thread of more reasonable posts which would have considered the circumstances and motivations surrounding M$ new programming language vs. those surrounding Sun's development of Java? Those of us who read at -1 have seen it happen.

    Is stating an opinion about some language, OS or company really trolling? If this guy posted a comment that said "MS sucks" or "Windows sucks" and got modded down -1 flamebait, I could understand, but whoever this AC is, his post is at least on topic and relevant. He didn't post it 500 times in a row, and he didn't craft it to look like a normal post only to change halfway through to a post about NP or grits or whatever. I don't think it's a troll.

  • now now,

    "it ain't for geeks until there's an O'Reilly book"

    doesn't mean

    "if there's an O'Reilly book it is for geeks"

    you know the whole Socrates is a man thing
    Basic Logic - but I'm sure you knew that already

  • C--? Isn't that BCPL?

    So Linus, what are we doing tonight?

  • by Anonymous Coward on Thursday June 22, 2000 @09:53AM (#982825)

    Wouldn't it be good to wait until the language is actually unveiled before you bash it as "crap"?

    You're new here, arent you?
  • The JVM was created to support the Java language, but there's no reason that you must use Java to write for the JVM.
    Mark my words: Barring interference from the government, MS will add a "compile to Java bytecode" feature in the next version of VB. That's MS's real response to Java, IMHO.
  • by spectecjr ( 31235 ) on Thursday June 22, 2000 @09:06AM (#982833) Homepage
    Right, it's apparent from the article that this language (which I have chosen to call C-Pound ;) is an attempt to "Embrace & Extend" C++. Which, really isn't necessary, but hey, we have to cut them some slack -- dirty tricks are the only games Microsoft knows how to play.

    Er... what?

    Stroustrup has approved the language by the way. Just thought you'd like to know.

    You might find out why if you compare C# to some of Stroustrup's bitch list in "The Design and Evolution of C++"

  • so what if there's an O'Reilly VB book? The original post claimed that "there's an O'Reilly book" was a necessary condition for something to be "for geeks", not a sufficient condition. You'd have to find something for geeks for which there is not an O'Reilly book to refute this.
  • Don't forget that if you want the database tools, you must purchase the Enterprise Edition.

    They actually pulled this with VisualStudio 6.

    You know, the one that had the next version of InterDev 1.0, called InterDev 6.0
  • They should have called it "Microsoft Language" to go along with all their other boring product titles!
  • The basic description sounds like they're trying to reinvent PHP.

    From the PHP-FAQ:

    Much of its syntax is borrowed from C, Java and Perl with a couple of unique PHP-specific features thrown in. The goal of the language is to allow web developers to write dynamically generated pages quickly.

    While the CNET article doesn't mention Web scripting, where else does this "C#" go? VB and VC++ are used primarily for stand-alone apps, while MS only has VBScript and JScript. Do they want to establish a wholly new server scripting language? Considering that classical CGI is impractical on NT/2000, server-side scripting is the only niche they can exploit. Given the wealth of tools available in the UNIX/Linux world, it'll never be popular there.

    In fact, I'll bet that this new "language" will resemble BASIC (or maybe even FoxPro) in syntax more that anything else. Maybe it'll use C++ and JAVA functions, but it'll never be called innovative by anyone familiar with the industry.

    As far as being a JAVA killer, developers should not forget that being familiar with multiple platforms makes you a more valuable programmer. The Microsoft world is just one of many worlds in the UNIXverse (couldn't resist the pun). It'll be just one more thing the MCSE, MCD and other MS cult members will get certified in only to watch it fade away in a couple of years.

  • INTERCAL ???

    It's true, there are too many languages !!!
  • You've expressed a common misconception that I think is worth correcting. I'll follow this with an opinion.


    Reference counting is NOT the same as garbage collection. Reference counting cannot collect circular data structures that have been disconnected from the program's active store (like a circularly linked list or a graph).


    Garbage collection is a really nice feature for a language to have. Since I program in ML (my favorite advanced programming language), I never have to deal with memory errors of any kind, ever. Garbage collection also opens the way for type-safe languages, so that we can write programs which are guaranteed not to crash. This is another really nice thing (also supported in ML).

  • I guess there are a couple of things we need to point/figure out:
    1. While this new product may just add up to an admission by Micro$oft that the Java model (garbage collection, runtime vs. native, platform independence) is important, they have answered in a typically anti-competitive way; build something that might be a better mousetrap, but find underhanded ways to tie it to your flagship product.
    2. What becomes of J++? There were rumors (untrue, as it turns out) a while back on ./ that they were going to sell it to Rational. Well, since that fell through, my guess would be that they kill it entirely, now that they have created a competing product. That's too bad; with a few improvements (servlet support, JDK compliance, cross-platform IDE, etc), J++ could easily be the best IDE out there. I love the Intellisense...having an API reference at your fingertips is a good thing.
    3. Price Point: Java is still mostly free, while C# will probably be somewhat expensive. Will this slow adoption? Who knows; I think the features and reliability of the language are more important.
    4. Available Libraries: Will there be a wide array of well-written, cross-platform, thoughtfully-arranged libraries for C#? This is one of the factors that has driven adoption of Java over the years. Because Java's libraries are quite mature in comparison, I think this will limit adoption.

    Overall, I think C# will have to find a niche to be successful, and I certainly don't think that niche will be scalable, web-centric systems. Java's greatest weakness is it's performance on the client side. Maybe there's room for another cross-platform language there, but then AWT and Swing are fairly entrenched.

    BTW - Anybody notice how the article lied about the Sun lawsuit? Check it out:
    Microsoft is mired in a lawsuit with Sun over Java and has been prevented from updating its Java products.

    Now that's BS if ever I heard it. Microsoft could easily update its Java products at any time, so long as they honor their contract with Sun and make them JDK compliant! But instead, they decide to kill what could have been a great product and put something else out instead.

    If you put a racing saddle on a jackass, it's still a jackass...
  • by xant ( 99438 ) on Thursday June 22, 2000 @09:08AM (#982860) Homepage
    Are you kidding me? NINJA!! Ninja Is not JAva
  • by the_other_one ( 178565 ) on Thursday June 22, 2000 @09:32AM (#982861) Homepage

    " C#" rhymes with CRASH!

    I see blue already

  • A quote from the article:
    Goodhew added that C# allows "developers (to) access any hardware and software." C# provides "complete access to (the) underlying platform."

    Great... I get to open up all my devices to the web... how secure is that? How am I supposed to know if I should grant or deny when a box pops up that says:

    This web application has requested access to your hardware. Would you like to grant it? (y/n)

    I mean, I could "just say no" -- but then I might miss out on a jolly tune! WTF?

    I can smell the viruses brewing from here.

    Another quote from the article:
    It provides operating system independence (which Java provides), but it also provides language independence, which Java can't provide.

    "Language Independence"? That statement is a bit vague -- so I am not sure what this guy is trying to say, but if he is talking about i18n, he is just wrong! Not only does Java have i18n support, but it would also be trivial to implement in any language that didn't. What the heck does this guy mean?
  • Probably be a while, O'Reilly like to let a technology get out of Vapor before they start working on a book. (Which is fine by me, it leeds to much better books).

    The Cure of the ills of Democracy is more Democracy.

  • Certain patterns of memory access get better performance under one or the other scheme. Mostly you'll see best performance with down-and-dirty machine level stuff (C/ASM), as usual.

    Most garbage collectors work by sweeping over the active areas of the heap, and copying anything which is reachable. So, the cost is linear in the amount of memory you're using (it never really detects circular structures; it just never copies them).

    But consider:

    My current area of study is programming language/compiler design, and I can testify that practically nobody publishing in journals these days cares about "old fashioned" ideas like C. Basically everything we know to be done to optimize C code has been done to death. "New fangled" languages are the future (er, duh). Mainly, these languages are built around elaborate type systems, which give the compiler and programmer a way to reason about a program without running it. It's lots of math stuff that sometimes gives the compiler the ability to make optimizations that would be impossible in C (because more is known about the way the program behaves while compiling).

    Home-brew memory management (malloc/free, new/delete) are unfortunately a big problem for these static type disciplines, since the contents of memory is very dynamic. Garbage collection lets us design these type systems more easily, and gives us more power.

    So, not only is garbage collection extremely convenient, it also enables other really nice language and compiler features, some of which can speed up your program even if GC slows it down.
  • So it's designed to run on a completely cross-platform VM, and they will openly license it to anyone, for free? Cool! Way to innovate!

    SOmehow.. I doubt it..
  • Strange, in Perl $#a == 3 if @a = (1,2,3,4).

    That's because most *n[iu]x scripts, including shells and Perl scripts, start counting at 0... $# is the # of the last argument, not the total of the list. (It works well when you are counting arguments from a single command, because the command itself is 0, so $# will equal the number of args that follow the command.)

  • When I tried to explain the lack of a real destructor to a fellow C++ programmer he was absolutely astounded.

    That your grasp of Java (and garbage collection) is rudimentary is made obvious by the forgoing statement. Out of fear that there are other's who disparage garbage collection for lacking destructors let me throw this into the thread.

    Using a destructor in a garbage collection scheme would be like writing top level functions under object orientation. Like C++, yes. The point, though, is that the collector takes care of your allocated and unused memory on the fly without interference. And while it feels weird to create objects and then leave them to be collected when you start Java (or other GC environments) the idea is that, much like the register directive, delete is a thing of the past; the machine should know best how to deal with it.

    Finally, the result of run time checking and garbage collection is a debug cycle shorter than the coding cycle. And even though you might disparage the specific implementation, that's a result that's very very nice.

    To be sure, I code a lot more in C++ than Java, but that's because I'm looking at final run speeds, not development turnaround.

    Ushers will eat latecomers.

  • You'd have to find something for geeks for which there is not an O'Reilly book to refute this.

    Really? Where can I get the O'Reilly book on Chicken Eating, then? And, more to the point, what animal would they choose for the cover if they did decide to include carnival geeks in their customer demographic?

    Ushers will eat latecomers.

  • On a touchtone phone it's also called an "octothorp". So we should pronounce this "cock-toe-thorp."
  • by ddsoft ( 198451 ) on Thursday June 22, 2000 @10:35AM (#982892)
    Insistence over control of the language!@?!?!? Didn't they invent the language? Does GM give its' cars away for free? Why do they not have the right to control the language? I am not for or against Sun and/or Microsoft. What I am against is the fact that every post on this site seems to say 'You have no right to control what you invent if we like it'. If you don't like their control, don't use it! Use something else! Just stop whinning
  • by Golias ( 176380 ) on Thursday June 22, 2000 @10:36AM (#982893)
    C# is Db. Always has been Always will be.

    Ooo... so close, but not quite right.

    You are more right that the person who is insisting they are not the same on "non-fretted" instruments.

    Tonality of notes used to depend on the scale you were playing, and the position of the note within the scale. All notes were perfectly tuned relative to the tonic note, or "root" of the scale. The problem with this was that an organ tuned to play in the key of G-sharp would sound badly out of tune if played in the key of E-flat.

    During the baroque era, the concept of the "tempered" instrument came about. Octaves, fourths and fifths became universal across the keyboard, and the seconds, thirds, sixths, and sevenths were all tweaked so you could change keys and still have a perfect fifth sound like a perfect fifth. Tempered keyboards were not perfectly in tune in the traditional sense, but the change was needed to meet the demands of modern compositions.

    When the means to measure sound frequencies came about, things were locked down even tighter (which is why "middle A", the second fret on a guitar, is often called "A 440).

    Today, C-sharp and D-flat are played with the same key on the piano, same fret on a guitar, and are generally considered to be the same note... However, in the context of a performance a good musician will adjust the pitch of the note ever-so-slightly to fit with the intonation of the ensemble and melody (if they are singing or playing an instrument that allows it).

    So to sum up... yea, it is the same note spelled differently - most of the time.

  • Don't confuse Microsoft with Microsoft Research.

  • C sharp is the enharmonic equivalent of D flat. Which is probably what I'll end up calling this language.
  • I would LOVE to have a C-like language that didn't have the limitations of Java.

    You'd want C then, wouldn't you?

    Java is not an appropriate replacement for C for system programming.

    Try "C" for that, it's quite good.

    For example (my biggest peeve), Java lacks an unsigned data type.

    I think C has that.

    I think it would be great to have a language for system programming that was cleaner that C++ and without the limits of Java.

    Well, you could use C++ and not use the unclean bits.

    People talk about native compiled Java, but let's face it, the language is very tied to the JVM. It is not designed to be a system programming language like C, with it's non-specified sized data types, non-defined byte order, etc that you need for maximum efficiency.

    No, you're right; best stick to C, then.

    Only people who don't understand the differences between Java and C++ could possibly see this as a competitor to Java.

    Only people who can't understand the similarities between C and C++ could see this as a competitor to a dead cat.

    I would ask people to not condemn it just because it's from Microsoft.

    Can we condem it for being pointless?

    Let's wait to see what pops out.

    That's the sort of reasoning that got John Hurt killed in Alien.

    there are few companies with as much experience with OOP than Microsoft.

    There are few companies with as much experience in screwing their customers, but I don't think that's a reason to wait to see how they're going to do it next.


  • It's hard to come up with a non-atrocious name for whatever "C#" is. "C sharp" just seems like another name that companies try to cram down the rest of the world's throat and that consumers just shake their head at. Maybe it should be pronounced "chhh" or "see comment."

    Now that I think of it, why not get technical and use the famous Bell Labs technical term for #? Oh wait, that would make it Coctothorpe. Not much of a ring to it.

  • Very Asinine Generally Incompetent New Ass-Language ;-)

    See? A little profanity and it's ten times funnier... right?

    Saturday Night MotherFucking Live!!!

    hmm, ok it's gonna take a bit more work than that...

  • by Blue Lang ( 13117 ) on Thursday June 22, 2000 @08:40AM (#982920) Homepage
    they have a quote on c|net where an M$ executive claims OS independance for C#.. later, he goes on to say that it's part of visual studio.. so.. hmm..

    awesome! this must mean they're releasing visual studio for solaris, linux, and all the *BSD's!

    Thanks, microsoft! You kids are swell!

  • by anatoli ( 74215 ) on Thursday June 22, 2000 @09:16AM (#982926) Homepage
    I have to repeat this over and over: Don't confuse Microsoft with Microsoft Research. This is like confusing, say, US Government with NASA.

    Simon Peyton Jones and other nice people from MS Research release a Haskell compiler called GHC. It is open-source, multiplatform (Wintel, Linux and many more), and uses GCC as a backend. Did the previous sentence surprise you? They designed C-- because C does not serve well as a backend for a functional language like Haskell.

    Haskell [] is a cool language BTW.

  • by jonabbey ( 2498 ) <> on Thursday June 22, 2000 @10:05AM (#982934) Homepage

    Yet another uninformed anti-Java rant.

    Speaking as someone who has written a couple hundred thousand lines of Java code and seen that code work without tweaking, first time, on OS/2 and Macintosh after developing it exclusively on UNIX and testing it on Windows, I have to disagree with this 'almost not cross platform' assertion. Scratch that, I really have to laugh at it.

    The trick to cross platform coding with Java is that you have to code to the set of API's that Sun has published and standardized. If you do that, and if you don't fall into a hole that Sun has left in their API's, you're fine. Someone has to define the greatest common denominator of portability, and Sun's been doing a surprisingly good job at that.

    I will be very interested to see if Microsoft will even attempt to define a substantial set of runtime API's for the C# runtime or whether they will just provide COM and SOAP and claim that that's good enough while encouraging everyone to use COM-wrapped Win32 to get their work done.

    I'm quite looking forward to seeing what Microsoft actually has in this C# and whether they actually have something new and innovative. All the blather about C# not being a response to Java is obvious nonsense, of course.

    If Microsoft attempts to duplicate the Java API set with C#, then they will be open to all the same criticisms of platform definition and limited service coverage that Java has been since it was created. If they attempt merely to provide clean access to operating system API's with really decent runtime #ifdef and #include type functionality, so that the same piece of code can conditionally execute sections of code based on the underlying environment, while still sharing the high level logic and providing a Java-like code distribution framework *and* just enough runtime functions like threading and garbage collection, then they might have something which might really swing the pendulum away from Java.

    They'd have to standardize it, though, after screaming at Sun for four years about that.

    Interesting times ahead.

  • Either this is a troll, a joke I don't understand or you got a D- in music at school...

    C# is three semitones higher than Bb. The even-tempered western scale goes: C,C#,D,Eb,E,F,F#,G,Ab,A,Bb,B


  • "C# is Java by another name," said Steve Mills, general manager of IBM's software division.

    If Microsoft can't make their own flavor of Java, and call it Java, then they'll just do the same thing, and call it something else ("C#"). This is a very typical strategy from M$: mirror an existing technology, add enough "features" that it's not compatible, then use their market clout to shove it down everyone's throat.
  • You might be onto something there... C-Hash... CHash... sounds remarkably like 'CASH' doesn't it?

    Perfect! We can just agree that the "-H" in "C-Hash" is silent.

    Practice saying it with me: "This app was written with Microsoft Chash."


  • The honestly expect programmers to pronounce this C sharp , when we all say pound for "#".

    This comes somewhat naturally (pun intended) for those of us who read music.

    (# is the musical symbol to augment a natural note a half tone, making it sharp)
  • by g_mcbay ( 201099 ) on Thursday June 22, 2000 @08:40AM (#982943)
    Huh? Did you read the article? J++ was the "embrace and extend" Java move -- it mostly failed (though Microsoft's JVM, for 1.1 compliant apps, was probably the best ever..even for running pure-Java code).

    Calling "C#" an embrace and extend play on Java is like calling Java an embrace and extend play on C++. In either case they are simply two competing OO languages with a common base (C-style programming). I actually welcome this. Hopefully Microsoft will make their technology multiplatform (not holding my breath, but..). It would actually be a GOOD thing to have a serious Java competitor out there to light a fire under Sun's collective asses.

  • The problem is that there's too much variation in the way that C can be written and deployed to treat it as a nice "portable assembler."

    The reason is that the C standard had to be open to the use of C for quite a lot of specific applications, notably including embedded applications, that aren't really representative of of the "portable assembler" intent.

    In addition, C-- adds in semantics relating to memory management, garbage collection, and such, that C actively eschews, and which C++ left out for so long that it seems unrealistic for it ever to cleanly address.

  • One thing everyone is overlooking is that gt 90% of all the world's computers run some form of Windows, not Linux. That's the hard reality.

    For whatever reason, which we don't really need to know about as we are just programmers, Microsoft is not supporting Java wholeheartedly on Windows. So what if they come up with their own language, as long as it's got some really neat technical features like what's in Java? Cool, I say. At least Microsoft know how to get the best performance out of Windows and in the end we all benefit.

    Face it, we are all going to have to learn this language sooner or later. Our management will see to that. Windows is the most common OS on this planet and if we want to continue to earn a living, this language is in our future.

    Let's be practical, gentlemen.

  • by Sigl 11 ( 203655 ) on Thursday June 22, 2000 @08:41AM (#982952) Homepage
    Here's the real list of features, from a secret memo leaked to me from Microsoft
    • We'll give out the reference manuals, but they won't cover all of the API's.
    • Compiler will be free until there are no competitors left.
    • Continues Microsoft's great tradition of stealing good ideas from other places and then botching the implementation.
    • Embedded into the next version of Windows.
    • Hungarian notation is forced standard.
    • Professional version doubles the number of race conditions present!
    • Perfect tool for virus writers.
    • Easy-to-learn Visual Basic hooks speed the development of crappy shareware using the product.
    • And as always, much much more (if you buy the Enterprise Edition)!.
  • > # is pronounced "sharp" on sheet music.

    I'm not thinking about sheet music when I'm programming. Maybe I should ? ;)
  • Next in the line of programming languages
    Db - D Flat: The same as C Sharp, yet extended a little further
    Ebbb - E Triple Flat: Even cooler...cause it uses more musical notations then all other programming languages ever developed
    oh..and since when are programming languages equated with musical notation?
  • ... But there actually are some rather smart people working at Microsoft Research.

    Just because it's fun (and easy!) to bash the parent company does not mean that the research division is composed of hairy-backed, knuckle-dragging cretins.

  • by ethereal ( 13958 ) on Thursday June 22, 2000 @08:42AM (#982967) Journal

    MS Java's incompatibilities weren't mistakes at all. They were part of the normal embrace, extend, extinguish strategy that they rely on. The only flaw in their plan was that Sun stopped MS before they could completely extend Java. At this point it's probably easier for MS to invent a new language than to find more ways to tear down Java.

  • by Dreamweaver ( 36364 ) on Thursday June 22, 2000 @10:10AM (#982971)
    Not just touchtone phones, Octothorpe is the correct name for the # symbol.. though i'm betting the MS marketing department didn't know that, because Coctothorpe sounds like a really awful porn adaptation of a B-grade horror movie.
  • I don't say "pound". I say "hash". What the heck does "pound" have to do with it anyway? (yes, it was the symbols for the pound measurement or somesuch, but that is pretty much irrelevant usage).
  • by shambler snack ( 17630 ) on Thursday June 22, 2000 @11:34AM (#982985) Homepage
    There isn't any real different. In all the intial press announcements and early books on Java, it was proclaimed that Java was a better C++ because it didn't allow pointers and had automatic garbage collection (memory management) than C/C++ (amoung other things). The problem with Java is Sun's desire to maintain control. What makes the control so blatant is that Sun went through two exercises where they were going to make it an open standard, only to kill that effort at the last minute. Rather than rehash the why and wherefore of both attempts, let me just say that it would ahve been better if Sun had never even made the effort in the first place. Sun has, IMHO (and many others) come across looking like M$ in the way it has handled not just Java but the community at large; cynical and manipulative for the ultimate benifit of Sun.

    And I'm sorry you got modded down by someone who can't differentiate between a legitimate question and a real troll. I'd like to know who moderates comments so that we could moderate the moderators.
  • by pb ( 1020 ) on Thursday June 22, 2000 @08:44AM (#983001)
    Read these, and think "Word Macros", or "ILoveYou"...

    ..."intended to drastically simplify and speed up software development"...

    Good intentions, yep. Sounds about right.

    "Microsoft has its own unique programming model with Visual Basic..."

    That's putting it mildly.

    "Combine it with the Web services (Microsoft) is announcing and you get powerful stuff.

    Oh no!

    Okay, I'm stopping right here.

    Powerful + Easy-to-use => Dangerous

    Anything about "Security" has to be marketing. If it's Powerful, and it's Easy-to-use in the Microsoft sense, and on the web... then you're going to be in BIG trouble, Real Soon Now.
    pb Reply or e-mail; don't vaguely moderate [].
  • Any number of names come to mind.

    "What is in a name? Arrows by any other name would kill just as swift."

  • by Dreamweaver ( 36364 ) on Thursday June 22, 2000 @10:16AM (#983030)
    Of course MS releases a new programming language.. they've probably had it in a red, glass-fronted box in the legal department for years marked with a "Break glass in case of anti-trust" sign. Now when they're forced to release the windows source code, they'll just release it in 'C sharp' which nobody knows and is just close enough to C and java to really screw up the people who Do know them.
  • by Hard_Code ( 49548 ) on Thursday June 22, 2000 @08:45AM (#983035)
    I am not a crook

    I did not kill Nicole Brown Simpson

    I did not have sexual relations with that woman

    This is not a response to Java
  • by MrBogus ( 173033 ) on Thursday June 22, 2000 @08:46AM (#983042)
    RMS had some interesting thoughts on this --

    Either the Open Source community rewrites Java (calling it by a different name, of course, to avoid trademark problems - [Something] Is Not Java) and then everyone has an open standard to write to; or, every large commercial concern rewrites Java, and then instead of one proprietary language, we have three or four.

    Microsoft has been public about their C# ('COOL') plans for a long time. After a recent standards battle, IBM is grumbling about creating their own Java too. Venture capitalists are probably circling around a few Java-clone startups as we speak.

    So, if we break this down further than Sun/Java = Good and MS/C# = Evil, you'll realize that Microsoft isn't really doing anything more than what other vendors will do eventually.
  • by Anonymous Coward on Thursday June 22, 2000 @11:52AM (#983057)
    Let me make a few points clear:

    - C# is just the latest name. COOL was the original code name, which was later changed to Safe C. They are all the same thing.

    - At the time I left, they had no intention of being cross-platform compatible.

    - They ARE trying to get a good RAD environment going. It is intended to fill that space between VB and VC++. If you want to crank out a fast GUI (for example), and hate MFC and VB, then this is for you.

    - They've moved the WFC stuff from Java over to this new language. WFC is really nice to work with IMO.

    - The execution engine (they don't call it a VM) is damn fast. Not native, but pretty good... faster than J++.

    When it gets released, give it a try before you knock it. I think most people will be pleasantly surprised.
  • by Galahad ( 24997 ) on Thursday June 22, 2000 @08:48AM (#983074) Homepage
    D Flat is a text mode UI framework by Al Stevens and described over a series of columns he wrote for Dr. Dobb's Journal [].
  • Let's see. We have a new product from Microsoft that:

    1. Is very similar to an established product from another company,
    2. Is available only from Microsoft,
    3. Runs only on Windows,
    4. Is offered as an alternative to the look-alike product,

    It's the whole Microsoft strategy in a bottle again. I guess that their attempts to embrace and extend Java aren't working, so now their offering their Windows-only clone instead.

  • by Benjamin Shniper ( 24107 ) on Thursday June 22, 2000 @08:49AM (#983108) Homepage
    I had heard they were coming out with a C++ based language called "COOL". It sounded very similar to this newer speculation about "C#".

    There are a couple of problems with Microsoft coming out with a cross-platform language and expecting everyone to use it instead of it's competitors (C,C++, and Java are all reasonably well supported across most platforms.)

    1. Microsoft isn't well known for good cross-platform support. Their new SOAP XML standards are a good start. However, the technologies VB, COM, and MFC extentions were quite well rememberred as terribly non-cross platform, even though they claimed COM was (and claimed NT was POSIX compliant).

    2. There is a good deal of heavily entrenched and saturated languages like Java and TCL already poised to defend their positions.

    3. Microsoft is more weak than ever in claiming "This is the future." Their future is quite uncertain now, even if they fix a deal with the Justice Department.


    (P.S. This sounds like a computer language made for people who played flue and programmed C before, and now want to try object modelling their computer synthesiser.)
  • by Shoeboy ( 16224 ) on Thursday June 22, 2000 @08:49AM (#983110) Homepage
    When I first heard about COOL, I thought it should have been renamed to Simple Unified C++ Kit
    (former microserf)
  • by ChrisRijk ( 1818 ) on Thursday June 22, 2000 @08:49AM (#983124)
    Since I came across it earlier today, I thought I might as well post it - J2SE 1.4 "Merlin" [] public review at the "Java Community Process". It's 59 pages long, though that's mostly because it is quite detailed. If you want to influence the direction of future Java development... now's the time - they do want response to this...
  • by gwalla ( 130286 ) on Thursday June 22, 2000 @02:13PM (#983160) Homepage
    c sharp is not the same thing as d flat. ask someone who plays a fretless string instrument.

    That's right, because fretless string players don't play exactly in equal temperament. In equal tempered tuning, which almost all Western instruments are in, C sharp is the same tone as d flat. In just intonation, however, they are subtly different.

    Quick primer on tunings, because it's not common knowledge (it is pretty offtopic, but germane to this thread): our old pal Pythagoras discovered that pitch is directly related to the length of the vibrating body (a string, an air column, etc.), and that the simplest ratios of the lengths of two strings are consonant. The most consonant ratio is 2:1 (an octave), followed by 3:2 (a perfect fifth), etc.

    To get a scale, start at any pitch and find the next note one perfect fifth up, then the next, and so on until you reach an octave equivalent of your first note, which is your key. Find the octave equivalents of all of those notes and and you've got your scale. This is called just intonation. The only problem is that you're stuck in one key on that instrument, because the octave equivalent isn't exactly an octave equivalent.

    To get around this, various methods have been created. The one that caught on was equal temperament (although well temperament was popular in the baroque era--hence the title of "The Well-Tempered Clavier"), in which the intervals between consecutive pitches are equalized, and certain close pitches are made equal (E# F, C# Db, etc.). In essence, every note in an equal tempered scale is a wrong note! They're just close enough that it's not particularly jarring.

    Zardoz has spoken!

The last thing one knows in constructing a work is what to put first. -- Blaise Pascal