[HN Gopher] Pike - a dynamic programming language with a syntax ...
___________________________________________________________________
Pike - a dynamic programming language with a syntax similar to Java
and C
Author : gjvc
Score : 61 points
Date : 2025-04-19 07:59 UTC (3 days ago)
(HTM) web link (pike.lysator.liu.se)
(TXT) w3m dump (pike.lysator.liu.se)
| airstrike wrote:
| What's the itch this language is trying to scratch? For which use
| cases is it best suited?
| cess11 wrote:
| Have you ever built games in LPC? It's kind of like that, but
| more cleanly general purpose. First class modules, hot updates,
| simple and familiar to those who know some algolians, things
| like that.
| Alifatisk wrote:
| It claims to be one of the fastest "scripting" languages, where
| can I see the numbers? Does it perform close to DaScript?
|
| Also, is it only an interpreted language or can I compile it too
| if I want?
|
| Is it like Ruby in the sense that I have to share the whole
| runtime with the ruby script or can I somehow share a standalone
| cross-platform executable?
|
| I'll be honest, the design decision at first hand sight did not
| look that exciting
|
| string name = Stdio.stdin->gets();
| knowitnone wrote:
| "string name = Stdio.stdin->gets();"
|
| It did say it was like C so the design decision you don't like
| is C
| Alifatisk wrote:
| I don't think it goes both ways in this case. I wasn't a fan
| of their inspiration from C, it doesn't mean I don't like C.
|
| I'm fine with C. Keep the focus on Pike.
| nine_k wrote:
| The proper sales pitch would be: "A fast dynamic scripting
| language with a sane module system, hot reloading, and easy C
| interop". The fact that the syntax is similar to C should be
| mentioned without the pomp somewhere in the chapter about
| syntax; this is nothing to be excited about, but
| understandable, given the intended audience.
| hmry wrote:
| Of all the strengths that Java and C have, I would not call
| syntax one of them. :) So this title seems quite strange. Not the
| sales pitch I would make.
|
| It is understandable though, considering this language is 30+
| years old. Probably not the decision you would make if you were
| to design it today: Switch statement with labels+fallthrough
| instead of a switch/match expression (even Java replaced that one
| with a switch expression nowadays), ?: ternary operator instead
| of if expression (the Pike docs even call that one ugly and
| recommend not using it)...
| chrsw wrote:
| I think they point they're making is the syntax is familiar to
| what you probably already know.
| drbig wrote:
| I remember coming across Pike about two decades ago (or more), as
| a young amateur developer... I couldn't understand why anyone
| would choose Pike.
|
| And today I still can't.
|
| Legacy projects?
| pipeline_peak wrote:
| It always seemed like a MUD language project that tried to
| recycle its efforts by taking on Python, Ruby, etc.
|
| There's literally no reason to use this language unless you
| want to make MUD games or are just purely curious about the
| project.
| xorcist wrote:
| That's a bit anachronistic. Pike was released in 1994, the
| same year as Perl 5.0 and Python 1.0. Ruby did not exist yet!
|
| Being an offshoot of an existing MUD language it was quite
| usable even a young language, comparably good performance and
| a compelling C embedding. History could very well have been
| different. The 90s was a really good decade for dynamic
| languages.
| cmrdporcupine wrote:
| I mean let's be fair: back then MUD nerds were using
| LambdaMOO's "moo" language and LPmud's "LPC" before things
| like Python were mainstream or serious, Perl pre-5.0 was
| terrifying and limited, and Ruby wasn't even on the radar.
|
| So when we went to go do "serious" work we kinda missed them.
|
| Your options in 1991, 92, 93 were earlier perls, shell +
| awk/sed, or maybe tcl or a lisp/scheme if you were _lucky_.
|
| The languages inside those MUDs actually were ahead of their
| time, and their programming model -- in the case of MOO [and
| its offshoots CoolMUD and ColdMUD] at least -- was more
| similar to advanced systems like Smalltalk or Self which were
| hot interesting topics at the time.
|
| Being "confined" to being "game" languages made them not get
| taken seriously (unlike "JavaScript" which arrived with all
| sorts of weird warts but had Netscape's brand on it), so the
| LPC people tried to make it into a "serious" language in the
| form of Pike, and it's not half bad?
|
| By the late 90s, obviously things had changed. If somebody in
| a successful "serious" company had adopted Pike/LPC it could
| easily have had an alternative history where they became
| commonly used instead of perl5 or php on the early web. (It
| took Python a decade to get serious headspace there.)
|
| (Gratuitous plug for my LambdaMOO defibrilation:
| http://github.com/rdaum/moor)
| chuckadams wrote:
| LambdaMOO was ahead of its time in many ways: lists are
| immutable, but there was a handy splice operator. Verbs
| could have aliases and wildcards or both, allowing for some
| interesting namespace-like behavior. Would have been nice
| if they could have completely decoupled the built in parser
| before development died off, but it should be a pretty
| simple task nowadays, and some places like E_MOO managed to
| soft-code some pretty decent parsers regardless.
| cmrdporcupine wrote:
| LambdaMOO versions from sometime in the mid-90s and up
| (and offshoots like ToastStunt and also my rewrite, mooR)
| let you override the builtin parser with $do_command.
|
| And the builtin one I wrote in mooR is built to be
| pluggable (Rust trait) so should be possible to swap it
| out.
| chuckadams wrote:
| Ah yes I forgot about $do_command, that's what we used.
| For some reason I remember doing it with raw network read
| commands but that was a different MOO project now that I
| think about it. Nice to know some people are still doing
| MUD server dev, it's a scene I haven't been back to in a
| while.
| cmrdporcupine wrote:
| Your name may be familiar.
| atorodius wrote:
| what does pike look like
|
| https://pike.lysator.liu.se/docs/tut/introduction/first_glan...
|
| (saving you some clicks...)
| 2mlWQbCK wrote:
| From what I remember of working with Pike, the best part was
| probably the included image module. Maybe I will install Pike
| again just to see if I still like it.
|
| https://pike.lysator.liu.se/docs/man/chapter_13.html
| 2mlWQbCK wrote:
| Turns out there is no Pike package for FreeBSD, no port, and
| the Pike git repository has a FreeBSD subdirectory last
| updated 22 years ago.
|
| But ./configure && gmake && gmake install seemed to work, or
| at least it runs and nothing weird has happened so far.
| Zambyte wrote:
| Thanks. It took me 5 clicks before finding any code (this
| page).
| sigzero wrote:
| I am old. I remember when it came out.
| fifilura wrote:
| More information in this earlier comment, linked from the
| wikipedia article
|
| https://news.ycombinator.com/item?id=31453477
|
| https://en.wikipedia.org/wiki/Pike_(programming_language)
| ofrzeta wrote:
| Brings back some memories of the webserver Roxen that had a GUI,
| if I remember correctly. It still seems to be semi-alive,
| although the download page looks broken.
|
| https://en.wikipedia.org/wiki/Roxen_(web_server)
|
| EDIT: Github repo https://github.com/pikelang/Roxen
| em-bee wrote:
| the problem is that the owners of the roxen company are not
| interested in the community. that was a change that happened
| more than 20 years ago, and some believe that it was the
| downfall of roxen and pike as FOSS products.
| tomjakubowski wrote:
| If you ever wrote LPC on an LPMUD back in the day, you were
| writing proto-Pike :)
| pansa2 wrote:
| Pike is described as a "dynamic" language, so I was expecting
| purely dynamic typing, yet the language uses Java/C-style
| variable declarations with explicit types.
|
| It seems that these are (unsound) type _hints_ , years before
| TypeScript made them cool:
|
| > "If your program tries to put one type of value in a variable
| which was designed to hold another type of value, Pike _may_
| detect this " [emphasis mine]
|
| https://pike.lysator.liu.se/docs/tut/fundamentals/index.md#t...
| speed_spread wrote:
| Groovy has that too and it's quite the anti-feature. Pretend
| static typing is worse than useless, it's the MAC-10 of
| footguns.
| ch4s3 wrote:
| > it's the MAC-10 of footguns
|
| At least it might be shooting Nulls.
| cmrdporcupine wrote:
| Sounds like Julia, too.
|
| Also you'd think having the type signature would help with
| performance, but in some cases it can cause the VM to enforce
| a runtime type check where it wouldn't have before, imposing
| _worse_ performance.
| 2mlWQbCK wrote:
| Not sure what they are referring to, but it may be that you can
| declare things as having one of several types (e.g.
| int|string|void) or even that something can be any type at all
| (i.e. turn off static type-checking for that thing)? I do not
| think the type-checker will ever randomly decide to just not
| check a type given that you have provided types for it to
| check, but it was a long time ago since I had to read or write
| any Pike code.
| metalliqaz wrote:
| I can turn off static type checking for a thing in C by using
| `void*`
| pansa2 wrote:
| Looks like there's a `mixed` type, variables of which can
| hold values of any type. But at least that's something you
| can `grep` for.
|
| A more subtle issue with type hints (as in TypeScript/Python,
| not sure if this applies to Pike) is that there are ways to
| work around the type system. You can get, for example, a
| variable of type `int` that actually holds a `list`:
|
| https://news.ycombinator.com/item?id=43508152
| ConanRus wrote:
| the question i always ask: WHY anther language.
| fifilura wrote:
| What were you doing in 1994?
|
| These guys were deep in the MUD.
| cmrdporcupine wrote:
| I think it's important to point out that MUDs were probably
| the first complicated interactive synchronous "Internet
| applications", even though they were (primarily) textually
| driven and not "serious" (they were to us). So things like
| Pike (nee-LPC) & moo were on the forefront here on how to
| author those kind of dynamic systems.
|
| Early web sites, gopher, etc were just request/response
| mostly static content (sometimes with a dash of a database).
| They weren't synchronous or "live" in any real way. Things
| like IRC were synchronous but did not do programmable/dynamic
| content.
|
| I cut my teeth on moo, and was bored & annoyed to tears
| writing cgi scripts in Python & Perl and the web didn't catch
| up to produce really interactive stuff until well over 10
| years later ("web 2.0")
| ltbarcly3 wrote:
| .
| AnimalMuppet wrote:
| You realize that you're on a site that is mainly for
| _programmers_ , right? Programmers are often interested in
| languages, for the same reason that woodworkers are often
| interested in wood - even a kind of wood that they may never
| use.
| cess11 wrote:
| In 1994 there was very little competition in scripting and
| LPC/Pike/moo and the like cribbed ideas that are still not
| mainstream or became mainstream much later. It's the same
| year Python got to 1.0 and they didn't get real traction
| until 2005-2010 sometime.
|
| At the time the alternatives were stuff like Tcl and Awk and
| Perl 5, which were relatively clunky, incompetent or slower.
| Perl won for web, though Pike had Roxen and could have, and
| if that had happened we would likely have gotten a more
| Smalltalk-like Internet than the PHP Internet we got.
|
| Pike is fun, it will likely compile just fine on your odd
| computers if you have any and it has some characteristics
| that are uncommon like easy hot upgrades for long lived
| systems and modules as data.
| Koshkin wrote:
| "Keep at it partner, you'll get there."
| mrweasel wrote:
| Well, I mean you'd have to ask that regarding: Java, C#, Rust,
| Go, and so many other languages, they are all younger. Why
| create those when Pike, C and Perl was already around?
| runjake wrote:
| Lots of people questioning what Pike brings to the table. Be
| aware that Pike has been around for _over 31 years_ [1]. It's
| kind of dead now and a lot of people have moved over to Lua[2]
| (which is over 32 years old!).
|
| So long ago, that it took me a minute to recall having programmed
| a lot of CGI code with it, back in the Roxen web server[3] days.
|
| 1.
| https://en.wikipedia.org/wiki/Pike_(programming_language)#Hi...
|
| 2. https://en.wikipedia.org/wiki/Lua
|
| 3. https://en.wikipedia.org/wiki/Roxen_(web_server)
| minda wrote:
| Why is it likely currently receiving traction on HN? Is there
| an effort to revive it amongst developers, or has something
| changed that would make it more relevant now?
| forgotpwd16 wrote:
| Once every 2 or so years it's posted and upvoted due to
| appearing interesting ("dynamic language with C syntax", and
| perhaps other characteristics/features). Not really receiving
| traction. That said the language is mature enough, still gets
| updates, and there're meet ups so can assume there're
| developers using it.
| em-bee wrote:
| pike and lua are nothing alike. it is more somewhere between
| python and java (kind of like a typed python). it may be
| comparable to go in some respects.
|
| pike is suitable for large high performance standalone
| applications. basically everything that you would use python
| for as well but faster.
|
| pike is also still under active development and maintenance, so
| far from dead.
| lysace wrote:
| It was great for certain niche applications, like:
|
| * The Roxen web server
|
| * The Opera Mini backend service (150k CPU cores, 5k servers,
| 150k pageloads/s, 3 million inline fetches per second, 100+
| Gbit/s - 15 years ago)
|
| I worked on both of those projects. Now I mostly program in
| Python. It's perhaps like 10x slower to run on average but
| since it won there's a module or three for anything so building
| stuff is faster.
|
| Yay progress.
| mrweasel wrote:
| > since it won there's a module or three for anything.
|
| I was just browsing the "Module tree reference" for Pike.
| There seems to be a crazy amount of modules for the language.
| Weirdly enough for web there's only CGI (and WebSockets for
| some reason), and the CGI module isn't really documented.
| Under protocols there seems to be everything I ever need.
| lysace wrote:
| We kind of went crazy with protocol support, starting early
| on. It was a good way to learn the protocols in depth. The
| late 90s was an exciting time. It eventually became a
| defining feature of the language's library.
|
| But we were too busy having fun building the language to
| "market" it. This became a pattern.
| nine_k wrote:
| Python won because of its C interface was easy, so it's got
| Numpy, Scipy, Pytorch, OpenCV bindings, etc. For these use
| cases, the speed of the interpreter is mostly irrelevant.
|
| On the web dev front, Python was lucky to get easy bolted-on
| async I/O (via greenlets), so it was more performant than
| Ruby (which was really slow 10 years ago), and Django was
| less magical than RoR.
| em-bee wrote:
| pike's C interface also looks very good. pike had built-in
| async I/O from the very beginning. the roxen webserver is
| built on async I/O. it doesn't fork, and on an overloaded
| system it is one of the last services standing because of
| that.
|
| python likely caught up and overtook pike because it had
| better community support. one downside of pike is that it
| is slow to start, making it less convenient for quick
| scripts, which python was a lot better at, so python was
| more likely to replace perl in sysadmin work where short
| scripts matter more further helping its popularity.
___________________________________________________________________
(page generated 2025-04-22 23:01 UTC)