World: r4wp
[!REBOL3] General discussion about REBOL 3
older newer | first last |
GrahamC 19-Jan-2013 [728] | Looks like we need more people with developer status |
Pekr 19-Jan-2013 [729] | Is there any prototype of FTP scheme for R3? IIRC Graham did something in the past? |
GrahamC 19-Jan-2013 [730x9] | Pekr, my schemes are still available on github. They are all async and need to be rewritten as sync. to get them to work you need to make the following changes: 1. In the header, change from module: 'name to type: 'module name: 'name make-scheme => sys/make-scheme There's also some odd about contexts inside modules. You need to declare your variables inside /local as you can get a context error if they are used but not so defined. |
That's pretty much all the change I had to make to the prot-smtp.r then s: open smtp://smtp.host.com read s will send the preconstructed email. | |
Going to change that to write smtp://smtp.host.com [ esmtp-user: esmtp-pass: from: name: to: subject: message: ] | |
once I figure out al these context issues | |
Robert, do you guys have other schemes written so we don't duplicate ? | |
rebol [ type: 'module name: 'test version: 0.0.1 notes: { to illustrate a a context issue. free variables defined inside a module are supposed to be "global" to the module only. See http://www.rebol.net/r3blogs/0048.html } ] do test: func [ ][ set 'new-word none ] | |
>> do %test-module.r Module: "Untitled" Version: 0.0.1 Date: none ** Script error: new-word word is not bound to a context ** Where: set function! do -apply- make catch either either -apply- do ** Near: set 'new-word none | |
this works though do test: func [ /local new-word ][ set 'new-word none ] | |
this also fails do test: funct [ ][ set 'new-word none ] | |
BrianH 19-Jan-2013 [739x3] | Thanks Graham, that seems to be the correct behavior. We should adapt those for the test suite. |
The design of the module system has changed since that blog. In order for free variables to be defined at the module level, they need to be set at the top level with set-words like an object. Also, FUNCT only collects set-words, so it's correct that in your last example it doesn't treat iot as a local. | |
An isolated module acts like the blog suggests though. | |
Andreas 19-Jan-2013 [742] | I think we'll really need coherent documentation for the intended status quo of the module system soon. |
GrahamC 19-Jan-2013 [743] | This is a trifle frustrating that the docs are not being updated |
BrianH 19-Jan-2013 [744x3] | Yes. Actually, there's a pull request that represents the current intended design of the module system ( https://github.com/rebol/r3/pull/40 ). And I'm working on a set of tests that should help document it as well. |
Docs not being updated? The user-level docs were never written. I still need to update the guru docs. It's worse that you thought. | |
that -> than | |
Andreas 19-Jan-2013 [747] | That pull request unfortunately only covers a teensy tiny bit. |
BrianH 19-Jan-2013 [748x2] | Nope, it just fixes the last non-working part. |
But without it you don't have the intended behavior. | |
Andreas 19-Jan-2013 [750x2] | For one aspect. |
The module system could be a deciding feature pro R3. But we really need to get started on docs for that to become true. | |
BrianH 19-Jan-2013 [752x4] | The module system was almost complete in implementation with the last closed-source release, needing only the fixes we (and I mean me and you, Andreas) did in the first week of the open source release. We have only been waiting for Carl to add that pull request to get the current design working as intended, though that request doesn't only apply to modules in particular, but to scripts in general. Once it is accepted, I need to do another round of optimization, but the external effects are set already. |
So we are at the stage of writing docs and tests. | |
The only reason the user-level docs aren't yet written is because I am really bad at writing user-level docs of any kind. I was hoping that I could write some guru-level docs and then let someone read them and write something user-level. | |
As for that blog, the behavior described there has some practical problems. There is nothing in the code itself (I mean the example code in the blog, not the implementation code) to indicate that 'last-stock is a free variable, but 'if and 'not are not - they are all words not declared at the top level of the module (by using them as set-words, like in an object) or elsewhere in the code. This means that if you want it to have 'last-stock be made local to a module, you would have to make 'if and 'not local as well. That works if lib words can only be set once, but not if they can be reset, since changes wouldn't propagate to the other modules or user scripts (since those values are copied to words in other contexts). We determined that the behavior described in that blog could be useful enough to be worth supporting, but had some nasty side effects that made it not be what we wanted to do by default. That is why we made it an option, in particular the isolate option. If you specify the isolate option, your module acts like it does in the blog, and this has the effect of isolating your module from all external changes to the lib context. | |
GrahamC 19-Jan-2013 [756] | what isolate option? |
BrianH 19-Jan-2013 [757x7] | rebol [type: module options: [isolate]] your script |
Carl decided that the best way to make extensible options was to put the flag-like ones in an options block. That makes them extensible without bloating your header. | |
Another of the already-implemented options is private. The isolate option affects importing, the private option affects exporting. | |
You can do both of course. | |
There is also a content option (it acts like content: true from R2), and a compress option (for scripts that are stored compressed, and automatically decompress on load). | |
The content and compress options don't require type: module - they work on regular scripts too. | |
Scripts can also be checked against checksums, and can be limited to a length, but those aren't flags so they need their own header words. | |
Scot 19-Jan-2013 [764] | Great to know who the caretakers of R3 source are. Thanks for your work all six of you. :) |
PeterWood 19-Jan-2013 [765] | The six people named are caretakers of the R3 bug reporting system. At the moment, Carl is the only code caretaker. |
Ladislav 19-Jan-2013 [766x2] | Close, but not exact, I would say. Other people take care of r3 code as well. |
A picture is worth a thousand words: https://github.com/rebol/r3/network | |
BrianH 19-Jan-2013 [768x2] | Btw, "Reviewed" has generally meant that someone has gone over the ticket and not immediately found a good reason to dismiss it, and that we haven't found a problem yet. It is not an indication that the ticket should be implemented - we frequently have competing contradictory tickets. So it sometimes means that more debate is needed before we can accept or reject it. On the other hand, it sometimes means that we haven't gotten around to it yet. Nonetheless, some reviewed tickets will eventually be rejected. Carl and I were the reviewers for the most part, except in the case of bugs that needed some domain-specific knowledge, like the math bugs we referred to Ladislav. |
In general, when there are competing proposals and we finally pick and implement one, we dismiss the competing ones, even if they were "reviewed" before. | |
GrahamC 19-Jan-2013 [770] | do we have a state, awaiting implementation? |
BrianH 19-Jan-2013 [771] | Basically, "reviewed" with a consensus. No specific marker. We need to have the people who are familiar with the arguments go through the tickets that aren't still under debate and implement them. |
GrahamC 19-Jan-2013 [772x2] | Just that I had a proposal which was accepted and marked as built and then you reviewed and found it wasn't built |
So, how many of those are hanging around? | |
BrianH 19-Jan-2013 [774x2] | We might want to rethink that now that Carl and I aren't the only ones implementing things :) |
I haven't had a chance to go over the remaining tickets yet. And there are some that weren't implemented yet because Carl didn't want to, but hadn't yet convinced the rest of us as to why. Those might be dismissed if we get a good argument against them, which we can do in some cases ourselves now that we can see the native source. | |
GrahamC 19-Jan-2013 [776] | so we need a state of confirmed built |
BrianH 19-Jan-2013 [777] | That was the "tested" state. |
older newer | first last |