Really interested in the future of distributed Pony, still not sure how failure modes of actors/nodes will be addressed in a distributed setting.
On another note and perhaps of slight interest … currently doing a side by side comparison of a Go program and Pony program.
The task:
Scan a directory for new entries every 10 seconds, if a new folder exists and $folder/READY exists, start executing a program script $folder/step once a second, or as fast as the script allows above that. Never execute more than 100 scripts concurrently if there are > 100 folders, and cleanly shutdown, terminating child processes on an interrupt signal.
Summary So far:
Go is less code, quick to write, and easy to follow, but I am also more skilled at go. There is room for mistakes in the locking of my active process map, but the code is small and simple so can be reviewed quite easily. It didn’t take me long to code at all.
Pony feels more principled. No need for semaphores or locks to keep track of active process counts, garbage collection of actors also makes clean shutdown much easier. Once code is written, you have strong confidence in it because of the data-race free type system. The capability API for files was hard to use, but you feel like you are doing some solid and secure engineering when you are done. Pony try/else blocks suck for reporting what went wrong, but it isn’t too bad of an issue for such a small task. It feels like the Pony developers have good engineering taste.
Really interested in the future of distributed Pony, still not sure how failure modes of actors/nodes will be addressed in a distributed setting.
On another note and perhaps of slight interest … currently doing a side by side comparison of a Go program and Pony program.
The task:
Scan a directory for new entries every 10 seconds, if a new folder exists and $folder/READY exists, start executing a program script $folder/step once a second, or as fast as the script allows above that. Never execute more than 100 scripts concurrently if there are > 100 folders, and cleanly shutdown, terminating child processes on an interrupt signal.
Summary So far:
Go is less code, quick to write, and easy to follow, but I am also more skilled at go. There is room for mistakes in the locking of my active process map, but the code is small and simple so can be reviewed quite easily. It didn’t take me long to code at all.
Pony feels more principled. No need for semaphores or locks to keep track of active process counts, garbage collection of actors also makes clean shutdown much easier. Once code is written, you have strong confidence in it because of the data-race free type system. The capability API for files was hard to use, but you feel like you are doing some solid and secure engineering when you are done. Pony try/else blocks suck for reporting what went wrong, but it isn’t too bad of an issue for such a small task. It feels like the Pony developers have good engineering taste.