fennell.dev is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.
This server runs the snac software and there is no automatic sign-up process.
I'm an 👴 so I know C & Perl at an expert level. I'm solid in #Scheme, #Elisp, #Java, and #Python (but slow b/c I must look up details on standard APIs, etc.). I'm learning #Rust, knew #Ruby once upon a time, & dabbled in #Haskell. I also know #Tcl (of all things!).
I'm doing a medium text-processing/sqlite-db-update system. I'm still convinced that if you've gobs of wonky-formatted text flying at you, #Perl is still the right choice.
But I'm open-minded.
This is very plausible theory. Despite Python being the perennial counter example used by haters, I just noted elsewhere in the thread I'm de-facto maintainer of a Python system that feels a bit "write once, read never" to me because it overuses esoteric Python language features.
There are dozens of ways (some well motivated!) a programmer can write software that no one (even themself) can maintain!
Fascinating analysis, @valhalla. I have spent my career (since I did graduate school in programming language internals) focused on the (false) interpreter/compiler dichotomy as a question of what the language *implementation* looked like.
I've never considered the question from essential a UI perspective — as your “REPL” test does. 🤔
@barubary's point that gdb could well be considered a REPL for C/C++ is also fascinating.
Esp. w/ LLM-gen-AI #slop, I've seen horrendously poor code written in every #programming language that I know.
I'm de-facto maintainer of a #Python system rn written that overuses so many esoteric features that folks who write Python *daily* reviewed & told me it's hard to maintain b/c it's “too clever for its own good”.
Every proglang has its own way to create “write once, read never” code. #Perl, C, & C++ do require extra human discipline to avoid that.
This meme originated from #Java & #Python enthusiasts in late 1990s when #Perl's popularity outranked both of them.
I speculate the meme persists from non-polygots who are annoyed (or even insecure) that they can't fix code in any language that is presented to them.
Obvious answer to @cdonat's troll is Perl is one of a few languages that has effectively its own DSLs built in.
I remain fascinated at the need #programming snobs have to denigrate other people's work.🤷
Hm, you want to get away from messy sh/awk/sed, but chose a language, that you yourself consider an almost-drop-in-replacement. How's that going to work out?
Back in the days I wrote medium sized applications in Perl: ~10k lines. I used to joke, that the only issue was, I couldn't read them. There is a reason, Perl is considered a "write-only-language" as soon as more than one developer is involved.
I did not go to the YAPC::NA that was in Houston. ISTR my last YAPC was in 2002, maybe?
#Perl will always be special to me as a FOSS activist because — while the 1992–2002 Perl community *definitely* had serious toxicity problems — I learned there what #FOSS community was about, and how #SoftwareFreedom could make #programming & usage of software egalitarian.
Fascinatingly, I later hung out in the #Python community, & it was much less software-freedom-oriented than Perl's community.
I have the same approach; I suspect we're the same age and era of computing so not surprising. But I generally stay really open-minded that new Perl code might be a Bad Idea™, which is why I started this thread.
I really don't think the small-to-medium system I'm working on this weekend would make sense to write in #Python or #Java. @paulv kinda did convinced me that *if* I had time to learn #Ruby well before the deliverable is due, it'd be a better choice.
I still use command-line compositions with cat and `[ef]?grep`, but anywhere `sed` or `awk` would go, I use `perl -[pn]e` instead.
I agree with awk++ analysis of Perl: it remains *at least that*, which is why I believe it has value. Some of the language-bias content in this thread willfully ignores this point: even if #Perl was once held up as a direct competitor to #Java, #Ruby, &/or #Python, there is also language evolution of purposes. (cf: #COBOL again).
I think the fact that continued, current, regular usage sh/awk/sed indicates that there is value in Perl, *even if* only to show a more comprehensive & less messy way to do what is available in sh/awk/sed.
I find there is always a point in shell scripting where everything gets so much easier if you just make it a 250-line Perl script instead.
Python and Go *cannot* almost-drop-in-replace sh/awk/sed like that. I don't know any language but #Perl that can!
@hyblon
The joke is painfully apt. *Many* people use LLM-gen-AI to take software from their most hated programming language into their favorite — just 'cause. It's #disturbing.
I've tried this with (well written) #Perl code to #Python, & I definitely got #slop out when the work is human-unattended.
LLM-gen-AI can *help* a human do translations tasks, of course, but the temptation to “never look at code not in my favorite language since I have LLM-gen-AI” is dangerous.
Cc: @bignose
pdb while writing some stuff in #Python, and it's really nice to interact with!I like that:
breakpoint() function, making conditional breakpoints very natural:if [condition]:
breakpoint()
In other languages, I slightly dread starting a debug session because I have to remember the flag to pass extra args, add all the breakpoints on startup etc. This leads to long sessions because I don't want to lose the investment I've put into my breakpoints.
But in Python, I have much shorter debug sessions and I can get right to a point of invocation really quickly, verify something, and close the debugger straight away.
I use the repl much more because I can end up in a repl right with the context and variables that I need.
Defining more breakpoints within the repl is really nice to unpack nested datastructures in the same way it would be done in the code:
>>> for key, some_list in some_dict.items():I end up writing things in the repl first, but within the context that the code would be written in reality.
... for value in some_list:
... breakpoint()
It's really thoughtfully designed - thank you to the people who made it so!