On Wed, May 22, 2019 at 9:57 AM Yanghao Hua <yanghao...@gmail.com> wrote:

> > > And this is something I have in mind for a Python DSL for HDL:
>

Perhaps you might be able to do what you want using an import hook. I have
done some experiments with introducing some new operators that way:
https://github.com/aroberge/experimental/blob/master/experimental/transformers/readme.md




> > >
> > > def combinational_or_sequential_logic(in: Signal, out: Signal):
> > >      local_signal = Signal()
> > >      local_signal <- in << 10 # read as: local_signal <- (in << 10)
> > >      out <- local_signal + 5 # read as out <- (local_signal + 5)
> > >      # new_signal <- 3 will raise exception, as <- does not create new
> object.
> > >
> > > And the arrow operators could also be used for bulk connections of a
> > > chain of hardware modules like this:
> > > module_instance1 -> instance2 -> instance3->... to naturally form a
> > > hardware pipeline ... this looks very elegant.
> >
> >
> > I think the largest problem with this idea has to do with where the new
> > operator would be defined, and then where would it be used.  At first
> > blush, it seems like you'd want to define the operator in one file
> > (let's call it hdl.py), then import that into another file (circuit.py),
> > which could use the new operator.
> >
> > But Python compiles circuit.py without reading hdl.py at all. It merely
> > compiles "import hdl" to some bytecode to import hdl.py. So how would
> > the operator's definition be used during the compilation of circuit.py?
> > The compiler has no idea that new operators have been defined.
>
> The scala implementation purely relies on the object to provide the
> operator definition, e.g. "a b c" would be interpreted as "a.b(c)".
> With the current implementation of the arrow operators I have, "<-"
> and "->" are part of of the basic python operators pretty much like
> "+" and "-". Where it relies on the object to provide the special
> method "__arrow__". so, this operation could be defined in a separate
> file with a base class e.g. Signal or Module, where other python
> module has to import it to use it or inherit it.
>
> In this case, essentially when python compiler reads circuit.py, it
> reads hdl.py too as it is imported in circuit.py. This is exactly how
> __matmult__ special method works too in PEP465.
> _______________________________________________
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to