From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Lars Ingebrigtsen Newsgroups: gmane.emacs.devel Subject: Re: dash.el [was: Re: Imports / inclusion of s.el into Emacs] Date: Tue, 19 May 2020 15:09:29 +0200 Message-ID: <87tv0cqdfa.fsf@gnus.org> References: <0c88192c-3c33-46ed-95cb-b4c6928016e3@default> <873686bbl5.fsf@russet.org.uk> <87d07963ec.fsf@fastmail.fm> <873685dq73.fsf@russet.org.uk> <87wo5gc0kb.fsf@russet.org.uk> <87lflv5yzx.fsf@bernoul.li> <433E8CA0-CC87-4877-B9D4-D348531B73F8@medranocalvo.com> <87lflsyfwu.fsf@russet.org.uk> <4353C482-F4C4-4D56-9588-827E8BC37F7E@medranocalvo.com> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="117121"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) Cc: jonas@bernoul.li, Richard Stallman , joostkremers@fastmail.fm, =?utf-8?Q?Adri=C3=A1n_Medra=C3=B1o?= Calvo , emacs-devel@gnu.org, ohwoeowho@gmail.com, self@gkayaalp.com, Phillip Lord To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue May 19 15:10:17 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jb20e-000UJy-VB for ged-emacs-devel@m.gmane-mx.org; Tue, 19 May 2020 15:10:16 +0200 Original-Received: from localhost ([::1]:57840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jb20d-0001M1-V1 for ged-emacs-devel@m.gmane-mx.org; Tue, 19 May 2020 09:10:15 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:57574) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jb208-0000rG-TV for emacs-devel@gnu.org; Tue, 19 May 2020 09:09:44 -0400 Original-Received: from quimby.gnus.org ([2a01:4f9:2b:f0f::2]:42492) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jb208-0004Qi-1i; Tue, 19 May 2020 09:09:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=rT1MPM1yvb4mXhInKYe9+QLjo92MmNpiZdpCirAUIv8=; b=Qs8iPDMw4wGpnDkZb9H7cU+Y5i ZfDuhZzzehcqODYcHzIXoTTIR9LDOzhxUyiZXhHgnUa3JSHRs7ycHVoYdf0xxKwOR5AMNKlVQq0ZU qcmgV/IPBOgzu2IH96fZsyJwe6SuOq52VIX4gKwIPxIU20AQLPRF1dkL0hbTaXwvb8MQ=; Original-Received: from cm-84.212.202.86.getinternet.no ([84.212.202.86] helo=marnie) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jb1zu-0000rM-E8; Tue, 19 May 2020 15:09:33 +0200 In-Reply-To: (Stefan Monnier's message of "Mon, 18 May 2020 16:19:48 -0400") Received-SPF: pass client-ip=2a01:4f9:2b:f0f::2; envelope-from=larsi@gnus.org; helo=quimby.gnus.org X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_PASS=-0.001, URIBL_BLOCKED=0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:250911 Archived-At: Stefan Monnier writes: > Don't get me wrong: if I were to design Elisp from scratch, I'd most > probably choose a syntax for functions which has a handy "no explicit > parameter names" shorthand like `#(f % 1)` and also naturally > generalizes to the "fully explicit parameter names". Writing Clojure, I do find this stuff handy. Reading Clojure, on the other hand, I don't. :-/ When I mentioned that (reduce + #(* %1 %2) things) was valid Clojure on an IRC channel, people thought I was just joking. When a programming idiom is indistinguishable from satire, I think that may perhaps mean that it's not a particularly good idiom. On the other hand, Clojure is really popular, so what do I know? I have great sympathy for the idea that Emacs should cater to multiple styles of programming. I mean, it's Emacs: You should do whatever you want. If people like dash.el, then of course they should be allowed to use that to their hearts content. And people are voting with their feet (I mean fingers): People really like s.el and dash.el. On the other hand, Emacs has been around for 40 years, and will be around for 40 more, and programming idioms come and go. If Emacs had succumbed to the "let's add more Perl idioms!" in the late 80s and "let's make everything more Java-like!" in the 90s, then we'd be staring at a much less cohesive code base. Take things like Clojore-like threading: It's a sop to people who come from Java and jQuery. They can't read "inwards out", so: (defn calculate [] (reduce + (map #(* % %) (filter odd? (range 10))))) becomes (defn calculate* [] (->> (range 10) (filter odd?) (map #(* % %)) (reduce +))) But while this syntax makes sense in jQuery, it's ambiguous where the parameters are supposed to go in Lisp, so you have -> and ->> for two common cases, and you have to write your functions with that in mind, and then you have others where this doesn't work and you rewrite and and and. Some idioms translate well between languages, and some don't, but leave a brittle, awkward, frustrating language surface, and I think that that's where Clojure ended up. If you read programming blogs, you'll see an enormous enthusiasm for Clojure a few years back, and then less and less, and there's a whole bunch of projects written in Clojure that have been ported (back) to Java, because there just wasn't much of a value proposition there anyway. It's simply not a good Lisp. (That's my impression from years of reading HackerNews (yeah, I know), anyway.) dash.el and s.el allows the masses of people coming from Clojure(script) and JavaScript to acclimatise to Emacs Lisp a lot faster. That's good. But I'd rather not have to read the resulting un-Lispy code for the next few decades in Emacs itself. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no