6 ms·
> Maybe now I'll be able to actually figure out what data to send libraries without actually reading their source code. One could hope, but any library abusing
by appplication 3y ago
> Maybe now I'll be able to actually figure out what data to send libraries without actually reading their source code.
One could hope, but any library abusing kwargs in all their methods is showing they’re willing to go through the absolute minimum to make their code usable, let alone readable and self-documenting.
- Earwig 3y agoThis is excellent for adding typing to libraries originally designed without it in mind while keeping backwards compatibility.
- rollcat 3y agoIt feels like we're going in cycles. C was somewhat lax with type checking, thus C++ and Java were both made more strict. Looking to escape the tyranny of static typing, the rise of Python, Ruby, or JavaScript instead left us with a desire that Rust, Go, and TypeScript now fulfill. I wonder what's the next step? LLMs are extremely broad in what they accept, but don't exactly fill the same niches.
- tomrod 3y agoI'm holding out hope for a Fortran resurgence. It's a tiny hope. But a hope nonetheless. Fortran is fun.
- haneefmubarak 3y agoI'm curious - what do you particularly like about Fortran that isn't otherwise broadly available? Is it a matter of cultural idioms, a unique composition of features, or something else entirely?
- f1shy 3y agoNot OP, but I know a good use case: where I work we do lots of math and signal processing. It is done in matlab, which is great, but then we need to run it in some embedded processor. Using the C++ generated by matlab is beyond any hope. Had the code be written in Fortran (which is very possible, and would make the code clearer) it would run very fast. Now we had a team of people translating matlab to C++
- haneefmubarak 3y agoI know that Fortran is highly used in the numeric world, especially due to widespread libraries such as LAPACK and BLAS, amongst others; in your opinion, what are the characteristics that make such code much more clear when written in Fortran as opposed to C or C++? Also, do you prefer a specific version of Fortran, or is the latest one fine?
- f1shy 3y agoIt is not about the language. Is about the people using it. They are typically not CS people. You cannot expect they program all the languages. They know typically python, matlab, and fortran. Of the 3, the one that would perform better is Fortran.
- targafarian 3y agoA couple big things: Fortran natively performs operations on arrays directly like Matlab or Numpy in Python (Matlab was originally a REPL-style front-end to Fortan), and Fortran compilers tend to yield quite fast code (though specific cases will have another language outperform Fortran). You can read more about the language and its high-level features here: https://fortran-lang.org https://fortran-lang.org That website/community was created in part by the original author of the Python Sympy library, Ondřej Čertík. He is also working on his own Fortran compiler that you can use via webassembly to play around with Fortran; find links if you want to play here: https://lfortran.org https://lfortran.org I've only dabbled a little, but I like the general idea, and I appreciate a F/OSS Fortran compiler being developed like this alongside actively seeking to grow the Fortran community & push the language & its libraries forward. I expect more widespread adoption of Fortran to be quite a ways out, but what Ondřej is doing for Fortran is necessary (not sufficient) for such adoption to be the case.
- teleforce 3y agoCheck out D language, it should be suitable for math, signal processing, data science, embedded, etc, and it's intended to be better than Fortran, C and C++ [1]. [1] Is Fortran easier to optimize than C for heavy calculations? https://news.ycombinator.com/item?id=37606477 https://news.ycombinator.com/item?id=37606477
- drbaba 3y agoModern Fortran (2008+) has built-in support for matrices, complex numbers, co-arrays (parallel programming), array slicing, etc. This makes it easy to write performant compiled code if you mostly deal with numerics. Fortran has also added support for e.g. object-oriented programming, pure functions (no side effects for better optimization), and pointers. So idiomatic modern Fortran code looks very different from the “Fortran 77” code that many people might think of when they hear the name :).
- f1shy 3y agoI would really like to see more fortran.
- jules22 3y agoWhat does a modern Fortran bring that Julia does not? Small binaries?
- xmcqdpt2 3y agoLanguage stability, and easy C ABI for embedding into other programs. Julia isn't really a language for embedding afaik.
- jules22 3y agoSure, not in the traditional sense. Since it does not make small standalone libraries, even though possible, I would not make a native extension with it. But juliacall works fine for Python and R. Quite seamless.
- deleted 3y ago[deleted]
- za3faran 3y agogolang isn't in the same league as the other languages mentioned. And Java and C# have come a long way since to be expressive as well as lesser syntax heavy (type inference, records, pattern matching, string templates, etc.)
- f1shy 3y agoI always saw C++ and Java addressing other issues, like low level memory management, and higher level abstractions like objects. Not so much type policy. Anyways I see a strong tendency in lots of programmers dismissing anything that is not type static-strict-safe, and others advocating for a more relaxed system.
- nurettin 3y agoI see C++ as a scientific DSL definition language. It lets you create an abstraction and define arithmetic operators, iterators and even lets you control dereference and call semantics. The standard helps this scheme by defining return value optimization.
- fiedzia 3y agoPython is very strict about type checking, it just does it at runtime. The next step is Idris, where you define starting and desired type and start interactive shell to figure out right way to get there.
- jules22 3y agoNim/Julia, IMO. However.... Nim is unlikely to go mainstream. It's not the next Rust and not for technical reasons. Julia won't budge Python out of the top slot anytime soon, although it should in many scenarios past simple scripting.
- diarrhea 3y agoIt’s like pointer chasing, except the docs having you chase around kwargs are incomplete and there’s gaps. You have to read source code. The Azure SDK is full of them, making liberal use of kwargs.pop. What a nightmare.
- mrweasel 3y agoThe Azure SDK generally have a lot of silliness in the Python implementation. Functions that take string as inputs, except of course they don't, they take two or three very specific string values and use them to control functionality. What those values are... Well, you should take a look at the ENUM in the C# implementation to figure that part out.
- MrBuddyCasino 3y agoRelieved to learn its not just the Java libs that are piles of hastily cobbled-together crap.
- vorticalbox 3y agoPython has enums though :(
- mrweasel 3y agoSure, but Microsoft doesn't always use them.
- gen220 3y ago`kwargs.pop`, what a phrase – it's amazing how the right arrangement of syllables can make your brain shudder. (:
- b33j0r 3y agoWell, who hasn’t used that classic datastructure `dictstack` (and famously the dict.pop operation)? At first I was kinda giggling. But actually there are such things, if the Mapping is also ordered. LRU cache, trees, tries… and—oh wait—all CPython dicts are ordered these days! (Honestly I have only used the modern ordered-nature of `dict` for serialization to versioned or human-editable files. But why not an algorithm with a “`stackdict`” I guess?)
- masklinn 3y agoA big use case for kwargs is not breaking compatibility and not having to copy/paste a ton of parameters when just forwarding them. But that's exactly the case which is difficult to type correctly.
- appplication 3y agoEither copy/paste or rolling them into config objects and passing those down is generally preferable. Copy paste doesn’t always feel great for pass through arguments but it’s perfectly interpretable. Naked kwargs is so difficult to work with that I hesitate to think of a use case where it wouldn’t be an anti pattern.
- memco 3y ago> Either copy/paste or rolling them into config objects and passing those down is generally preferable Preferable for whom? I do not prefer it. I much prefer to avoid the extra work it creates for me vs. the simplicity of kwargs. I use explicit args for the function I made and then add *kwargs on the end and then I don't have to write bespoke config objects or copy and paste a bunch of stuff that might be obsolete by a future update to some library and also pollute my function's signature. I would very much welcome a way to tell callers where kwargs is going without having to do extra work.
- appplication 3y agoPreferable for those who would use your code. If it’s just you then it’s your exclusive preference. If you have users, args/kwargs is going to be more opaque than a more explicit option. For code with many users, creating a few extra minutes of work for one dev is preferable when the alternative would be every dev who uses that code has to spend that same extra work and then some to grok what exactly is going on with the method signatures. Being explicit also creates traceable code, in that you can search a keyword to find everywhere it’s used or passed rather than tracing methods where it might be used. I can promise very few users would be thankful for the elegance and minimalism of args/kwargs when they’re source-diving trying to figure out how to get some basic functionality to work.
- shrimpx 3y agoIf you didn't use **kwargs you'd have to copy and paste every kwarg and its default value from the superclass into the subclass, which is ridiculous IMO.
- bjornasm 3y agocaugh fastai caugh