From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Nala Ginrut Newsgroups: gmane.lisp.guile.user Subject: Re: Handling modules with same name (from library and from current project) Date: Mon, 6 Jan 2025 00:42:52 +0900 Message-ID: References: <22b33143-8fc9-4aa5-b1b5-978ce7f118e6@posteo.de> 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="23181"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Guile User To: Zelphir Kaltstahl Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Sun Jan 05 16:43:51 2025 Return-path: Envelope-to: guile-user@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 1tUSn8-0005uW-Ua for guile-user@m.gmane-mx.org; Sun, 05 Jan 2025 16:43:51 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tUSmW-0005xg-Tg; Sun, 05 Jan 2025 10:43:12 -0500 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 1tUSmU-0005xI-Qb for guile-user@gnu.org; Sun, 05 Jan 2025 10:43:10 -0500 Original-Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tUSmS-0000J4-Br for guile-user@gnu.org; Sun, 05 Jan 2025 10:43:10 -0500 Original-Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-2ef72924e53so19545373a91.3 for ; Sun, 05 Jan 2025 07:43:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1736091787; x=1736696587; darn=gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=LIgBMs8d4pLnC8U1QDwTets9+8+rH/CPOIsS3YX5nuw=; b=Xr1lxk4sfGZOislWZQjvCRc84UZEcwNMpOvrYJaX5MBVXCUh+mGMOV9oH7a/ELy5tS xpbaZ8N77IeQV4vkURXCK5P7IeJTa4hmkrqcWOlHWfixGUSlzsXSQhVrB8rneevSPciQ f4sL8iXd4nCPJiG6RtIsNVMcID8O8urrKVLM8YUw3Dak8ypUgLwLsdpmVQ0+tY+q0jql UCuNZUXuL8bgcP2r9w1w2vDJDxtEWh02tLa0Zdn5fmjG9UtMgpVulJZ6D5pIwhyyPc4T Xe28Ntsco5vfP6Ale8qzrhGTVpkQvXFbJQv6VT94NAtdT9Aw1cO6JlO250TrKjH0pGBj 4thw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736091787; x=1736696587; h=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=LIgBMs8d4pLnC8U1QDwTets9+8+rH/CPOIsS3YX5nuw=; b=Ge2GKgI48IRYjQi+9ry/3jIbf+JS/f5rtWJaFtUrq+MWl4ZvQFX7txMi7xYY4qVYIY AHIxPEuGJshxBW0V6fIoKy659OI1oW1vD/Q8a87EEqRElRj1yOWluQw83T9ZIzbu04gB gnXuUbJlqZljx7FHKJCLDmiGodq9yrhbElHmHF5WPFOpYJB2zlNAGoxnsNTNtNgpUD1G +jqB2WctDH+dmIw6nN0pG2cdBGZBpzg8YPEGI/dljlTy5y6WdJq7Fgj8FEV37KZ6hppj 0vXmyFLkSj2WopzYgGSy3rRyNQn9rv9tRI7glcB1AowfmUYI1kIWEDdOYIxsv5uaDFT3 mHhA== X-Gm-Message-State: AOJu0YzyjNUdPu4XVqK7it089Np6JJbvu+OYRP/Xi11bJHRIipV1vTH9 wmSysHqEbqi0xNHYpNGj7eMt9HuAt9HOakXlvSy6Nbjmp+9MyRh7vbgaWiGzI7jSUD6d1NmXrol Labybt8hTlMVQqwj30kHtMM8fIxRhGdBZhLY= X-Gm-Gg: ASbGncvwu+D5gysS8KZAv5PNphqpyhjTusZzJrFc8+faTjn3IamdGd/3IPJEu496qZV +Av5cgoh0Fx0hgOy03dwL3KAvGadOKPUEQiToGZs= X-Google-Smtp-Source: AGHT+IHf4fRwoiB0e1FneV2N2d7oQJPnXOgu/nud7j4QPLEvCxz+VwLLZldOUXasYUBCbRS0k5QLX33X9bwB8tcZ0bI= X-Received: by 2002:a17:90b:2543:b0:2f4:432d:250d with SMTP id 98e67ed59e1d1-2f452e372edmr74802446a91.21.1736091786439; Sun, 05 Jan 2025 07:43:06 -0800 (PST) In-Reply-To: <22b33143-8fc9-4aa5-b1b5-978ce7f118e6@posteo.de> Received-SPF: pass client-ip=2607:f8b0:4864:20::102e; envelope-from=nalaginrut@gmail.com; helo=mail-pj1-x102e.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, HTML_MESSAGE=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-Content-Filtered-By: Mailman/MimeDel 2.1.29 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.user:20039 Archived-At: > How do you avoid these module name conflicts? How do you make sure that only libraries themselves use their own helper function modules? If I understand you correctly. I think you should add a namespace as directory inside lib dir, pick your own unique project name as the namespace, say mylib, and define it as (define-module (mylib list-utils)) Best regards. Zelphir Kaltstahl =E4=BA=8E 2025=E5=B9=B41=E6= =9C=885=E6=97=A5=E5=91=A8=E6=97=A5 =E4=B8=8B=E5=8D=8811:50=E5=86=99=E9=81= =93=EF=BC=9A > Hello Guile Users! > > I have a question regarding an issue I run into again and again, and have > not > found an adequate solution for yet. I want to know how you are handling > this, > what your solution is. > > (1) recent story: > > I have a website, that I wrote manually in pure HTML and CSS. It does wha= t > it > should and there is no actual issue with it. However, I have been thinkin= g > it > would be cool to implement it in Guile and make a sort of minimal example > or web > "framework", of how one can make such a static website using Guile. I > already > have some example in my examples repository. However, that example has > code in > it, that is copied from my existing "guile-fslib", which is on guix > already. So > I have been thinking: "I should just install the package from guix and > remove > this code from my new website repository, having it hidden away in the > guile-fslib library." It is just some code to work with file names and > directories and paths, not directly web related, but important for > checking, > whether a request for a static resource/an asset is within the "static" > directory, and not just anywhere on the server, which would be a security > issue. > > Of course I could put everything in a docker container or something, or > completely serve static assets using a HTTP server, as one should, but > then the > Guile thing I want to build would not work on its own. I want to at least > have > it implemented as a fallback, so that one could run it without an > additional > thing in front of it for handling static resource requests. > > (2) So far so good. But now comes the problem: > > "guile-fslib" has a module named "string-utils" and a module named > "list-utils". > In my guile web development example code I also have modules with those > names. > Guile then gets confused about which one I am referring to, when I > `(use-modules > ...)` them and in the code that makes use of the functions from those > modules, > it then claims, that no bindings with some name exist, because it has > looked > into the "list-utils" or "string-utils" of the guix package, instead of > the one > of my web project. > > (3) Thoughts: > > I don't know how to resolve this. I think it is very unreasonable to have > to > look out to name no module the same name as any module in any library I a= m > using. Obviously many libraries or projects will have some list utilities > or > helpers for convenience. Many projects will have some special string > functions. > Having a name like "string-utils" or "string-helpers" should not be an > impossibility. > > From a past/previous case of this, I remember someone saying I should ge= t > my > load path in order. But what does this mean? In my projects I invoke Guil= e > doing > something like this: > > ~~~~ > guile -L . -L libs main.scm > ~~~~ > > I simply use the `-L` argument to pass in all the directories, in which m= y > modules reside, for example "libs/list-utils.scm" or > "libs/string-utils.scm", > which I then import into various other modules and the main file, the > entrypoint. > > (4) Solution ideas: > > (4.1) I already abstain from doing `(add-to-load-path ...)` manipulations > in my > code. As far as I know I am not doing anything dirty there. But ... Guile > gets > confused about which module to import and it seems to see the one from > installed > library first and then not consider the one of my current project. I am > not even > sure how Guile could possibly know which module I am referring to, becaus= e > I am > not telling it anything about that. So I am wondering, whether some dark > magic > of dynamically changing load path is perhaps a _necessary_ evil? > > (4.2) Or perhaps I have to give my modules multi part names like > `(define-module > (fslib helpers list-utils))` to scope module names? But that would be > annoying > when using them inside the library itself, because it is more to write an= d > I am > not sure others are doing that always. Usually I just name my modules > `(list-utils)` or `(string-utils)`. Is that a bad thing, when these are > modules > of helper functions, which are not supposed to be exported for use in > other > projects? > > (4.3) The ugly solution I so far had to reach for, because I couldn't > figure out > a better way: Integrate library code directly into the source tree of a > project, > copying code. This cannot be the right way to do it, can it? Seems > unlikely. > > How do you manage this? I know people have written much bigger projects > than I > have and surely someone has some dependency on another Guile library. How > do you > avoid these module name conflicts? How do you make sure that only > libraries > themselves use their own helper function modules? > > The bad thing is, that I always run into this, when I actually want to do > something else. In this case build a website thing in Guile. But now I am > side > tracked again by this issue, because I don't know how to do this properly= . > > Best regards, > Zelphir > > -- > repositories: > https://notabug.org/ZelphirKaltstahl,https://codeberg.org/ZelphirKaltstah= l >