Arc Forumnew | comments | leaders | submit | Oscar-Belletti's commentslogin

Actually I was wrong in saying that in the installation folder it worked. In the installation folder it succeeded in loading the "news.arc" file, and failed at runtime. While in the other folder that failed, because in that folder I already tried with anarki and created some news/bans and this is why it failed to load: the diskvar didn't work. However the problem wasn't in diskvar: it was in "file-exists" which should return the name of the file in case of true: because of this when I just modified "diskvar" it still gave me the contract violation error, I think because the arc code relies on the fact that file-exists returns true. I changed in "lang/arc/3.1/main" the line "(def file-exists (x) (tnil (file-exists? x)))" in "(def file-exists (x) (if (file-exists? x) x nil))". Now I successfully run the news!

-----

2 points by akkartik 3292 days ago | link

Awesome! If you submit a pull request on github we'll give you (more) credit for fixing this.

I see some more tnil in lang/arc/3.1/main. It would also be good to check if any other functions are incompatible with Arc 3.1.

-----


I think I found the problem. Diskvar is broken:

  (mac fromdisk (var file init load save)
    (w/uniq (gf gv)
      `(unless (bound ',var)
         (do1 (= ,var (iflet ,gf (file-exists ,file)
                                 (,load ,gf)
                                 ,init))
              (= (savers* ',var) (fn (,gv) (,save ,gv ,file)))))))
Notice the "(iflet ,gf (file-exists ,file)". It expexts file-exists to return the name of the file if it exists. file-exists doesn't, it returns t if files exists, so here is the cause of "error: open-input-file: contract violation expected: path-string? given: 't ".

-----

4 points by Pauan 3291 days ago | link

Hey, I'm the author of Arc/Nu.

Thanks for letting me know about this.

In my opinion, returning t/nil makes more sense than returning the file path, but Arc/Nu is supposed to be backwards compatible with Arc 3.1, so I fixed this. I also fixed "dir-exists", which has the same issue.

I just pushed out the fix to the Arc/Nu GitHub repository, please try it out and let me know if it solves the problem for you.

-----

4 points by Oscar-Belletti 3289 days ago | link

I've just tried running the news site with the new version of Arc/Nu and it runs fine.

-----

3 points by Pauan 3289 days ago | link

Thanks for letting me know, I'm glad it's working now.

-----

2 points by akkartik 3294 days ago | link

You're right. It looks like file-exists has changed its behavior in Arc-Nu to return a boolean even though its being loaded from lang/arc/3.1/main, which might lead one to think it's trying to be compatible with Arc 3.1 [1]. Let me try to reach out to the original author.

[1] Arc has always returned the name on success, as far back as the Arc 0 release.

-----

1 point by akkartik 3294 days ago | link

What platform are you on? I'm reminded of this other bug with diskvar on Windows (since fixed on Anarki): http://arclanguage.org/item?id=19310

I haven't tried Arc/Nu, but Arc 3.1 and Anarki both return a string path name on success.

-----

3 points by Oscar-Belletti 3294 days ago | link

I am using racket v5.3.6 on Xubuntu.

-----