At the moment, Felix checks if a cached binary is up to date by comparing the time stamp with the sources. It also validates the cache by checking if the compiler or grammar has changed.
What it *doesn't* do is check if the libraries listed on the flxg command line are valid, in particular, you can change the standard library "std" or "web" and stuff doesn't get rebuilt, in fact flxg might not even be invoked. If you touch the program source, however, that forces flxg to be invoked, but it still won't rebuild the standard library cache. Strangely enough if you delete one of the dependent *.par files, that forces a rebuild :) I am going to fix this shortly. I'm working through the dependency checking because changes to various stuff I'm working on can be compiled by using the flx_build_rtl tool, but the problem at the moment is that it rebuilds everything every time. This can take up to 4 hours on my box for a one line change. So I need to make it work properly. The problem was that the build tool is making objects and there was no proper dependency checking in flx for that. Instead, flxg does the checking which eliminates useless parsing, but it still generates C++ code even if nothing has changed, and then flx has to C++ compile it because it doesn't know if the C++ changed or not. So I'm going to fix it, so it is sensitive to changes in the library code, and forces rebuilding of the caches. In the process of doing all this, I have found a solution to a long standing gotcha. When you specify libraries to flxg or flx, you give a list like: std, web and Felix builds a precompiled cached library std.libtab, web.libtab However web.libtab here also contains std: symbol tables are incremental, they cannot be combined, only grown linearly. This means the last name in the list is the actual symbol table for the whole list, which means you have to manually ensure all programs use library lists that universally form a tree: an acyclic graph isn't good enough, let alone an arbitrary one. This reliance on the programmer getting the right order of switches on every compile is unprincipled. Instead I am going to remove the capability of specifying multiple libraries. There is no loss. Suppose you want A and B, then you just make C and include A and B. The only trick is that everything implicitly requires std, unless you say --nostdlib. In that case all hell might break loose again, however I don't think this is particularly serious. The default to std is essential otherwise every file would have to say include "std"; which is one of the things that makes C and C++ extremely ugly. -- john skaller skal...@users.sourceforge.net http://felix-lang.org ------------------------------------------------------------------------------ Android is increasing in popularity, but the open development platform that developers love is also attractive to malware creators. Download this white paper to learn more about secure code signing practices that can help keep Android apps secure. http://pubads.g.doubleclick.net/gampad/clk?id=65839951&iu=/4140/ostg.clktrk _______________________________________________ Felix-language mailing list Felix-language@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/felix-language