[erlang-questions] Dialyzer type/spec info question

Peer Stritzinger peerst@REDACTED
Tue Nov 18 11:36:57 CET 2014


On 2014-11-17 17:26:01 +0000, Robert Virding said:

> The reason I would like to be able to handle multiple file types is to 
> simplify checking systems with parts which are written in different 
> languages.

+1

This would be useful to my IEC61499 PLC language compiler too, 
especially since I have some native (here meaning in Erlang) 
implemented behaviour callback modules which can then be checked if 
they implement a matching interface to the PLC interface part.

And since I'm also generating core like LFE opening up this interface 
to Dialyzer would help me greatly.

Especially so since I'm compiling a statically typed language anyway 
and could derive the typespecs of the underlying Erlang types from this 
information.

Cheers,
-- Peer

> 
> Robert
> 
> 
> On 17 November 2014 18:19, Robert Virding <rvirding@REDACTED> wrote:
> Something much naughtier and more basic.
> 
> - Make LFE local copies of the relevant dialyzer modules which have 
> been hacked to be able to handle LFE files as input (with a new --lfe 
> option)
> - Run dialyzer using -pa to push the local module directory first so as 
> to use these special modules instead of the standard ones
> 
> This will make it possible to use dialyzer on LFE files and other .erl 
> or .beam files as well. Maybe with a little more hacking fix have 
> multiple file types. Of course if dialyzer was to be opened up so that 
> it would use the filename extension to pick the right versions of the 
> functions Stavros mentioned then this would be much simpler. Wink, 
> wink, nudge nudge. :-)
> 
> This is my plan anyway.
> 
> Robert
> 
> P.S. Having LFE generate erlang AST has never been an option as it is 
> very close to core and it would take a lot of effort to go back to 
> erlang which would then be undone by the erlang compiler.
> 
> 
> On 17 November 2014 17:49, José Valim <jose.valim@REDACTED> wrote:
> Robert, what would a specialized version of dialyzer entail? A fork? A 
> specific front-end? Curious. :)
> 
> On Monday, November 17, 2014, Robert Virding <rvirding@REDACTED> wrote:
> Ah, so then in principle I can make my own specialised versions of the 
> dialyzer load modules which takes the core which the LFE compiler 
> generates and extracts the core and the type/spec data dialyzer needs. 
> This without any Erlang AST which LFE never generates anyway.
> 
> Now we are getting somewhere useful. With this we don't really need to 
> be able to store core in the .beam files if we can accept using source 
> files as input.
> 
> Robert
> 
> 
> On 17 November 2014 17:32, Stavros Aronis <aronisstav@REDACTED> wrote:
> For .erl files, dialyzer calls the compiler with 'to_pp', which stops 
> the compilation before code is converted to Core, and reads attributes 
> from there.
> 
> Judging from v3_core, line 170 the two representations should be compatible.
> 
> /Stavros
> 
> On Mon, Nov 17, 2014 at 5:11 PM, Robert Virding <rvirding@REDACTED> wrote:
> From where does it get it if I have .erl files as input? From the AST 
> as well? Do you know if there is any difference in the data itself 
> between the AST and core? I am guessing not but want to check. If there 
> is no difference then the info could be gotten from Core. This would 
> make it easier to use dialyzer together with LFE.
> 
> Robert
> 
> 
> On 17 November 2014 17:03, Stavros Aronis <aronisstav@REDACTED> wrote:
> Hi Robert,
> 
> Dialyzer gets this info from beam_lib:chunks(File, [abstract_code]) 
> which corresponds to the AST and is included in beam files if 
> +debug_info is used while compiling.
> 
> To my knowledge there is no reason to not let sources be combined 
> (except perhaps when building a PLT), but the implementation seems to 
> require uniformity.
> 
> Relevant functions: 
> dialyzer_utils:get_abstract_code_from_{src,beam}/{1,2}, 
> get_spec_info/3, get_record_and_type_info/1.
> 
> Regards,
> 
> Stavros
> 
> On Mon, Nov 17, 2014 at 4:53 PM, Robert Virding <rvirding@REDACTED> wrote:
> From where does dialyzer get the user added type and spec info? From 
> the AST, or from Core erlang which contains the same type/spec data? 
> And why? Can I control it?
> 
> An extra question: why doesn't dialyzer allow me to mix input from both 
> .erl and .beam files? Or does it and I have missed that?
> 
> Robert
> 
> 
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
> 
> 
> 
> 
> 
> 
> 
> -- 
> 
> 
> José Valim
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Lead Developer






More information about the erlang-questions mailing list