643 karma · joined March 14, 2012
Thanks for sharing this though, I was previously under the impression Soylent was created by someone relatively sane.
In summary,
Advantages:
A. Objects are collected immediately when they become garbage.
B. Programming language runtime support is simpler.
C. Memory can be reclaimed easily in programs with distributed heaps.
Disadvantages:
A. Natural race conditions exist in multi-threaded programs when reference counting is used. Atomic read/writes are necessary when incrementing/decrementing the reference count for an object.
B. Cyclic data structures cannot be reclaimed. (This is why you have to jump through hoops to avoid this in Objective-C and Swift.)
C. Every object in your language which is reference counted needs a field to hold the reference count. Or you need a special object in its stead which "points" to your object, like a shared pointer.
D. Pauses with reference counting are still possible. As stated in the book, "When the last reference to the head of a large pointer structure is deleted, reference counting must recursively delete the descendant of the root."
What I thought your original point was is that 3D rendering ONLY cares about photorealism. Physically based renderers have been greatly influenced by photography (both still and film). Think light probes, camera lenses, etc. Much of the post-processing you see in a scene is also derived by what a camera would see, from focusing, to blur, to HDR now, and of course the infamous lens flare!
So I think a physically based renderer which uses the human eye as its camera would be interesting to see more of.
Last year was special though. I really can't describe how impactful The Witcher 3 was for me. It really opened my eyes to just how great of an art form video games can be.
I don't regret a single moment I played that game and its expansions.
I recommend (surprise surprise) programming. Implement fast fourier transform in C and then Common Lisp. Write a finite difference PDE solver. Try solving actual problems to motivate you. Signals analysis can be a fun way to exercise your knowledge. Try analyzing your favorite songs and figuring out what makes them sound the way they do. Maybe implement some audio filters. If that's not your cup of tea, write physics or chemistry simulations instead. Then use OpenGL to visualize them. Then make them interactive.
I can go on and on, but I'll just leave two book recommendations for those who might enjoy programming advanced mathematics.
Structure and Interpretation of Classical Mechanics : https://mitpress.mit.edu/classical_mech
Functional Differential Geometry : https://mitpress.mit.edu/books/functional-differential-geome...