<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Broadly speaking, when reading a patent it is the independent claims that matter most. If your work is not infringing the independent claims, then everything else can be ignored -- especially the description & background sections of the patent, which are primarily used to make sense of the completely abstract terms in which the invention is described by the claims.<div><br></div><div>The independent claims in these two patents are given below along with my understanding of what kind of inventions they're trying to cover (IANAL, but I was an Intellectual Property analyst in a previous job).</div><div><br></div><div><b>Patent US9329844B2</b></div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">1. A non-transitory computer-readable medium with instructions stored therein, the instructions, when executed by a processor, cause the processor to perform operations comprising: </blockquote><div><br></div><div>Hurray! You just described a computer! Btw, I never read the "non-transitory" part when in patents earlier. Some interesting background - <a href="https://www.smithhopen.com/glossary_term/149/Non-transitory-Media">https://www.smithhopen.com/glossary_term/149/Non-transitory-Media</a></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>receiving a first request to compile a first set of program instructions coded in a first high-level language, the first high-level language a C language based object-oriented programming language;</li></ul></blockquote><div>Some invention containing a C, or C-like compiler....</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>receiving a second request to compile a second set of program instructions related to the first set of program instructions, the second set of program instructions coded in a second high-level language including object-oriented elements and procedural elements, wherein second high-level language is not compatible with the C language;</li></ul></blockquote><div>...gets interesting here. A second compiler for a non C-like language. The two compilers are being used to compile two different, but related programs... </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>compiling the first set of program instructions and the second set of program instructions using a modular compilation system including multiple front-end compilers, the first set of program instructions compiled into a first intermediate representation of the first set of program instructions and the second set of program instructions compiled into a second intermediate representation of the second set of program instructions;</li></ul></blockquote><div>this seems to be describing typical GCC or LLVM architecture, right? (I'm not a compiler engineer!) </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>linking the first and second intermediate representations; and</li></ul></blockquote><div>... nothing special here...</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>compiling the first and second intermediate representations using a back-end compiler that is specific to a target processor.</li></ul></blockquote><div><br></div><div>Again, standard cross compilation? </div><div><br></div><div>This independent claim seems too broad to be true. There is nothing novel, apart from the presence of 2 compilers, that seems to be going on between the two programs being compiled or the two compilers. Let's narrow the scope using some dependent claims....</div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">4. The medium of claim 1, further comprising instructions to perform additional operations including optimizing the first and second intermediate representations during a compile-time optimization.</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">5. The medium of claim 1, further comprising instructions to perform additional operations including optimizing the first and second intermediate representations during a link-time optimization.<br>7. The medium of claim 1, wherein compiling the second set of program instructions includes performing compile-time data-type overflow checking by default.<br>8. The medium of claim 1, wherein compiling the second set of program instructions includes performing compile-time data structure bounds checking by default.<br>9. The medium of claim 1, wherein compiling the second set of program instructions includes performing one or more compile-time type safety operations in conjunction with one or more type inference operations.</blockquote><div><br></div><div><b>Aha! Something gets interesting here. There is optimisation happening between two programs written in two unrelated languages, by converting them into an IL and using both the ILs to perform optimisation. Does anyone know where Apple is using such compiler technology? </b>After reading the description & background section of the patents my guess is that they have patented all the concepts of Swift <b>in conjunction with</b> existing C/Obj-C code.</div><div><br></div><div>Also, the wording seems to be sufficiently broad to cause some concern to Haskell & Rust compilers, but the compilation of two programs in two unrelated languages will probably prevent an infringement.</div><div><br></div></div><div><div><br></div></div></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">10. A system comprising:<ul><li>[...] removed clauses similar to first independent claim [...]</li></ul><ul><li>wherein the second set of program instructions are not compatible with the C language and includes a data type provided by the second high-level language to indicate absence of a value of any type.</li></ul></blockquote><div>Take a look at the last clause. This is where the concept of `Maybe` is making its way into an independent claim. However, all of this is <b>in conjunction with</b> with a system comprising two compilers of unrelated languages.</div><div> </div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">15. A computer-implemented method comprising:<ul><li>[...] removed clauses similar to first independent claim [...]</li></ul><ul><li>linking the first and second intermediate representations, wherein linking the first and second intermediate representations includes optimizing the first and second intermediate representations in response to a compile-time request to optimize the program instructions; and</li></ul><ul><li>compiling the first and second intermediate representations using a back-end compiler that is specific to the target processor.</li></ul></blockquote><div>Not sure what's new about this claim over and above the first claim, but I'm tired now... Moving on to the next patent...</div><div> <br></div><div><div><b>Patent US9952841B2<br></b></div></div></div></div><div><b><br></b></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">1. A non-transitory computer-readable medium with instructions stored therein, the instructions, when executed by a processor, cause the processor to perform operations comprising:</blockquote><div><br></div><div>Again -- you're describing a computer, Sherlock! </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>receiving a first request to compile a first set of program instructions coded in a first high-level language, the first high-level language a C language based object-oriented programming language; </li></ul></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>receiving a second request to compile a second set of program instructions related to the first set of program instructions, the second set of program instructions coded in a second high-level language including object-oriented elements and procedural elements, wherein the second set of program instructions includes a data type provided by the second high-level language to indicate absence of a value of any type;</li></ul></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><ul><li>compiling the first set of program instructions and the second set of program instructions using a modular compilation system including multiple front-end compilers, the first set of program instructions compiled into a first intermediate representation of the first set of program instructions and the second set of program instructions compiled into a second intermediate representation of the second set of program instructions;</li></ul><ul><li>linking the first and second intermediate representations; and</li></ul><ul><li>compiling the first and second intermediate representations using a back-end compiler that is specific to a target processor.</li></ul></blockquote><div>Again, talking about a similar 2-compiler system as the first patent. Let's look at some dependent claims....</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">17. The method as in claim 16, wherein the second set of program instructions are related to the first set of program instructions, the second set of program instructions are coded in a second high-level language that includes object-oriented and procedural elements, the second set of program instructions are not compatible with the C language, and the second set of program instructions includes an interpolated string.<br>18. The method as in claim 16, wherein the back-end compiler is a just-in-time compiler.<br>19. The method as in claim 16, wherein compiling the second set of program instructions includes performing compile-time data-type overflow checking and compile-time data structure bounds checking by default.<br></blockquote><div><br></div><div>They seem to be patenting numerous advanced compile-time checks in a 2-compiler system. </div><div><div><div><br></div></div></div></div><div>(there are two more independent claims in this patent, but I'm really tired now!)</div><div><br></div><div>-- Saurabh.</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 31, 2019 at 7:27 AM Henk-Jan van Tuyl <<a href="mailto:hjgtuyl@chello.nl">hjgtuyl@chello.nl</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
L.S.,<br>
<br>
I just read the article "Apple Patents Swift".[0] It says that Apple has<br>
two patents regarding Swift: [1][2]; these patents state, amongst others,<br>
that there are new types of variables:<br>
<br>
"Additionally, an embodiment of the new language introduces advanced types<br>
not found in Objective-C. These types include Tuples and Optionals. Tuples<br>
enable a developer to create and pass groupings of values. Tuples group<br>
multiple values into a single compound value."<br>
<br>
and<br>
<br>
"In one embodiment, an optional type is provided that handles the absence<br>
of a value. Optionals are a way to say either “there is a value, and it<br>
equals x” or “there isn't a value at all.”"<br>
<br>
I hope we don't get arrested for using the Maybe monad or tuples in<br>
Haskell.<br>
<br>
Regards,<br>
Henk-Jan van Tuyl<br>
<br>
<br>
[0]<br>
<a href="https://www.i-programmer.info/news/98-languages/12495-apple-patents-swift.html" rel="noreferrer" target="_blank">https://www.i-programmer.info/news/98-languages/12495-apple-patents-swift.html</a><br>
[1] <a href="https://patents.google.com/patent/US9952841B2" rel="noreferrer" target="_blank">https://patents.google.com/patent/US9952841B2</a><br>
[2] <a href="https://patents.google.com/patent/US9329844B2" rel="noreferrer" target="_blank">https://patents.google.com/patent/US9329844B2</a><br>
<br>
<br>
-- <br>
Message from Stanford University:<br>
<br>
Folding@home<br>
<br>
What if you could share your unused computer power to help find a cure? In<br>
just 5 minutes you can join the world's biggest networked computer and get<br>
us closer sooner. Watch the video.<br>
<a href="http://foldingathome.stanford.edu/" rel="noreferrer" target="_blank">http://foldingathome.stanford.edu/</a><br>
<br>
--<br>
<a href="http://members.chello.nl/hjgtuyl/tourdemonad.html" rel="noreferrer" target="_blank">http://members.chello.nl/hjgtuyl/tourdemonad.html</a><br>
Haskell programming<br>
--<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><a href="http://www.saurabhnanda.com" target="_blank">http://www.saurabhnanda.com</a></div>