From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.help Subject: Re: How to tame compiler? Date: Sun, 02 May 2021 18:29:44 -0400 Message-ID: References: <875z03th9b.fsf@web.de> <87v981wv3f.fsf@web.de> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="11279"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:/mg+wdKpcrvHBvdjP0lWNIbPQ/s= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Mon May 03 00:30:43 2021 Return-path: Envelope-to: geh-help-gnu-emacs@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 1ldKbq-0002oW-C3 for geh-help-gnu-emacs@m.gmane-mx.org; Mon, 03 May 2021 00:30:42 +0200 Original-Received: from localhost ([::1]:43242 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ldKbp-0007dE-FE for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 02 May 2021 18:30:41 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:60014) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ldKb6-0007cs-O0 for help-gnu-emacs@gnu.org; Sun, 02 May 2021 18:29:56 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:40850) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ldKb5-0005h4-6k for help-gnu-emacs@gnu.org; Sun, 02 May 2021 18:29:56 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1ldKb1-0001rD-4S for help-gnu-emacs@gnu.org; Mon, 03 May 2021 00:29:51 +0200 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:129348 Archived-At: >> I know I sound like a broken clock, but [...] > I think you would sound more like an unbroken clock if you would shortly > tell the disadvantages of using `eval', then people would be more open > to alternatives. Code always starts in the form of a string somewhere, i.e. data, and somewhere along the lines it gets transformed into something that can be executed, i.e. code. `eval` is one way to do that, but it's a quite restrictive, because it doesn't give any opportunity to do something useful with the data representation of the code before we run it. I.e. it makes it hard to compile the code to make it more efficient, it makes it virtually impossible to give feedback about problems in the code (except for those problems which lead to "hard errors"), and for the same reason it makes it hard to provide any other kind of help in writing the code (like code completion). In the current context of Emacs, places that use `eval` tend to presume that variables have names and that those names are significant, i.e. they presume dynamic scoping, and for the same reason that it's hard to provide feedback about problems in code that is passed to `eval` it's very hard (both for tools and for humans) to figure out what needs to be done in order for the code to work correctly in the lexical-scoped dialect of ELisp. Stefan