Preferences

QuackingTheQ
Joined 73 karma

  1. I'm not sure how far into Diaspora you made it, but the further you go the more mathematical or physics-based it gets. Computability/complexity theory show up later, there's a large portion of the book dedicated to an alternative physics model, etc
  2. I would also go to bat for Diaspora, single-handedly re-invigorated my interest in science fiction
  3. knowledge base is buzzwordy. it's a very elaborate (and good!) note taking app.
  4. A pet peeve of mine is that differentiable programming is co-opted almost entirely by deep learning + neural networks. The idea of differentiable programming is much bigger than SGD, and in fact neural networks are typically a simple program to differentiate. Full differentiable programming requires solving much more involved problems around control flow than just implementing numerical forward/reverse mode for math operations with well defined and understood gradients.
  5. Julia's AD is compatible with control flow. They have their own issues, but Zygote + ChainRules actually work pretty well
  6. It's possible to hack interface verification into place at test-time, but that has a couple of problems:

    1. Running the whole testing framework to determine if you implemented an interface is a high overhead when you're developing

    2. You have a lot of tests to write to really check every error. Perhaps a package which defines an interface could provide a tester for this purpose

    3. Interfaces should be attached to the types, and that should be sufficient for verifying the interface

    I would settle for something like checking for the implementation of methods a la BinaryTraits.jl over what we have now, which is nothing. A huge step would be documentation and automated testing that proper interface methods are implemented, not even verifying if they're "correct". This drastically reduces the surface area you need to write and check to confirm compatibility with outside code.

    This simple interface specification does produce design issues of its own, but correctness is much easier to handle if you know what needs to be correct in the first place.

  7. I've spent a lot of time developing large computational codebases in Julia, and I think the most insidious of these issues is a product of no formal way of enforcing interfaces. Using one of the common packages to build a trait system and add some sort of guarantee that all the right methods are implemented for a given trait simplifies maintenance dramatically.

    This doesn't catch mathematical bugs, but those crop up everywhere. Instead, knowing what the interfaces must be specified so you can trust your implementation is crucial, and being able to know when it is invalidated is invaluable.

    I've had a few awful bugs involving some of the larger projects in this language, but a proper interface/trait system would simplify things exponentially. There are some coding style things that need to be changed to address this, like using `eachindex` instead of `1:length(A)` for array iteration as the example in the article points out. However, these should be one-off lessons to learn, and a good code linter should be able to catch potential errors like this.

    Between a good code linter (or some static analysis, I'm pulling for JET.jl) and a formal interface spec, I really think most of Julia's development-side issues could be quelled.

This user hasn’t submitted anything.

Keyboard Shortcuts

Story Lists

j
Next story
k
Previous story
Shift+j
Last story
Shift+k
First story
o Enter
Go to story URL
c
Go to comments
u
Go to author

Navigation

Shift+t
Go to top stories
Shift+n
Go to new stories
Shift+b
Go to best stories
Shift+a
Go to Ask HN
Shift+s
Go to Show HN

Miscellaneous

?
Show this modal