How wrong am I and what is Microsoft smoking?
How wrong am I and what is Microsoft smoking?
As with every trivial patent, the valid objection is not that this has already been done, because every trivial patent is somehow a bit different to things which have been done before. This particular formulation allows structures to be changed while they are being constructed, but makes them immutable once construction is complete.
The objection to this patent is that the differences to prior art are all trivial and obvious to somebody skilled in the art: if you tried to make an immutable type for C# then you would get something that looked pretty much like this patent. On that basis, the patent should not have been granted.
Equivalent to the following Ruby?
a = "abc"
a.upcase!
a.freeze
a.downcase! # => RuntimeError: can't modify frozen String import Control.Monad.ST
import Data.STRef
main = do
let n = runST $ do n <- newSTRef 5
modifySTRef n (+ 10)
readSTRef n
modifySTRef n (+ 10)
{-
^^^^^^
Couldn't match expected type IO t0 with actual type ST s0 ()
In the expression: main
When checking the type of the IO action main
-}
print nThese are probably not invalid under the new Alice reasoning, but certainly could be for other reasons for abstractness or non-novelty or obviousness. Someone on reddit looked at the file wrapper and said one of them had received an initial rejection for obviousness and abstractness
I got as far as a lawyer who was able to smell something fishy; because at the time I didn't own a company. Perhaps i should try again...
What's the linked list patent in question (publication number preferably)?
https://news.ycombinator.com/item?id=1165089 https://news.ycombinator.com/item?id=1165471 https://news.ycombinator.com/item?id=4664243
But when you put these properties together you essentially get a single structure representing multiple lists. That is, given items 1 - 5, you could arrange the pointers to traverse them in orders [1, 2, 3, 4, 5] or [1, 3, 5, 4, 2] or [5, 4, 1, 2, 3], but not [1, 5, 2] or [1, 2, 3, 2, 1].
What I don't understand is why anyone would put what is essentially a number of different lists into a single list. I see no advantages either in algorithmic complexity (traversal and addition/insertion/deletion operations are still the same complexity) or implementation. In fact, I can easily see the implementation being a nightmare. It's tricky enough deleting a node from a singly-linked list. I cannot imagine a problem this was invented to solve that could not have been solved more easily with multiple linked lists. Maybe the problem was non-technical, e.g. "get a patent to put on my résumé".
E.g. if you have 1->2 1->4 2->3 3->5 4->5 the lists could be [1,2,4,3,5] and [5,4,3,2,1].