Giter Site home page Giter Site logo

pothos-library's People

Contributors

guruofquality avatar xloem avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pothos-library's Issues

Proxy Objects could use a set/getattr for dealing with fields.

This is an enhancement to make the proxy abstraction more complete to support languages that have class fields. C++, python, and java have both static and non-static fields, so this should be valuable.

Places this could help:

  • Currently there is code that calls the python built-in getattr to handle field access
  • Some python Block class wrappers convert a field-based api to managed function calls -- but in this case the original C++ class used fields.

managed class register baseclass calls

Currently, the managed class registrations dont allow base class members to be registered because the function arg0 type is not a match (its the base class and not the derived class).

Consider the following:

  • specify the baseclass in the registration and automatically suck-in base class methods
  • specify that the method is on the baseclass, and let the registration template foo handle it
  • make the template registration foo always provide a cast or conversion or wrapper (this will nicely not compile if the cast isnt possible)
  • others?

remote topology support

Just like blocks, topology should support connecting remote topologies (used in hierarchies of sub topologies).

server spawning + connection is slow

Something unknown is making spawning a process, running a server, and connecting to it take a noticeable amount of time, on the order of 100s of ms.

topology connect functional markup

Consider supporting a markup for the connect arguments:
topology->connect(src, "src port name", dst, "dst port name")

The string arguments represent port names, but they could represent ranges or grouping of ports to be more useful.

  • a range of ports 0 to max
  • all signals, all slots
  • a list of port names
  • others?

Further, consider hierarchies of topologies. A connection markup that simplifies the burden of connecting all available ports could give us the following automatic behaviours: A block internal to the hierarchy gets a new signal or slot, or perhaps as variable number of IO ports... this would be automatically connected to the boundaries of the container topology without any additional code intervention, just a one time markup.

module loader safe load should cache result

This would speed up module loading as there is no need to retry the safe load if we have a previous confirmation.

  • probably store the result in a config file
  • use the module path as a key, and the timestamps on the library and module as a check

earlier automatic port creation

In order to support domain resolution and automatic ports, consider a different way to automatically create indexed ports. As of now, the domain checking would access an automatic port that does not exist.

Also, this enhancement would suffer in a similar way: #41

create block yield call

Yield tells the scheduler that we (a block) are yielding the thread context, but we are not done processing and expect to be called again.

  • Use this in blocks that for example, did not produce/consume within the time limit

proxy ambiguous overload

    static std::string superStringFcn(const std::string &s)
    {
        return s;
    }

     superFooProxy.call<std::string>("superStringFcn", std::string("test"));

Its ambiguous with the call that has a return type vs the one with a void return

error: call of overloaded ‘call(const char [15], std::string)’ is ambiguous

block notification overload for port change

When the ports are changed at runtime, the author of a block with variable ports will overload this call to to make sure they are using viable port pointers. This will also be the callback that we recommend users use to cache/store port pointers.

question the efficacy of RemoteNode

Is there any value of RemoteNode class and static node table outside of the gui? If not, probably just move the functionality into the gui.

signals and slots for blocks in a topology

Signals and slots will allow for complex control interactions between blocks, built on top on a simple subscriber mechanism.

  • Blocks already have a "slots" registry, that is simply the call registry.
  • Blocks need to register "signals" that can be emitted
  • Topology needs a connect for signals to slots
    • this must work across nodes, so topology will infer sockets
  • Signaler WorkerActor needs a subscription list of actor addresses and slot names

late creation of the block's actor

blocks should be more lightweight, we dont need the actor to be active during constructor stuff or initialization/configuration calls from the user. The actor can be allocated in the appropriate thread pool before activate() is called.

  • One motivation for this is that blocks are allocated simply to inspect their ports and data types in the GUI.
  • Another is based around theron frameworks, where once an actor is made it cant be migrated to a different thread pool. So make the actor late, after thread pool affinities are determined.

pothos server stdio nonbuffered mode

The server can backup and die if the caller process isnt reading stdout/stderr.

  • One solution is to set unbuffered mode in the server
  • Other solution, remote/server.cpp needs to read

api calls to post stuff to block's input

post buffers, labels, messages to the input of a block in a threadsafe way from outside the topology. We should be able to post to the actor easily, just a question of usefulness.

post work bump() logic

When a work session completes, we need to choose when to bump the work handler again:

  • always bump for source blocks
  • bump after consumption/production
  • bump after outputport popbuffer
  • bump after inputport setreserve

a more complete CPU info query

sigar win32 cpu info broken - use GetLogicalProcessorInformationEx

We need to drop sigar all together and make an abstraction for a general system processor (multicore/numa) query. Sigar is overkill for what we need, and its too buggy.

challenge: pass a remote proxy as an agument to a proxy function expecting a proxy

That's a mouthful, but this kind of meta-shit it nice when it works.

So suppose we have a remote proxy pRemote, and a local proxy pLocal. pLocal has a method that accepts a proxy object void foo(const Pothos::Proxy &); We want to pass pRemote into PLocal without screwing anything up. Currently, this does not work, some kind of conversion may be trying to take place. Investigate...

  • Also consider when pLocal isn’t local, we we establish a new proxy handle in an arbitrary environment for this same object?

Object intermediate conversions

Object intermediate conversions. To help with the NxM problem for integers and containers of integers:

  • create a registry that can recommend an intermediate type. TypeA -> I -> TypeB
  • --OR-- allow intermediate conversions when a limited number of steps make that final conversion possible

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.