<br><br>On Friday, December 18, 2020, Jacob Lifshay <<a href="mailto:programmerjake@gmail.com">programmerjake@gmail.com</a>> wrote:<br>> The article compares/contrasts the http libraries from NodeJS,<br><br>yyeah that's about as helpful as comparing a plastic kid's bow and arrow to a Sherman Tank and saying, "but look, they're both weapons, no really!"<br><br>however even there, the analogy is broken and flawed: making comparisons of strongly typed languages against polymorphic ones then effectively saying "strong typed languages are automatically better" entirely and completely misses the benefits of both.<br><br>polymorphic languages have the huge advantage of being able to satisfy the Liskov Substitution Principle *without* the need for the base class, older (prior-written) or newer code to even know that the new variant satisfying the LSP is even being used.<br><br>where for strong declarative languages, due to the strict typing it is simply impossible to deploy LSP.... *unless the programmer has planned for that in advance* at the base level of the API.<br><br>the disadvantage of LSP in polymorphic languages is that unless there exists huge amounts of unit tests, even a simple change at the base level (older code) can have massive damaging undetectable consequences [to which a legitimate response is: what the bloody hell are you doing writing library API code that doesn't have unit tests]<br><br>the advantage of strong declarative languages is that type checking detects errors very easily with the compiler.<br><br>the *dis* advantage of strongly typed languages is also is advantage.  the complaints about Bluespec BSV were endless.  the inconvenience of the compiler refusing to let the developer do even the simplest and most basic of operations severely hampered them and led to significantly increased development time, most of which was reading and re-reading the PDF containing the APIs, again and again and again.<br><br>the disadvantage of polymorphic APIs is, agsin, its advantage: the fact that no errors are given until the function is executed means that code can be written extremely quickly, but if the *programmer* does not catch an error (and does not test it) they get no warnings.<br><br>in short, both approaches have advantages and disadvantages, and saying categorically "one is better than the other" does both a huge disservice.<br><br>l.<br><br><br><br><br><br><br>-- <br>---<br>crowd-funded eco-conscious hardware: <a href="https://www.crowdsupply.com/eoma68" target="_blank">https://www.crowdsupply.com/eoma68</a><br><br>