Arc Forumnew | comments | leaders | submit | comatose_kid's commentslogin
1 point by comatose_kid 4198 days ago | link | parent | on: Things to know before learning Arc?

I'll second that. I learned most bits of Arc within a few weeks of evening use, and my background is mainly with C and Ruby.

-----

1 point by comatose_kid 4353 days ago | link | parent | on: Ray Tracer written in Arc

First off, thanks for the pointers! I'll certainly look into those when I have a chance.

I have no idea why the file was corrupted. I'll re-archive and update the file on the server.

You're right about the multiple intersections I indeed sort them by distance. But I forgot to return only the first two elements (needed for entering and exiting a shape for refraction). I'll fix that.

Ugh - I used t as a var? I should have known better than that. Must be remnants of my terse C coding style :)

-----

1 point by almkglor 4352 days ago | link

> But I forgot to return only the first two elements (needed for entering and exiting a shape for refraction).

Strange; I would have thought you needed only one intersection, because my mental model for refraction would be:

         |
    -----+-------
          \
           \ <-----new ray
    --------+----
            |
            |
          viewer
So you really need only one intersection - the nearest, because the second intersection wouldn't really be aligned to the refraction ray. But then I haven't read the book you are reading.

Basically at each intersection point I'd expect to split into three rays: a reflection ray (cross product to the normal), a refraction ray (if at least partially transparent) and a shadow ray (towards any source(s) of light).

-----

1 point by comatose_kid 4353 days ago | link

I've uploaded a new archive with a proper demo.lmr.

-----

1 point by comatose_kid 4353 days ago | link | parent | on: Ray Tracer written in Arc

Thanks for the pointer.

-----

1 point by comatose_kid 4354 days ago | link | parent | on: Ray Tracer written in Arc

That's a good idea. I don't have an account on github though. If anyone has an extra invite, please let me know.

-----

1 point by almkglor 4354 days ago | link

I do, although I'm in the office and will have to give you an invite later, unless someone else beats me to it.

Edit: which reminds me, you'll have to somehow show your email address to get an invite ^^

-----

1 point by comatose_kid 4354 days ago | link

Right - ajay@fonefu.com. Thanks.

-----

1 point by almkglor 4353 days ago | link

done ^^

-----

1 point by comatose_kid 4353 days ago | link

Thanks! I've added the code.

-----

1 point by almkglor 4353 days ago | link

Hmm, I can't see it on the git...

-----

1 point by comatose_kid 4353 days ago | link

Okay, it is there now.

-----

1 point by comatose_kid 4354 days ago | link | parent | on: Ray Tracer written in Arc

Thanks sacado. The great community here was a real help when I was stuck.

-----

4 points by comatose_kid 4355 days ago | link | parent | on: Ray Tracer written in Arc

Hi everyone, I've written a ray tracer in Arc with two goals in mind: Begin learning a lisp-like language, and implement a ray tracer (duh).

I'm sure the code could be nicer - I welcome suggestions from all of the experienced Lispers that frequent this site.

-----

4 points by cchooper 4354 days ago | link

I'd be interested in knowing what you found simple/difficult in working with Arc. There's precious few applications written so far, so it would be nice to know where you found the language lacking.

-----

3 points by comatose_kid 4353 days ago | link

Good question. Here are a few things that tripped me up:

1) An easy way to call differing functions based on the data type of an argument (polymorphism). Ruby has a nice approach as shown here (see the section marked 'Duck Typing'): http://www.ibm.com/developerworks/java/library/j-ruby/

2) I spent a while chasing a bug in an 'if' statement because I neglected to surround multiple statements with a 'do' statement.

3) It wasn't obvious to me how to build a bitmap array. I naively created an array filled with zeros for each scanline. I would then push this scanline onto another var. But it turned out all of the scanlines pushed this way were pointing to the same scanline. This was a problem until I found out how to copy a var in Arc (use copy!).

4) It's not clear to me how you modularize code, so everything is in one file.

5) Coding style. I have none when it comes to Arc, and there are few examples. For example, I didn't realize that an Arc convention is to append an asterisk to global variables (This follows the Lisp convention I think).

6) Spent time figuring out how to make my vector operations take list arguments without quotes (This was my initiation into the world of macros). Then realized that this was not necessary since these functions would have variables passed in arguments, not literal lists.

7) Errors were not specific (understatement).

8) No raw file output, or low level bit operators. So I added these to the base language.

-----

4 points by almkglor 4353 days ago | link

1) Hmm. Currently I've been experimenting around with Arc's type system. The type system is "not bad" but there's a definite problem: making a user-defined type quack like a built-in type is very difficult. My "Create your own collection" series is probably of interest in this research.

If however you are using only user types (not masquerading existing types), then nex3's defm macro is your friend: http://arclanguage.com/item?id=4644

2) LOL. However, if you need just the "then" branch, or just the "else" branch, you can use the 'when and 'unless macros:

  (from "arc.arc")
  [mac] (when test . body)
   When `test' is true, do `body'.
      See also [[unless]] [[if]] [[awhen]] 
  nil
  arc> (help unless)
  (from "arc.arc")
  [mac] (unless test . body)
   When `test' is not true, do `body'.
      See also [[when]] [[if]] [[no]] 
  nil
4) Definite problem. In fact, pg's own code doesn't seem very modularized: bits and pieces of the various parts of the webserver are in srv.arc, html.arc, and app.arc. Fortunately Arkani's 'help command also includes which file the function is defined in, so at least you can track files a little (although in practice I often find myself looking for definitions using grep).

5) Arkani has a "CONVENTIONS" file for some conventions. However it's incomplete IMO, so probably we need to fill this in somewhat.

7) True, true. Sure, Arc code is fun to write, until it encounters a problem. Then it's hard to debug/optimize/whatever

-----

2 points by comatose_kid 4362 days ago | link | parent | on: much much better arc logo

        ...  
   ..  .    ...
  .  . .   .
  .  .      ...

-----


Thanks Kenny and Sacado. I'll try to digest your code/ideas later this evening.

-----

3 points by comatose_kid 4408 days ago | link | parent | on: Arc mode for emacs?

Thanks. Incidentally, your .emacs advice didn't work for me (I'm on emacs 23.0.50.2 if that matters), but this did:

(autoload 'arc-mode "arc" "Arc mode." t)

(add-to-list 'auto-mode-alist '("\\.arc$" . arc-mode))

-----

2 points by olifante 4407 days ago | link

The "add-to-list" line for some reason is not enough to automatically activate the arc-mode for *.arc files, although I can activate it manually by doing M-x arc-mode.

By adding a variation of your snippet to my .emacs, I got arc-mode to activate automatically:

(add-to-list 'load-path "~/arc0") (autoload 'arc-mode "arc" "Arc mode." t) (setq auto-mode-alist (append '(("\\.arc$" . arc-mode)) auto-mode-alist))

-----

14 points by comatose_kid 4408 days ago | link | parent | on: I hereby propose...

And I hereby propose that all the Arc haters be called Narcs.

-----

5 points by Xichekolas 4408 days ago | link

Well if Arc Hackers are called Arcists, shouldn't Arc Haters be called Anarchists?

-----

3 points by spanky575 4408 days ago | link

Or narcissist

-----

More