Cc: bug-guile@gnu.org, guile-devel@gnu.org
Message-ID: <8c61d7cd-553a-6e48-53b6-3563acba253d@telenet.be>
Subject: Re: [PATCH] load-foreign-library: perform substring match on library
files
References: <23TGNISPS9PPL.2YOENNQD9V56X@8pit.net>
<20220723110919.30107-1-soeren@soeren-tempel.net>
<936e98a7-a9d2-2607-ef6a-8c0edff19c4a@telenet.be>
<2EA1MELO27342.28JGAL8QO05T4@8pit.net>
In-Reply-To: <2EA1MELO27342.28JGAL8QO05T4@8pit.net>
--------------c11BUmnRC3DcQe0RBR0rIUIW
Content-Type: multipart/mixed; boundary="------------0SdRp0NCFPS8AY0fP1W0V0bE"
--------------0SdRp0NCFPS8AY0fP1W0V0bE
Content-Type: multipart/alternative;
boundary="------------7TKEkSgR5EaWS4SKEfwdUj0K"
--------------7TKEkSgR5EaWS4SKEfwdUj0K
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: base64
DQpPbiAyNC0wNy0yMDIyIDE0OjE2LCBTw7ZyZW4gVGVtcGVsIHdyb3RlOg0KPiBIaSwNCj4N
Cj4gVGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrLCBjb21tZW50cyBiZWxvdy4NCj4NCj4gTWF4
aW1lIERldm9zPG1heGltZWRldm9zQHRlbGVuZXQuYmU+ICB3cm90ZToNCj4+IExvbmcgdGVy
bSwgSSB0aGluayBpdCB3b3VsZCBiZSBpZGVhbCBmb3IgR3VpbGUgdG8gZGVjaWRlIHVwb24g
YSBtYWpvcg0KPj4gdmVyc2lvbiAoYW5kIG1heWJlIGV2ZW4gbG9jYXRpb24sIGRlcGVuZGlu
ZyBvbiB0aGUgY2hvaWNlcyBvZiB0aGUNCj4+IGRpc3RybykgYXQgX2NvbXBpbGVfIHRpbWUg
aW5zdGVhZCBvZiBydW50aW1lLCBub3QgdW5saWtlIGhvdyBvdGhlcg0KPj4gY29tcGlsZXJz
IHdvcmsuDQo+IFN1cmUsIHRoYXQgY291bGQgd29yayB0b28uDQo+DQo+PiBJZiB0aGUgR3Vp
bGUgbW9kdWxlIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGggLS1ycGF0aCwgaXQgc2VhcmNoZXMN
Cj4+ICRDUk9TU19MSUJSQVJZX1BBVEggb3IgJExJQlJBUllfUEFUSCBhbmQgZW5jb2RlcyB0
aGUgZnVsbCBmaWxlIG5hbWUNCj4+ICgvdXNyL2xpYi8uLi4vbGliZ3VpbGUtLi4uIG9yIC9n
bnUvc3RvcmUvLi4uL2xpYi8uLi4pIGluIHRoZSAuZ28sDQo+PiB3aGljaCBhdm9pZHMgc29t
ZSBtYW51YWwgcGF0Y2hpbmcgd2UgaGF2ZSB0byBkbyBpbiBHdWl4Lg0KPiBXaGF0IGtpbmQg
b2YgbWFudWFsIHBhdGNoaW5nIGRvIHlvdSBkbyBvbiBHdWl4PyBDb3VsZCB5b3UgcmVmZXIg
bWUgdG8NCj4gdGhlIGNvZGUgZm9yIHRoYXQ/IE1heWJlIHRoYXQncyBzb21ldGhpbmcgd2Ug
Y291bGQgYWxzbyBkbyBvbiBBbHBpbmUgaW4NCj4gdGhlIG1lYW50aW1lLg0KDQpBIGZldyBl
eGFtcGxlczoNCg0KICAqIGd1aWxlLWctZ29sZjoNCiAgICBodHRwczovL2dpdC5zYXZhbm5h
aC5nbnUub3JnL2NnaXQvZ3VpeC5naXQvdHJlZS9nbnUvcGFja2FnZXMvZ3VpbGUteHl6LnNj
bSNuMjAwNg0KICAqIGd1aWxlLWFydGFuaXM6DQogICAgaHR0cHM6Ly9naXQuc2F2YW5uYWgu
Z251Lm9yZy9jZ2l0L2d1aXguZ2l0L3RyZWUvZ251L3BhY2thZ2VzL2d1aWxlLXh5ei5zY20j
bjEzOQ0KICAqIGd1aWxlLWFzcGVsbDoNCiAgICBodHRwczovL2dpdC5zYXZhbm5haC5nbnUu
b3JnL2NnaXQvZ3VpeC5naXQvdHJlZS9nbnUvcGFja2FnZXMvZ3VpbGUteHl6LnNjbSNuMzk1
DQogICogZ3VpbGUtc3F1ZXVlDQogICAgaHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9j
Z2l0L2d1aXguZ2l0L3RyZWUvZ251L3BhY2thZ2VzL2d1aWxlLXh5ei5zY20jbjg3MA0KDQon
Z3VpbGUtc3F1ZXVlJyBpcyBvbmUgb2YgdGhlIHNpbXBsZXN0IGV4YW1wbGVzLg0KDQo+PiBJ
SVVDLCB0aGUgc3RyaW5nLXByZWZpeD8gc2VhcmNoIGlzIG5vbi1kZXRlcm1pbmlzdGljLCB3
aGljaCBjYW4gbWFrZQ0KPj4gZGVidWdnaW5nIGNvbXBsaWNhdGVkIHdoZW4gbXVsdGlwbGUg
dmVyc2lvbnMgYXJlIGluc3RhbGxlZC4NCj4gV2VsbCwgb24gTGludXggcmVhZGRpcigzKSBm
aWxlIG5hbWUgb3JkZXIgZGVwZW5kcyBvbiB0aGUgZmlsZSBzeXN0ZW0NCj4gaW1wbGVtZW50
YXRpb24uIFNpbmNlIHRoZSBhbGdvcml0aG0gcmV0dXJucyB0aGUgZmlyc3QgZmlsZSB3aXRo
IGENCj4gc3Vic3RyaW5nIG1hdGNoLCBpdCBkZXBlbmRzIG9uIHRoZSByZWFkZGlyIG9yZGVy
LiBBcyBsb25nIGFzIHRoZSBzYW1lDQo+IGZpbGVzeXN0ZW0gaXMgdXNlZCwgaXQgc2hvdWxk
IGJlIGRldGVybWluaXN0aWMuDQoNCidGaWxlIHN5c3RlbS1zcGVjaWZpYycgaXMgYSBmb3Jt
IG9mIG5vbi1kZXRlcm1pbmlzbS4gQWRkaXRpb25hbGx5LCB0aGUgDQpmaWxlIHN5c3RlbSBp
bXBsZW1lbnRhdGlvbiBjYW4gY2hhbmdlIG92ZXIgdGltZSwgc28gZXZlbiBpZiBhIGZpbGUg
DQpzeXN0ZW0gaXMgZml4ZWQgaW4gYWR2YW5jZSwgaXQgd291bGQgc3RpbGwgYmUgbm9uLWRl
dGVybWluaXN0aWMuDQoNCkV2ZW4gaWYgdGhlIGZpbGUgc3lzdGVtIGltcGxlbWVudGF0aW9u
IGRvZXNuJ3QgY2hhbmdlLCB0aGVyZSBjYW4gc3RpbGwgDQpiZSBub24tZGV0ZXJtaW5pc20u
IEZvciBleGFtcGxlLCBpZiBkaXJlY3RvcmllcyBhcmUgaW1wbGVtZW50ZWQgYXMgaGFzaCAN
CnRhYmxlcyBhbmQgJ3JlYWRkaXInIGl0ZXJhdGVzIG92ZXIgdGhlIGJ1Y2tldHMgLS0gaWYg
b3RoZXIgZmlsZXMgYXJlIA0KYWRkZWQgb3IgcmVtb3ZlZCwgdGhlIHNpemUgY2hhbmdlcywg
d2hpY2ggY2FuIGNhdXNlIGRpZmZlcmVudCBoYXNoZWQgdG8gDQpiZSB1c2VkIGFuZCBoZW5j
ZSBhIGRpZmZlcmVudCBvcmRlci4gQXMgc3VjaCwgdGhlIHJlYWRkaXIgb3JkZXIgY2FuIA0K
ZGVwZW5kIG9uIHRoZSBwcmVzZW5jZSBhbmQgYWJzZW5jZSBvZiBvdGhlciBmaWxlcywgd2hp
Y2ggc2VlbXMgYW4gDQp1bmRlc2lyYWJsZSBmb3JtIG9mIG5vbi1kZXRlcm1pbmlzbSB0byBt
ZS4NCg0KPj4gSSB0aGluayBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gYmFpbCBvdXQgaWYgdGhl
cmUgYXJlIG11bHRpcGxlIG1hdGNoZXMNCj4+IGluc3RlYWQgb2YgYSByaXNrIG9mIGd1ZXNz
aW5nIGluY29ycmVjdGx5Lg0KDQpJbiB0aGF0IHNpdHVhdGlvbiwgdGhleSBhcmUgYWxsIHRo
ZSBzYW1lIGZpbGUsIGp1c3Qgd2l0aCBhIGRpZmZlcmVudCANCm5hbWUsIHNvIGluIHRoYXQg
c2l0dWF0aW9uIGl0J3Mgbm8gcHJvYmxlbS4NCg0KSG93ZXZlciwgY29uc2lkZXIgbXVsdGlw
bGUgKHBvdGVudGlhbGx5IGluY29tcGF0aWJsZSkgdmVyc2lvbnMuIFdoYXQgDQp2ZXJzaW9u
IGRvIHlvdSBzZWxlY3QgdGhlbj8gTWF5YmUganVzdCB0aGUgbGF0ZXN0PyBCdXQgdGhleSBt
aWdodCBiZSANCmluY29tcGF0aWJsZSAuLi4NCg0KPj4gICAgKiBXaGVuIGRvaW5nIChsb2Fk
LWZvcmVpZ24tbGlicmFyeSAiL2dudS9zdG9yZS8uLi4vbGliZm9vLnNvIikNCj4+ICAgICAg
KGFic29sdXRlIGZpbGUgbmFtZSEpLCB3b3VsZCBpdCBzZWFyY2ggZm9yDQo+PiAgICAgIC9n
bnUvc3RvcmUvLi4uL2xpYmZvby5zby5OP8KgIElmIHNvLCB0aGF0IHdvdWxkIGJlIHN1cnBy
aXNpbmcsDQo+PiAgICAgIGVzcGVjaWFsbHkgaWYgbGliZm9vLnNvLk4gZXhpc3RzLg0KPiBZ
ZXAsIGl0IGRvZXMuIEkgb3JpZ2luYWxseSBkaWRuJ3Qgd2FudCB0byBtb2RpZnkgdGhlIGhh
bmRsaW5nIG9mDQo+IGFic29sdXRlIHBhdGhzIGJ1dCB1bmZvcnR1bmF0ZWx5IGR1cmluZyB0
ZXN0aW5nIEkgbm90aWNlZCB0aGF0IEd1aWxlDQo+IGV4dGVuc2lvbnMgc2VlbSB0byBiZSBs
b2FkZWQgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoDQoNCkkgZG9uJ3Qgc2VlIHdoYXQncyB1bmZv
cnR1bmF0ZSBhYm91dCB0aGF0Lg0KDQo+IGFuZCBoZW5jZSBkb24ndCB3b3JrIHdpdGhvdXQg
dGhlIGxpYmZvby5zbyBzeW1saW5rIFsxXS4NCg0KU2VlbXMgdG8gd29yayBsb2NhbGx5Og0K
DQoobG9hZC1leHRlbnNpb24gIi9ob21lL2FudGlwb2RlLy5ndWl4LWhvbWUvcHJvZmlsZS9s
aWIvbGlicG5nMTYuc28uMTYiIA0KInQiKSA7IEluIHByb2NlZHVyZSBkbHN5bTogRXJyb3I6
IC4uLiAtLS0gdGhvdWdoIGxpYnJhcnkgd2FzIGxvYWRlZCANCnN1Y2Nlc2Z1bGx5Lg0KDQpJ
dCBhcHBlYXJzIHRoYXQgbG9hZC1leHRlbnNpb24gYWxyZWFkeSBhdXRvbWF0aWNhbGx5IGFk
ZHMgYSAuc28gdGhvdWdoIA0KKHRlc3RlZCB3aXRoIChsb2FkLWV4dGVuc2lvbiANCiIvaG9t
ZS9hbnRpcG9kZS8uZ3VpeC1ob21lL3Byb2ZpbGUvbGliL2xpYnBuZzE2IiAidCIpLCBzbyBl
eHRlbmRpbmcgaXQgDQp0byBhbHNvIGFkZCB0aGUgLk4gYXMgZG9uZSBoZXJlIGRvZXNuJ3Qg
c2VlbSBhIHJlZ3Jlc3Npb24gdG8gbWUuDQoNCj4+ICAgICogSWYgZG9pbmcgbGliZm9vLnNv
Lk4sIHdpbGwgaXQgc2VhcmNoIGZvciBsaWJmb28uc28uTi5NPw0KPiBZZXMsIHNpbmNlIGxp
YmZvby5zby5OIGlzIGEgcHJlZml4IG9mIGxpYmZvby5zby5OLk0uDQoNCldoYXQgYWJvdXQ6
IOKAmElmIGRvaW5nIGxpYmZvby5zby41LCB3aWxsIGl0IGFjY2VwdCBsaWJmb28uc28uNTAi
PyANCmxpYmZvby5zby41IGlzIGEgcHJlZml4IG9mIGxpYmZvby5zby41MCwgc28gdW5sZXNz
IGNhcmUgaXMgdGFrZW4gd2l0aCANCmRvdHMsIGl0IGNvdWxkIGFjY2VwdCBhIGRpZmZlcmVu
dCB2ZXJzaW9uIHRoYW4gd2FzIGFza2VkIGZvci4NCg0KPj4gICAgKiBEb2VzIGl0IG9ubHkg
YXBwbHkgdG8gdGhlIHN5c3RlbSBwYXRocywgb3IgYWxzbyB0bw0KPj4gICAgICBHVUlMRV9T
WVNURU1fRVhURU5TSU9OX1BBVEgsIExURExfTElCUkFSWV9QQVRIIGFuZA0KPj4gICAgICBH
VUlMRV9FWFRFTlNJT05fUEFUSD8gVGhlIGxhdHRlciB3b3VsZCBiZSBzdXJwcmlzaW5nIHRv
IG1lLCBhcw0KPj4gICAgICB2ZXJzaW9uaW5nIGlzIG1vcmUgb2YgYSBzeXN0ZW0gdGhpbmcu
DQo+IElmIHRob3NlIHBhdGhzIGFyZSBhbHNvIHNlYXJjaGVkIHVzaW5nIHRoZSBsb2FkLWZv
cmVpZ24tbGlicmFyeQ0KPiBwcm9jZWR1cmUgdGhlbiB0aGV5IGFyZSBhZmZlY3RlZCBieSB0
aGlzIGNoYW5nZS4gQWxzbywgSSBhbSBub3QgYSBHdWlsZQ0KPiBleHBlcnQgYnV0IG9uIEFs
cGluZSwgR3VpbGUgZXh0ZW5zaW9ucyBzdWNoIGFzIGd1aWxlLXJlYWRlciBhbHNvIHNoaXAN
Cj4gdmVyc2lvbmVkIHNvbmFtZXMgWzFdLg0KDQpUaGV5IGFyZSB2ZXJzaW9uZWQsIGJ1dCBB
RkFJSyB0aGUgdmVyc2lvbmluZyBpcyBtb3N0bHkgbWVhbmluZ2xlc3MsIGFzIA0KKElJUkMp
IHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IGZvciBHdWlsZSBleHRlbnNpb25zIGlzIHZl
cnNpb25lZCANCih1c2luZyB0aGUgR3VpbGUgdmVyc2lvbikgYW5kIGFzIGxpYmd1aWxlIGRv
ZXNuJ3QgdGFrZSBjYXJlIG9mIHByb3Blcmx5IA0KY2hhbmdpbmcgdGhlIHZlcnNpb24gaW4g
Y2FzZSBvZiBuZXcgc3ltYm9scyBvciBpbmNvbXBhdGlibGUgY2hhbmdlcy4NCg0KVGhvdWdo
IGFwcGFyZW50bHkgc29tZXRpbWVzIChlLmcuIGZvciBndWlsZS1yZWFkZXIpIGl0J3MganVz
dCBwdXQgaW4gDQpbLi4uXS9saWIgLi4uDQoNCj4+ICAgICogVG8gdGVzdCBpdCwgYW5kIGF2
b2lkIGJyZWFraW5nIHRoaW5ncyBsYXRlciB3aXRoIGZ1dHVyZSBjaGFuZ2VzIHRvDQo+PiAg
ICAgIGxvYWQtZm9yZWlnbi1saWJyYXJ5LCBjb3VsZCBzb21lIHRlc3RzIGJlIGFkZGVkPw0K
PiBQcm9iYWJseSwgdGhvdWdoIEkgYW0gbm90IGZhbWlsaWFyIHdpdGggdGhlIEd1aWxlIHRl
c3Qgc2V0dXAgYW5kIHRoZXJlDQo+IGRvbid0IHNlZW0gdG8gYmUgYW55IGV4aXN0aW5nIHRl
c3RzIGZvciBmb3JlaWduLWxpYnJhcnkuDQoNCnRlc3Qtc3VpdGUvdGVzdHMvZm9yZWlnbi50
ZXN0LCB0aG91Z2ggaXQgZG9lcyBub3QgdGVzdCBhY3R1YWxseSBsb2FkaW5nIA0KdGhlIGxp
YnJhcmllcywgb25seSB0aGUgR3VpbGUgZXF1aXZhbGVudCBvZiBkbHN5bS4NCg0KSSBhbHdh
eXMgZm9yZ2V0IGhvdyB0byBydW4gaW5kaXZpZHVhbCB0ZXN0cyAoaW5zdGVhZCBvZiB0aGUg
d2hvbGUgc3VpdGUpIA0KbXlzZWxmLg0KDQo+PiAgICogSXMgdGhpcyBjaGFuZ2UgZGVzaXJh
YmxlP8KgIEkgbWVhbiwgdGhpcyBpcyBhbiBGRkkgQVBJLCBzbyB0aGUgQUJJIG9mDQo+PiAg
ICAgdGhlIGxpYnJhcnkgaXMgcmF0aGVyIGltcG9ydGFudC4gSWYgYSBHdWlsZSBtb2R1bGUg
bGlua3MgdG8NCj4+ICAgICBsaWJmb28uc28sIGFuZCB0aGV5IGhhZCB2ZXJzaW9uIE4gaW4g
bWluZCwgdGhlbiBpdCdzIGltcG9ydGFudCBpdA0KPj4gICAgIGRvZXNuJ3QgbGluayB0byBO
LTEgb3IgTisxIGluc3RlYWQsIGJlY2F1c2Ugb2YgQUJJDQo+PiAgICAgaW5jb21wYXRpYmls
aXRpZXMuIEFzIHN1Y2gsIHRvIG1lIGl0IHNlZW1zIF9nb29kXyB0aGF0IHlvdSBnb3Qgc29t
ZQ0KPj4gICAgIGVycm9ycywgYXMgbm93IHlvdSBnZXQgYSByZW1pbmRlciB0byBleHBsaWNp
dGx5IHN0YXRlIHdoaWNoIEFCSQ0KPj4gICAgIHZlcnNpb24gaXMgbmVlZGVkLiAoWU1NViwg
YW5kIHRoZSBtaWxlYWdlIG9mIHRoZSBHdWlsZSBtYWludGFpbmVycw0KPj4gICAgIG1pZ2h0
IHZhcnksIGV0Yy4pDQo+IEluIG15IGV4cGVyaWVuY2UsIG1vc3QgbGFuZ3VhZ2VzIHdoaWNo
IGRvbid0IGxpbmsgYWdhaW5zdCBzaGFyZWQNCj4gbGlicmFyaWVzIGRpcmVjdGx5IGJ1dCBp
bnN0ZWFkIGxvYWQgdGhlbSBhdCBydW4tdGltZSBkb24ndCBoYXJkY29kZSBBQkkNCj4gdmVy
c2lvbnMgKGZvciBleGFtcGxlLCByZWZlciB0byBQeXRob24ncyBjdHlwZXMudXRpbC5maW5k
X2xpYnJhcnkpLg0KDQpIb3cgZG9lcyB0aGlzIHNob3cgdGhlICh1bilkZXNpcmFiaWxpdHkg
b2YgdGhlIGNoYW5nZT8NCg0KVGhlIGZhY3QgdGhhdCBtb3N0IGxhbmd1YWdlcyBkb24ndCB0
aGF0LCBkb2Vzbid0IHNlZW0gcmVsZXZhbnQgdG8gbWUuIA0KR3VpbGUgaXMgbm90IG1vc3Qg
bGFuZ3VhZ2VzLCBhbmQgdGhlIGV4cGxhbmF0aW9uIEkgZ2F2ZSBpcyBub3Qgc3BlY2lmaWMg
DQp0byBHdWlsZSwgaXQgd291bGQgd29yayBqdXN0IGFzIHdlbGwgZm9yIFB5dGhvbi4NCg0K
TW9yZSBnZW5lcmFsbHksIHlvdSBhcHBlYXIgdG8gYmUgaW5mZXJyaW5nICJYIGlzIGFjY2Vw
dGFibGUiIGZyb20gIm1hbnkgDQplbnRpdGllcyBkbyBYIiwgaWdub3JpbmcgbXkgZXhwbGFu
YXRpb24gb2Ygd2h5ICJYIGlzIG5vdCBhY2NlcHRhYmxlIi4gDQpUaGlzIGlzIGEgdmFyaWFu
dCBvZiB0aGUgImFkIHBvcHVsdW0iIGZhbGxhY3kuDQoNCj4gQWxzbywgdGhlIGN1cnJlbnQg
aW1wbGVtZW50YXRpb24gb2YgbG9hZC1mb3JlaWduLWxpYnJhcnkgZG9lcyBub3QgZm9yY2UN
Cj4geW91IHRvIHNwZWNpZnkgYW4gQUJJIHZlcnNpb24gYnV0IGluc3RlYWQgbG9hZHMgd2hh
dGV2ZXIgdGhlIGxpYmZvby5zbw0KPiBzeW1saW5rIHJlZmVycyB0by4NCkkgaGF2ZSBub3Qg
bWFkZSBhbnkgcHJvcG9zYWwgdG8gY2hhbmdlIHRoaXMgYmVoYXZpb3VyLg0KDQpHcmVldGlu
Z3MsDQpNYXhpbWUuDQo=
--------------7TKEkSgR5EaWS4SKEfwdUj0K
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
On 24-07-2022 14:16, S=C3=B6ren Tempel=
wrote:
Hi,
Thanks for your feedback, comments below.
Maxime Devos <maximedevos@telenet.be> wrote:
Long term, I think it woul=
d be ideal for Guile to decide upon a major=20
version (and maybe even location, depending on the choices of the=20
distro) at _compile_ time instead of runtime, not unlike how other=20
compilers work.
Sure, that could work too.
If the Guile module is bei=
ng compiled with --rpath, it searches
$CROSS_LIBRARY_PATH or $LIBRARY_PATH and encodes the full file name
(/usr/lib/.../libguile-... or /gnu/store/.../lib/...) in the .go,
which avoids some manual patching we have to do in Guix.
What kind of manual patching do you do on Guix? Could you refer me to
the code for that? Maybe that's something we could also do on Alpine in
the meantime.
A few examples:
'guile-squeue' is one of the simplest examples.
IIUC, the string-prefix? s=
earch is non-deterministic, which can make=20
debugging complicated when multiple versions are installed.=20
Well, on Linux readdir(3) file name order depends on the file system
implementation. Since the algorithm returns the first file with a
substring match, it depends on the readdir order. As long as the same
filesystem is used, it should be deterministic.
'File system-specific' is a form of non-determinism.
Additionally, the file system implementation can change over time,
so even if a file system is fixed in advance, it would still be
non-deterministic.
Even if the file system implementation doesn't change, there can
still be non-determinism. For example, if directories are
implemented as hash tables and 'readdir' iterates over the buckets
-- if other files are added or removed, the size changes, which
can cause different hashed to be used and hence a different order.
As such, the readdir order can depend on the presence and absence
of other files, which seems an undesirable form of non-determinism
to me.
I think it would be better=
to bail out if there are multiple matches
instead of a risk of guessing incorrectly.
In that situation, they are all the same file, just with a
different name, so in that situation it's no problem.
However, consider multiple (potentially incompatible) versions.
What version do you select then? Maybe just the latest? But they
might be incompatible ...
* When doing (load-forei=
gn-library "/gnu/store/.../libfoo.so")
(absolute file name!), would it search for
/gnu/store/.../libfoo.so.N?=C2=A0 If so, that would be surprising,
especially if libfoo.so.N exists.
Yep, it does. I originally didn't want to modify the handling of
absolute paths but unfortunately during testing I noticed that Guile
extensions seem to be loaded with an absolute path
I don't see what's unfortunate about that.
and hence don't work without=
the libfoo.so symlink [1].
Seems to work locally:
(load-extension=C2=A0
"/home/antipode/.guix-home/profile/lib/libpng16.so.16" "t") ; In
procedure dlsym: Error: ... --- though library was loaded
succesfully.
It appears that load-extension already automatically adds a .so
though (tested with (load-extension=C2=A0
"/home/antipode/.guix-home/profile/lib/libpng16" "t"), so
extending it to also add the .N as done here doesn't seem a
regression to me.
* If doing libfoo.so.N, =
will it search for libfoo.so.N.M?
Yes, since libfoo.so.N is a prefix of libfoo.so.N.M.
What about: =E2=80=98If doing libfoo.so.5, will it accept libfoo.s=
o.50"?=C2=A0
libfoo.so.5 is a prefix of libfoo.so.50, so unless care is taken
with dots, it could accept a different version than was asked for.
* Does it only apply to =
the system paths, or also to
GUILE_SYSTEM_EXTENSION_PATH, LTDL_LIBRARY_PATH and
GUILE_EXTENSION_PATH? The latter would be surprising to me, as
versioning is more of a system thing.
If those paths are also searched using the load-foreign-library
procedure then they are affected by this change. Also, I am not a Guile
expert but on Alpine, Guile extensions such as guile-reader also ship
versioned sonames [1].
They are versioned, but AFAIK the versioning is mostly
meaningless, as (IIRC) the installation directory for Guile
extensions is versioned (using the Guile version) and as libguile
doesn't take care of properly changing the version in case of new
symbols or incompatible changes.
Though apparently sometimes (e.g. for guile-reader) it's just put
in [...]/lib ...
* To test it, and avoid =
breaking things later with future changes to
load-foreign-library, could some tests be added?
Probably, though I am not familiar with the Guile test setup and there
don't seem to be any existing tests for foreign-library.
test-suite/tests/foreign.test, though it does not test actually
loading the libraries, only the Guile equivalent of dlsym.
I always forget how to run individual tests (instead of the whole
suite) myself.
* Is this change desirabl=
e?=C2=A0 I mean, this is an FFI API, so the ABI of
the library is rather important. If a Guile module links to
libfoo.so, and they had version N in mind, then it's important it
doesn't link to N-1 or N+1 instead, because of ABI
incompatibilities. As such, to me it seems _good_ that you got some
errors, as now you get a reminder to explicitly state which ABI
version is needed. (YMMV, and the mileage of the Guile maintainers
might vary, etc.)
In my experience, most languages which don't link against shared
libraries directly but instead load them at run-time don't hardcode ABI
versions (for example, refer to Python's ctypes.util.find_library).
How does this show the (un)desirability of the change?
The fact that most languages don't that, doesn't seem relevant to
me. Guile is not most languages, and the explanation I gave is not
specific to Guile, it would work just as well for Python.
More generally, you appear to be inferring "X is acceptable" from
"many entities do X", ignoring my explanation of why "X is not
acceptable". This is a variant of the "ad populum" fallacy.
Also, the current implemen=
tation of load-foreign-library does not force
you to specify an ABI version but instead loads whatever the libfoo.so
symlink refers to.
I have not made any proposal to change this behaviour.