On Aug 19, 2020, at 12:25 PM, Jack Atherton <l...@ccrma.stanford.edu> wrote:
> 
> The most straightforward version of an import statement would just add the 
> public class in that file to the VM if it hasn't been added already. Do you 
> think an import statement should also add the ability to splice in functions 
> and other classes too?

In LiCK many public classes depend on non-public classes local to the file.  A 
quick count shows 437 public classes of approximately 939 total classes:

$ chuck import.ck
...
[chuck](VM): sporking incoming shred: 437 (RubberBand.ck)...
LiCK imported at path ~/working/lick/

$ find lick -name "*.ck" | xargs grep class | wc -l
    939

Imports should also be recursive, e.g. the public class in the imported file 
may import other classes.

Finally, as described in the linked issue below, having namespaces via a 
namespace or package statement would also be quite useful.

Cheers,

   michael


> 
> I get an email when new pull requests are made, but I don't get the chance to 
> look through them very often.
> 
> ~Jack
> 
> On Sat, Aug 15, 2020 at 9:31 PM Curtis Ullerich <curtuller...@gmail.com 
> <mailto:curtuller...@gmail.com>> wrote:
> Makes sense; thank you for the details. A more restricted sense of importing 
> than normal sporking might be good, like only allowing importing of class and 
> method definitions. Pre-constructor class code makes that a little messier.
> 
> By the way, does anyone get notified when new pull requests are made on the 
> ChucK repo, or should I be tagging someone?
> 
> On Fri, Aug 14, 2020 at 9:01 AM Jack Atherton <l...@ccrma.stanford.edu 
> <mailto:l...@ccrma.stanford.edu>> wrote:
> I think this is an artifact of the type checker. It will run on a single file 
> before any of the lines in the file are run. So, if you're trying to use a 
> class that's only being imported with a Machine.add declaration, that 
> declaration is not going to run before the type checker gets to the line 
> where you use it. But, if a file has two Machine.add declarations, then the 
> type isn't used in that file, so the type checker doesn't complain, then at 
> runtime the first .add is run, followed by the second.
> 
> I guess a Machine.import would need to compile and run the file during 
> compile time, which might be non-trivial because I'm not sure that the 
> compiler can be gracefully interrupted. Maybe the "import" keyword is the way 
> to go. This might be straightforward to do by adding a few rules to the 
> grammar and making import be a reserved word, and allow a number of import 
> statements (only?) at the top of of a program.
> 
> I have definitely faced the same issue when I was working on utility classes.
> 
> ~Jack
> 
> On Sat, Aug 8, 2020 at 11:46 AM Curtis Ullerich <curtuller...@gmail.com 
> <mailto:curtuller...@gmail.com>> wrote:
> Thanks for confirming. I subscribed to the issue in case it gains traction.
> 
> I found it curious that Machine.add used in the header of control.ck 
> <http://control.ck/> doesn't work, but it works if the libs and control.ck 
> <http://control.ck/> are Machine.added in the same file. Why is that?
> 
> 
> On Sat, Aug 8, 2020, 11:35 Michael Heuer <heue...@gmail.com 
> <mailto:heue...@gmail.com>> wrote:
> Hello Curtis,
> 
> In LiCK there is one big import.ck <http://import.ck/> file (your second 
> method)
> 
> https://github.com/heuermh/lick/blob/master/import.ck 
> <https://github.com/heuermh/lick/blob/master/import.ck>
> 
> I typically use it with two terminal windows, in one
> 
> $ chuck --loop
> 
> and in the other
> 
> $ chuck + import.ck <http://import.ck/>
> $ chuck + other-stuff.ck <http://other-stuff.ck/>
> 
> See also
> 
> Add namespaces and import statements
> https://github.com/ccrma/chuck/issues/109 
> <https://github.com/ccrma/chuck/issues/109>
> 
> Cheers,
> 
>    michael
> 
> 
>> On Aug 8, 2020, at 12:56 PM, Curtis Ullerich <curtuller...@gmail.com 
>> <mailto:curtuller...@gmail.com>> wrote:
>> 
>> What's the state of the art for imports/includes?
>> 
>> If I have files lib0.ck <http://lib0.ck/> and lib1.ck <http://lib1.ck/> that 
>> declare public classes both used in control.ck <http://control.ck/>, I 
>> understand these to be the two options for running them:
>> 
>> chuck lib0.ck <http://lib0.ck/> lib1.ck <http://lib1.ck/> control.ck 
>> <http://control.ck/>
>> 
>> or, make another file control-main.ck <http://control-main.ck/>:
>> Machine.add("lib0.ck <http://lib0.ck/>");
>> Machine.add("lib1.ck <http://lib1.ck/>");
>> Machine.add("control.ck <http://control.ck/>");
>> 
>> and run it as:
>> chuck control-main.ck <http://control-main.ck/>
>> 
>> I thought it would work to use Machine.add("lib0.ck <http://lib0.ck/>"); 
>> Machine.add("lib1.ck <http://lib1.ck/>"); as the first line of control.ck 
>> <http://control.ck/> and then just run chuck control.ck 
>> <http://control.ck/>, but the included classes are not found. 
>> 
>> Are these the two options, or is there another way that can support 
>> transitive inclusion (not having to list each util file for every program 
>> that uses them)?
>> 
>> Thanks,
>> Curtis
>> _______________________________________________
>> chuck-users mailing list
>> chuck-users@lists.cs.princeton.edu 
>> <mailto:chuck-users@lists.cs.princeton.edu>
>> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users 
>> <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
> 
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu <mailto:chuck-users@lists.cs.princeton.edu>
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users 
> <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu <mailto:chuck-users@lists.cs.princeton.edu>
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users 
> <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu <mailto:chuck-users@lists.cs.princeton.edu>
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users 
> <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu <mailto:chuck-users@lists.cs.princeton.edu>
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users 
> <https://lists.cs.princeton.edu/mailman/listinfo/chuck-users>
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users

_______________________________________________
chuck-users mailing list
chuck-users@lists.cs.princeton.edu
https://lists.cs.princeton.edu/mailman/listinfo/chuck-users

Reply via email to