From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Lynn Winebarger Newsgroups: gmane.emacs.devel Subject: Re: Unboxed package manager Date: Mon, 20 Mar 2023 21:40:41 -0400 Message-ID: References: <57668895-8EEA-44F7-BD46-9CDFAA11FD2C@gmail.com> <87zg87saw8.fsf@posteo.net> <87sfdzqon5.fsf@bernoul.li> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="9180"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Philip Kaludercic , Yuan Fu , emacs-devel To: Jonas Bernoulli Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Tue Mar 21 02:41:49 2023 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 1peR0W-0002Cb-Kj for ged-emacs-devel@m.gmane-mx.org; Tue, 21 Mar 2023 02:41:48 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1peQzh-0007Cu-0M; Mon, 20 Mar 2023 21:40:57 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1peQzf-0007Cf-DZ for emacs-devel@gnu.org; Mon, 20 Mar 2023 21:40:55 -0400 Original-Received: from mail-pg1-x52e.google.com ([2607:f8b0:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1peQzd-00066Y-5E for emacs-devel@gnu.org; Mon, 20 Mar 2023 21:40:55 -0400 Original-Received: by mail-pg1-x52e.google.com with SMTP id x37so7735330pga.1 for ; Mon, 20 Mar 2023 18:40:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679362851; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=qCnuB2Va/Shvp1rmjxYuC4GXTY8NdnbbB8BBzhKm8FA=; b=G1qr5xNoCBUP+/5d9tklR1Y8jq+t+/CKEDlcyWRkMGUjXsWv6Hv/AxSWe1XIo6sCNJ K8nmhEDKTzMFQvh5Y1zeHO49twjy67RkN/MIvIJmvreBY/3vuetQWxoVRgwbFovAsvlN uDHbpJH7AlkJieu2u/zWFJsKbCRpDaK5xHghrglfQbcoWjGBC62REtqzDAUfu0pyQocN gL7OfYoIuH/2bTEGJ+L0jPnjfGZ/+btWX34yuoKNsODU2eJKAwDQ1+Ut3oL4Tjha34Xp 0Lbs/20DywaUqkdr0HpnX55yUtXXgfDnwvYgceaYKibwyu6H/LhXzmdPP9b01Jf/IkbW aGUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679362851; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qCnuB2Va/Shvp1rmjxYuC4GXTY8NdnbbB8BBzhKm8FA=; b=7dKG5gUaixNtUndCn4oBkFm/6vA0IylVLktdbAqL6h+TSmymUQFN4nysZplrqNqHuj GK/+Yyp1M/miaU42yAyKaBHwaCS7p6qC1AyPkciBFfKViQRowVpPRhCLexCEYnhXimBZ obVMF6ynh1zHXkJeWC2qBYkbUwRhZvRjh/PyivjebDb6jVMitlA9ALNMsUHzU244W/Js xmJq2gyc8LSzDQKVU8xa2leB0RZuR79eRjtXU1GHdJi9zsK82Ph6lsInNppKHh/S+6QZ olcDVObpoFY0ZzJI67wNVhSdiBAYhz6+r/CVP7ai8vbD/889fhGmFDLH2D7eiNnFSMLy UZkQ== X-Gm-Message-State: AO0yUKXTOvfkZzp7YlAaXmSj4TG2tPtZl2bv8Ub5SMgCbf50po+zpncP OTMAjNBMn7pbyvilRjd0M3ca4NBUYAmCz6cuhBo= X-Google-Smtp-Source: AK7set9LF6J7mJLKLLGshE5TXa/NKUjhjx5CTvXaMQdm9l0q5SXpLwVUJY8H/LLhsjgve9h3ug3XxOR5iiwXy/AWZyQ= X-Received: by 2002:a65:428b:0:b0:50f:a35d:9dd2 with SMTP id j11-20020a65428b000000b0050fa35d9dd2mr187993pgp.4.1679362851227; Mon, 20 Mar 2023 18:40:51 -0700 (PDT) In-Reply-To: <87sfdzqon5.fsf@bernoul.li> Received-SPF: pass client-ip=2607:f8b0:4864:20::52e; envelope-from=owinebar@gmail.com; helo=mail-pg1-x52e.google.com 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, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.29 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-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.devel:304623 Archived-At: On Mon, Mar 20, 2023 at 2:11=E2=80=AFPM Jonas Bernoulli = wrote: > > Lynn Winebarger writes: > > > I think I'm going to hack something together starting with advice on th= e > > existing package management and taking some inspiration from the design= of > > Jonas Bernoulli's epkg and emir packages for tracking installed package= s > > and component files in a SQLite database. > > If I were to start over now, I wouldn't write Closql. At the time it > made a lot of sense because I knew nothing about databases and because > it allowed me to switch out the old data store ("everything is *its own* > file") without changing internal interfaces much. Moving from files to > a database did wonders for performance, so at first I didn't mind the > performance impact of the OO interface on top of the database. > Meanwhile I have moved away from the OO interface for anything that > deals with more than one package at a time, turning many rows into > EIEIO objects is a bit costly. Hmm - I had thought it might be an interesting exercise to get acquainted with Emacs's version of CLOS, but maybe not. However, just reviewing the way you've organized the package data is probably going to be useful. For example, trying to understand the best way to assess whether a particular version of a package is an upgrade. I don't know about the behavior of package.el in master, but historically, if there is a version of a package on MELPA and the same package is available on GNU or NONGNU ELPA, package.el will treat the version on GNU/NONGNU as an upgrade even though the one on MELPA is more recent. I assume it has something to do with the comparison of commit hashes or dates with more traditional version numbers, but that's just a guess. > > When I switched to SQLite, Emacs had no built-in support (coming in > Emacs 29) and there also was no module, so EmacSQL was the natural > choice. I am the maintainer of that now, so I definitely think it > serves a purpose, but I do have some reservations. > > The next release will feature new backends that use the built-in support > and a module, but if I were to start now, I probably would go with the > built-in support directly. > > EmacSQL allows writing SQL using vectors instead of concatenating > strings, which is nice, but for people just getting started with SQL, it > has the disadvantage that you now have to learn two things, SQL and the > almost SQL vector syntax, which isn't 100% complete and doesn't map 1:1. > > The main limitation of EmacSQL is that it stores everything (except > NULL) as a string. This is why I would probably avoid it now, because > it limits interoperability with anything that doesn't use EmacSQL. That's only because it was designed to interact with sqlite through a pipe to the shell program, though, right? It seems like a method for compiling sexpr-type representations of sql queries into statements usable with the builtin support would still be useful, and not limited in the same way - since the returned values do not require serializing as text by the sqlite shell then parsing them in Elisp. [ Digression...] Just looking at the src/sqlite.c in master, as there is no other documentation of the sqlite support I can see, only a simplified form of the core API is supported - not unreasonable for an initial release. The only noticeable absence I see, based on a cursory review of the sqlite3 API spec, is that a select query cannot be reset. Maybe because each db connection is associated with at most one prepared statement at a time by the design of the Lisp_Sqlite pseudovector? Other than that, I note that rows are returned as lists rather than arrays, which makes the semantics more incompatible with emacsql than it really has to be. Can that be changed before 29 is released? The associated sqlite-mode looks interesting. I only wonder why it doesn't derive from tabulated-list mode instead of directly from special. Tabulated list mode would seem to be made for things like database tables. Lynn