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

Reply via email to