Hi Antonio, A few comments below:
On Sat, Apr 10, 2021 at 7:30 PM antonio <anto...@vieiro.net> wrote: > Hi all, > > I've been taking a look at the CND donation and I'd like to share with > you some findings, to verify if I'm correct and to discuss what should > be done (I'm afraid this is goning to be a long email). > > Before going any further, you may want to read Jan's instructions for > CND first, available in the README.cnd file in the CND branch: > > [1] > https://github.com/apache/netbeans/blob/cnd/README.cnd > > 1) MISSING SOURCES > > I think we can recreate many of the files missing in the donation listed > in Jan's README.cnd [1] but for these three ones: > > - cnd/cnd.modelimpl ... CPPParserEx.java > - cnd/cnd.modelimpl ... CPPSymbol.java > - cnd/cnd.modelimpl ... cpparser.g > > These three files were probably not donated because their origin could > not be exactly tracked. > > Some research indicates that these files were incorporated to NetBeans a > long time ago, and were originally covered with a very liberal license. > > Further modifications by Sun/Oracle were covered with CDDL/GPL2+CPE, > that we can't use in Apache NetBeans. > > The latest I can track them in NetBeans history are (probably) these > versoions (these don't have latest Sun+Oracle modifications, of course, > and may be poor alternatives to NetBeans 8.2 parsers/lexers): > > [1.1] > > https://github.com/emilianbold/netbeans-releases/blob/ddf7b064d46d371e2d1c69f30176b7ddb11178c1/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/parser/CPPSymbol.java > > [1.2] > > https://github.com/emilianbold/netbeans-releases/blob/ddf7b064d46d371e2d1c69f30176b7ddb11178c1/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/parser/CPPParserEx.java > > [1.3] > > https://github.com/emilianbold/netbeans-releases/blob/ddf7b064d46d371e2d1c69f30176b7ddb11178c1/cnd.modelimpl/src/org/netbeans/modules/cnd/modelimpl/parser/cppparser.g > > And here comes the first question: > > Q1. May we incorporate these three files ([1.1], [1.2], [1.3]) that were > covered by public domain licenses into Apache NetBeans? > > 2) MISSING BINARIES > > Jan's README.cnd [1] also lists three missing binaries required to build > and/or to run CND. > > The first two binaries: > > * [A] 47F0DB803884692F28A26A2FF80A7D6756B091DB-cnd-build-trace-1.0.zip > * [B] E59851B0E49C05D728D5C653E52750FA5B6A8F0E-cnd-rfs-1.0.zip > > Have C/C++ sources that have been donated: > > * [A] https://github.com/apache/netbeans/tree/cnd/cnd/cnd.discovery/tools > * [B] https://github.com/apache/netbeans/tree/cnd/cnd/cnd.remote/tools > > And that can then be built for Windows and Linux with ASF Infrastructure > (MacOS or Solaris builds may require third-party infrastructure). > > The third binary in Jan's README.cnd, > > * [C] 5CAB59D859CAA6598E28131D30DD2E89806DB57F-antlr-3.4.jar > > Is exactly the antlr-3.4 "complete" variant (i.e., the runtime + the > compiler) but can be easily tracked and used (BSD-3 license). > > No questions regarding these binaries, then. > > 3) MISSING MODULE "cnd.antlr" > > Jan's README.cnd [1] also lists a module that was not donated by Oracle: > > * cnd/modules/org-netbeans-modules-cnd-antlr.jar => > cnd/libs.antlr.cnd/external > > This "cnd.antlr" module in NetBeans 8.2 seems to be a fork of Antlr 2 or > Antlr 3. This module is used to _compile_ different grammars in other > modules in CND (this is equivalent to the "antlr.Tool" in antlr > "complete" variants): > > [GRAMMARS] > * cnd.apt (aptexpr.g, aptlexer.g, aptBigIntegerExpr.g) > * cnd.asm (DisScanner.g, IdentScanner.g, ATTSCanner.g) > * cnd.modelimpl (Evaluator.g, CXXParser.g (empty), cppparser.g above, > missing) > > The "cnd.antlr" binary is also used to _run_ the compiled grammars above > (this is equivalent to antlr-runtime libraries) for the cnd.apt, > cnd.asm, cnd.modelimpl _and_ cnd.kit. > > As far as I know we _cannot_ include the binary of NetBeans 8.2 > "cnd.antlr" in Apache NetBeans, neither in the original version nor in > the Oracle's donatin "libs.antlr.cnd", because it's covered by > CDDL/GPLvCE. And here comes the second question: > > Q.2.: We may not include the _binary_ of NetBeans 8.2 "cnd.antlr" in > Apache NetBeans, right? So the current "cnd/libs.antlr.cnd" cannot be > shipped with Apache NetBeans either. > > 4) NEXT STEPS > > Some (I didn't test all) of these [GRAMMARS] don't compile with > antlr.Tool V2.7.2, V3.4 nor V3.5.2. You can try yourself running java > -cp [antlr.jar] antlr.Tool the-grammar-file.g > > This possibly implies that the module "cnd.antlr" has suffered many > variations while inside NetBeans during the years, has significantly > diverged from antlr, and the grammars that once compiled with antlr do > not compile without it right now. > > To clarify: some/all of [GRAMMARS] above can only be compiled with > "cnd.antlr". > > I think we have the following options right now: > > O.0 - Option 0: Keep libs.antlr.cnd > > If the answer of Q.2 above says we can ship with a compiled > "cnd.antlr"/"libs.antlr.cnd" then we can move forward with this "as is". > > O.1 - Option 1: Keep "cnd.antlr" as a compiler and create the runtime > > We could use "cnd.antlr" to _compile_ the grammar files at build time > (even if this is GPL+CPE). > > And then recreate the runtime portions of "cnd.antlr" that give support > to the running compiled grammars. By doing this we'll be able to ship > CND relatively soon (the time it takes to setup the compilation part and > to recreate the cnd.antlr runtime classes). > I didn't dig very deep, but is the cnd.antlr really needed at runtime? I know the project dependencies say yes, but when I was experimenting with this, I hoped it is only needed at compile time, and the normal antlr runtime is used at runtime (ide/libs.antlr3.runtime). We hopefully could simply use the cnd.antlr at compile-time for some time. > > O.2 - Option 2: Upgrade the grammars > > The second option could be to migrate the [GRAMMARS] to antlrv4. This > will possibly take more time, but will allow us to have more modern > grammars that are easier to maintain. Of course many modules (cnd.asm, > cnd.apt and cnd.kit, possibly others) will have to be recreated to > accept the change. > > O.3 - Option 3: Use clang/libclang/LSP > > The third option could be to delegate the lexing/parsing to third > parties that are more knowledgeable of C/C++/Objective C internals. > Which is more or less what cpplite is trying to do, via LSP using either ccls or clangd. I guess my worry is this: who will be fixing bugs and updating the grammars as C/C++ evolves? If there's someone willing to maintain the grammars and features, I am all for it, but it sounds like a lot of work. Using ccls (or clangd) seemed like something that can be made to work and maintain in a limited amount of time. The downside of using a third-party tool is that we would be limited to features supported by the third-party tool, and also it creates less than ideal out-of-the-box experience. Note we can use anything we see fit from the CND donation even if we go this route (after it goes through IP clearance). > It seems "libclang" is a stable API we could use. We could also improve > the current Cpplite (LSP) and improve it. > > Note that if we use LSP or libclang we should start thinking of a good > solution to build "compilation databases" (possibly from Makefiles too) > that all clang tools use to do proper parsing. > If we have more complex projects (the cpplite projects are very bare-bones, and basically only allow the user to say where the compilation database is), it should be easy to generate the compilation database. It is basically a list of command lines used to compile the sources. Jan > > And here come the next questions: > > Q.3.- Can you think of any other option to O.0...O.3 above? > > Q.4.- Which option above (O.0, O.1, O.2, O.3 ... O.N) do you think is > the best one? > > Thanks and apologies for this long email, > Antonio > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@netbeans.apache.org > For additional commands, e-mail: dev-h...@netbeans.apache.org > > For further information about the NetBeans mailing lists, visit: > https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists > > > >