Slashdot Mirror


Microsoft's 'IsNot' Patent Continued...

An anonymous reader writes " According to the patent application--filed in mid-November by Paul Vick, lead architect for Visual Basic .Net at Microsoft; Amanda Silver, a program manager on the Visual Basic team; and an individual in Bellevue, Wash., named Costica Barsan--the IsNot operator is described as a single operator that allows a comparison of two variables to determine if the two point to the same location in memory." This article continues the tale started last november, and here is an eWeek story on the same subject.

27 of 566 comments (clear)

  1. Re:Changing code again by ZigMonty · · Score: 3, Informative

    No, they want to patent: if (ptr1 != ptr2) ...

  2. Re:In other news, English patented by MS by gowen · · Score: 3, Informative
    The fees are based on Scrabble's point system, with 1 cent per point.
    So that's why the cheat code in MS Minesweeper is "XYZZY". They're working on the principle that people won't share information that costs the $0.36 for everyone they tell.
    --
    Athletic Scholarships to universities make as much sense as academic scholarships to sports teams.
  3. Wow, nice bias by rabtech · · Score: 5, Informative

    I like how the submitter conveniently left out Paul's blog entry on the subject:

    http://www.panopticoncentral.net/archive/2004/11 /2 0/2321.aspx

    He says, among other things that software patents are a "bad idea" and that he did not "feel particularly proud of my involvement in the patent process in this case".

    So there you have it, from the horse's mouth.

    --
    Natural != (nontoxic || beneficial)
  4. Re:Oh please! by berglin · · Score: 3, Informative

    > I remember our programming instructor in sixth grade teaching us about this logic operator is BASIC.

    Actually, it's not the same operator.

    They're talking about creating an operator that can say if two objects are the EXACT same object or not.

    In C++ terms this is the equivalent of doing *ptr != *ptr (!=) vs. ptr != ptr (IsNot).
    As you all know, int a = 1 and int b = 1 does mean that &a != &b whereas it does not mean that a != b.

    So, basically they're trying to patent a new keyword with new functionality in all BASIC-related languages, effectively locking all companies that provide BASIC-interpreters out because they can't provide this functionality.

  5. Re:Oh please! by Anonymous Coward · · Score: 1, Informative

    "IsNot" is different from "Not equal to"

    Actually, depends on your point of view. If I have a pointer A to an object, and a pointer B to an object, then IsNot is simply doing A != B or in VB terms, A B, if we treat A and B as pointers.

    Since in object oriented stuff, A and B are references, then equals (and != and ) is an overloaded operator that would, if implemented, return True if the contents of the two referenced objects were equal.

    But you can still do IsNot with a != operator - you just have to be careful what you're testing the equality of.

    You would think this would apply to Java and Modulo-3 as well... but I don't know them very well. If it existed in those languages, it would be prior art. But so would the fact that someone could write this little routine in their VB app:

    Function IsNot(A As Object, B As Object) As Boolean
    IsNot = Not A Is B
    End Function

  6. Re:Oh please! by janoc · · Score: 5, Informative
    Well all LISP variants have at least four comparison predicates (and LISP predates Visual Basic by ages):

    From Lisp primer:

    = (= x y) is true if and only x and y are numerically equal.

    equal As a rule of thumb, (equal x y) is true if their printed representations are the same (i.e. if they look the same when printed). Strictly, x and y are equal if and only if they are structurally isomorphic, but for present purposes, the rule of thumb is sufficient.

    eq (eq x y) is true if and only if they are the same object (in most cases, this means the same object in memory).

    eql (eql x y) is true if and only if they are either eq or they are numbers of the same type and value.

    So what Microsoft is trying to patent is known in LISP as (not (eq a b)) for a long time already :(

  7. Re:Oh please! by TheRaven64 · · Score: 2, Informative

    Depends on your language. In a language like Java, all object variables are references, so saying Object1 != Object2 is asking if both variable point to the same object. The same is true in Objective-C, where all object variables are pointers. In these languages, you need to invoke a method defined in the object itself to compare objects by value.

    --
    I am TheRaven on Soylent News
  8. Re:Oh please! by WillerZ · · Score: 5, Informative

    The IsNot operator described in the patent also differentiates between objects with the same address in different memory spaces. They mentioned running a cluster-aware program which could manage objects on multiple machines simultaneously.

    So, it's equivalent to:

    ((&a != &b) && (a.host != b.host))

    Which is yet more complex but still not worth patenting a simplification on.

    --
    I guess today is a passable day to die.
  9. Re: Oh please! by Black+Parrot · · Score: 4, Informative


    > But it is the same as "Not equal to" applied to the address of the variable [...] So, it's still a pretty trivial concept...

    There's also single-operator prior art in the Scheme neq? operator.
    (I don't know whether it's standard, but it is provided by some interpreters.)

    --
    Sheesh, evil *and* a jerk. -- Jade
  10. Re:Also today... by maxwell+demon · · Score: 3, Informative

    The letter 'T' is already trademarked by the Deutsche Telekom. Sorry, MS.

    --
    The Tao of math: The numbers you can count are not the real numbers.
  11. Re:Prior art? by vrt3 · · Score: 3, Informative

    IsNot compares the addresses of the variables, not the value. The equivalent in C is &a != &b instead of just a != b.

    It's just like the equivalent in Python: a is not b (or not a is b, I don't really understand the need for a separate operator). Only difference is that it's one word instead of two. And different capitalization (but isn't Basic case insensitive?)

    --
    This sig under construction. Please check back later.
  12. Re:Oh please! by gstoddart · · Score: 5, Informative
    a isNot b
    is equivalent to:
    &a != &b


    Well, in C, if a and b are strings, structures, or arrays, then the variable name is the same as the address.

    Therefore a != b when you're testing if the 'two variables point to the same location in memory' is covered by friggin' PDP-11 architechture. It's basically a comparison of two integers and a BNZ (branch non-zero) instruction.

    They can make all the claims they want about how they've done all sorts of innovative stuff to make the link novel, it's still comparing a pointer reference in a programming language as far as I can seem.

    What's next, start patenting the AND, NOT, OR family of operations? I hope not!

    --
    Lost at C:>. Found at C.
  13. Prior art by hey! · · Score: 4, Informative
    OK, as others point out, *ptr != *ptr2 tests if what the ptrs point to is equal (e.g. if they both point to the value 3). Now arguably, ptr1 != ptr2 is not the same concept either, because we are testing whether two addresses have the same value. But suppose I have a C program with two structs.

    // don't try this if you want to work for me...
    struct foo {
    int x;
    int y;
    }

    struct foobar {
    int x;
    int y;
    int z;
    } // ... later on we see

    struct foobar fb;
    struct foobar *fbptr;
    struct foo *fptr;

    fb.x=1;
    fb.y=2;
    fb.z=3;

    fbptr = &fb;
    // this is a bad idea, you'd better know your machibe representation
    // if you don't want a core dump, but you CAN do it.
    fb = & ((foo) fb);

    if (fbptr != fb)
    println("this should not be seen.");
    else
    println("the pointers are equal.");


    However, I think there is a closer parallel.

    Consider the following java snippet:

    String s1 = "this is a string";
    String s2 = "This is a string";

    if (s1 != s2) {
    System.out.println("s1 is NOT s2");
    } else {
    System.out.println("s1 IS s2");
    }

    if (!s1.equals(s2)) {
    System.out.println("s1 DOESN'T equal s2");
    } else {
    System.out.println("s1 EQUALS s2");
    }


    Of course, underneath it is probably implemented with pointers, but the semantics of the != operator on reference types is defined to be object identity non-equality.

    This prints out the following:
    s1 is NOT s2
    s1 EQUALS s2

    The comparison operators in Java, when applied to reference variable types (which is everything other than built in primitive3 types) tell you whether the objects have the same identity (==) or different (!=).

    Imagine, for example, instead of a conventional virtual memory architecture, we have an architecture where we have different kinds of memory with different speeds mapped to different address ranges; say that adresses under 1 million are fast memory and addresses 1 million or over are slow memory. This is not impossible to imagine for some kind of embedded device. Suppose, in addition, the runtime system understands this and caches copies of frequently used addresses in the below 1 million range to enhance performance.

    In that case suppose we have the java expression:

    if (objRef1 != objRef2)

    In this case, a correct java implementation on this hypotethetical platform could not use a simple address comparision. If the addresses were unequal, it would have to do a further check to see if one of them were a cached version of the other.

    Y'know, a news for nerds site really ought to make it possible to post code examples without resorting to stupid tricks like this: 2qy982uoiu 3o2iu4o23iuoi23u4 23o4uo23iu ou34oi 23oi4u o2i3u4o i234 lkasdfls llflawl fasdf ssdlllle asdf foo sdalkfl adlk;jlaskdf lsadf . as;ldkf ;lkasd lk dfllelaksdf lkasjdf lkasdjf lkajsdf lkkas df asdlfkj ealksdf . asaKJ SADF SADKFJ kj kajsdfh kjashdf kjas dfk aksdjf llk jasdlkjhs adflkjh asdf lkjhsad flkjadhsf lkjh j aldksjfh lsadkjfh lkj laksdjfh lkajsdfh lkasjdfh lakjsdf laksjdfh laskjdf laskjdfh lsadkjfh iuewriuy c,m.xzb wuoery oj lkjasdf ,
    --
    Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
  14. Re:Also today... by Tom · · Score: 2, Informative

    T is already trademarked by the german Telekom, another industry giant who trademarks anything under the sun (including the colour pink and the word "hotspot" - I kid you not).

    --
    Assorted stuff I do sometimes: Lemuria.org
  15. Re:Changing code again by Anonymous Coward · · Score: 1, Informative

    Pointers are such a basic but misunderstood concept. Here is some C basics.

    int *p0,*p1;

    Treat the value that is held by the variable p0 as an address somewhere in memory.
    if(*p0 == '\0') foo();

    Check to see if the variable p0 holds the value NULL.
    if(p0 == '\0') foo();

    if(*p0 != *p1) Retrieves the values of p0 and p1. Treats them as the address of the values to be compared.

    if(p0 != p1) Compares the values that p0 and p1 actually hold.

    "...if the two point to the same location in memory..."

    It looks like MS is trying to patent if(p0 != p1)

  16. Re:Oh please! by ratboy666 · · Score: 3, Informative

    Actually, the grandparent post was right...

    a and b are references, which are pointers in the C sense:

    So the C code would be:

    int *a, *b; ...

    if (a != b) { ...
    }

    The extension to C++ usage is obvious to a skilled practioner.

    And the (new, patent pending or granted?) Microsoft BASIC approach is:

    if a isNot b then ...

    The equivalence is EXACT between != and isNot. I am a skilled at programming, and I find it obvious.

    Microsoft will NEVER defend this patent. 'Cause they will lose.

    PS. Object equality vs. Value equality is carefully delineated in "Smalltalk, The Language and Its Implementation" (just the reference I had at hand, there are HUNDREDS of other discussions -- usually for stuff a bit more interesting though).

    Ratboy.

    --
    Just another "Cubible(sic) Joe" 2 17 3061
  17. Re:Sue the Patent Office? - Probably Not by iammrjvo · · Score: 3, Informative


    Unless the government specifically passes legislation allowing you to sue the government, then you can't sue the government. It's a legal concept called sovereign immunity and is derived from the ancient concept of "the divine right of kings."

    --
    Ha, ha! Nobody ever says Italy.
  18. Re:Oh please! by networkBoy · · Score: 2, Informative

    "this is just a shortcut (well, actually &&!= are 4 letters and isNot are 4 letters, but you know what I mean...),"

    isNot != 4 letters :-)
    -nB

    --
    whois gawk date unzip strip find touch finger mount join nice man top fsck grep eject more yes exit umount sleep dump
  19. Re:totalitarianism by nickos · · Score: 2, Informative

    "VC++ is sufficiently broken"

    I hate to say it, but that's no longer the case. For a couple of years now MS has had the most standards (ISO/ANSI) compliant compiler. In fact I think Microsoft even hired one of the main STL guys to help on this front...

  20. Re:Now look here... by olderchurch · · Score: 3, Informative
    --
    Disclaimer: This opinion was created without the use of any facts
  21. Re:Oh please! by Paralizer · · Score: 2, Informative
    Well, in C, if a and b are strings, structures, or arrays, then the variable name is the same as the address.
    That's only true if they are pointers. You can have a structure of type foo_t called asdf, such as:
    struct foo_t asdf;
    Allocated off the stack, and to get the address you need to dereference it:
    &asdf
  22. Re:Link? by Lonewolf666 · · Score: 2, Informative

    Here are two links:

    http://www.heise.de/newsticker/meldung/19650
    http://www.golem.de/0307/26462.html

    Both in german, however, because the lawsuits were in Germany and probably not big news in english speaking countries.

    --
    C - the footgun of programming languages
  23. Re:Oh please! by Random832 · · Score: 2, Informative

    != on pointers checks the memory location.

    java has some sort of function to check the memory location too.

    --
    We've secretly replaced Slashdot with new Folgers Crystals - let's see if it notices.
  24. Dated prior art from a Microsoft VB newsgroup by Trojan · · Score: 2, Informative

    See here for a whole discussion from December 2001 and here for a suggestion for an IsNot operator dated January 2001. The patent application was filed in May 2003. Anyway this application is just funny and I hope it'll be granted just to watch the effect.

  25. Re:Sue the Patent Office? - Probably Not by iammrjvo · · Score: 2, Informative


    Click here for more info on the topic.

    --
    Ha, ha! Nobody ever says Italy.
  26. This sounds like Lisp 'eq' by Dammital · · Score: 2, Informative
    ... which returns true if both arguments are the same object.

    Common Lisp has a number of equality operators (eq, eql, equal, equalp, =) which are subtly different. CL differentiates among objects that are equal in type and value, equal in value regardless of type, are identical, or some combination of these.