Friday, November 30, 2018

What does it take to understand the true power of [Common] Lisp?

Originally posted as a comment on reddit: link

In order to understand the true power of Common Lisp, you must understand its greatest weakness.
Common Lisp is unrestrained power. What does this mean? Any one can make a huge mess since there are macros, eval, CLOS, etc. People coming from overly restricted languages like C++ can and will use every "powerful" feature they find to walk code, change semantics of the language, repackage built-in symbols, and do all other sorts of impossible nonsense. Why does this happen? Because when you are weak, like a C++ developer, you never learn restraint. Because of this, Common Lisp suffers from a management problem. If all your developers are using a weak language, there is only so much damage one developer can do. Here is a similar idea by Fare who pointed out that CL is a "hippie language". He has experience managing CL projects with ASDF. There was another blog post by another author about how CL is too powerful but I can't seem to find it.

If all developers could exercise restraint then perhaps Common Lisp could flourish. But this is like saying if everyone in the world was good there would be world peace. That will never, ever happen, except if your world if small enough or everyone is homogeneous. This is why Common Lisp projects start small and stay small. It's like communism, you need everyone to follow the rules. Thus the link between communism, open source, and common lisp.

However, there might be hope for a solution in a lisp that incrementally adds power [at one point the X3J13 committee was debating whether common lisp should be separated into different parts like a "core"] and/or permissions/capabilities like scheme48. I think it was Paul Graham who said that as time passes, weak languages like C++ absorb features from common lisp. Or see Greenspun's tenth rule. In common lisp, everybody gets absolute power no matter what, their is no social hierarchy, thus no government, it's anarchy. That's why fundamentally weak languages with things tacked to mimic Common Lisp on succeed economically but Common Lisp does not. Self plug: I'm trying to figure out how a lisp bytecode interpreter could have capabilities, not extensively, but similar to the JVM.

TLDR: To understand the true power of Common Lisp, you MUST exercise restraint, otherwise you will make a complete mess of things while you are inexperienced.

Sunday, November 18, 2018

Minecraft Obsessed Lisp Weenie Rants About Something No One Cares About

The Most Moddable Voxel Engine That Has Ever Existed


  • Edit the source code on the fly, making it very easy to write mods
  • Livecode the graphics, play around with shaders, textures, display lists
  • Create ad-hoc functions for manipulating terrain and creating structures,
  • Read and write Minecraft McRegion and Anvil world formats [see cl-nbt]
  • 3d block physics
  • Quite fast, depending on the Common Lisp implementation

Personal Use Case Testimonial Rant Wall Of Text:

Personal Workflow:
  1. Generate a world based on perlin noise or some random function
  2. Fly around touching up the world with different "brushes" to use on the world. Create brushes at the REPL or in a source file and C-C C-C it.
    • Examples:
      • Convert stone to dirt and grass
      • Grow trees and cacti 
      • Flood fills pools with water. 
      • Round edges or fill holes
      • Draw lines and spheres
      • Draw boxes
  3. Use the resulting terrain as the ultimate parkour experience
  4. Repeat 2-3
  5. Be a creative and interesting and artistic mineman pvp parkour legend 

Please comment if you:

  • are aware of a voxel engine that is superior in modding capabilities
  • share that burning passion for Minecraft
  • have a suggestion on how to get a real, non Minecraft life
  • do not know what Minecraft is
It would be great if everyone could pool together their Common Lisp game engines. That way I'd have a better Minecraft clone.