Even if that were so, couldn't we fix this with a convention in the module 
loader? That is, the loader concatenates all files into one upon loading. 

Is this crazy talk? 



On February 10, 2015 9:47:54 AM CET, andr...@itship.ch wrote:
>Hi Lawrence
>
>Nice you're taking part here!
>You're basically on the right track, but I think the things you mention
>don't work here, as picoLisp is strictly an interpreted language, there
>is no layer between source code and execution where such a
>name-mangling could happen.
>The source code IS the programm, which also has the great advantage
>that no magic and no weird stuff is happening which is not in the
>source code.
>
>There is namespace support in picoLisp (
>http://thread.gmane.org/gmane.lisp.picolisp.general/2680 ), but
>currently I'm not sure if the problem is solved with it.
>I stopped using it in my personal work for some reasons I don't
>remember on the top of my head, but I think it was about problems with
>definining a namespace in multiple/different files...
>
>
>----- Original Message -----
>From: Lawrence Bottorff [mailto:borg...@gmail.com]
>To: picolisp@software-lab.de
>Sent: Mon, 9 Feb 2015 20:23:16 -0500
>Subject: 
>
>I'm a total Lisp noob (and a very rusty programmer), but from OO (Java,
>et
>al) there is (behind the scenes, i.e., preprocessor) name mangling.
>There's
>also tagging stuff with a huge hash generated numbers I say all this
>because I'm hearing the need for uniqueness and anti-name-clash --
>across
>files and systems. Is that a correct assumption here? So when you call
>"your" getBob function, some other code you're involved with doesn't
>think
>that its (totally by chance also named) getBob function is meant. Am I
>on
>the right track?
>
>LB
>
>On Mon, Feb 9, 2015 at 7:12 PM, <andr...@itship.ch> wrote:
>
>> Hi list
>>
>> > Could we cook up a convention?
>>
>> Pretext
>> ---------
>> In this context I assume "modules" is meant not in the sense of
>program
>> design but in the sense of "software packages", a format to
>download/copy a
>> piece of picoLisp code (maybe accompanied by other files, e.g.
>pictures)
>> and insert it into your own picoLisp environment and/or picoLisp
>> application and getting it running without further manual adaption.
>>
>> I see a potentially big advantage of such a formalized system, as it
>could
>> greatly enhance picoLisp code reuse, and also work somewhat against
>the
>> "Lisp Curse" [1] and the sometimes claimed "lack of libraries".
>>
>> But it must be designed very carefully, keeping it as simple and
>short as
>> possible, keeping it free from any assumptions (about the picoLisp
>> environment or the layout of a picoLisp application) besides the
>absolute
>> bare necessary ones, so no restrictions are put on the kind of code
>and
>> applications using it. This thing is a easy path to bloatware, and to
>my
>> understanding the picoLisp philosophy is all about precluding bloat.
>>
>> So I see following problems:
>> 1) identity: how to identify a module and all parts belonging to it?
>>  (uniquely and universal)
>> 2) dependencies on other modules: how to verify if another module,
>which
>> the current module depends on, is 'installed' (and functional) ?
>> 3) versioning of modules?
>> 4) upgrading/downgrading of a module version, also: being able to use
>> multiple versions of a module in the same environment
>> 5) name clashing, especially of picoLisp code/symbols/function
>names/class
>> names/etcetera
>> 6) lets assume modules are not only used to extend the picoLisp
>> environment (e.g. stuff in "@lib/"), but also for applications and
>parts of
>> applications - then there should probably a way to formulate which
>database
>> schema / class definitions (and more!) a module requires/expects for
>the
>> environment where it should run in.
>> 7) documentation - how does the interested module user find out what
>a
>> given module does and how does he/she decide if it solves his/her
>needs?
>> 8) in which form would a module be distributed?
>> 9) uniform method of error reporting, especially to spot the source
>of an
>> error in a composition of modules
>> 10) other problems?
>>
>> Oh, special question
>> ---------------------
>> we have package manager on OS (e.g., apt-get), now we have all this
>hip
>> programming languages with one or even multiple package managers
>each,
>> ruby, node.js (npm), python?, .net, java?, php (pear and another one)
>and
>> many more.
>>
>> DO WE REALLY NEED TO CREATE ANOTHER ONE?
>>
>> Maybe we could come up with a small tool, which can take picoLisp
>code
>> (and a bunch of files) and create a package to use with one of those
>> existing module/package managers?
>> I mean the question in the spirit of http://xkcd.com/927/
>>
>> My thoughts on solutions
>> --------------------------------------------------
>> (previous question ignored for the moment)
>> Whenever I stumble on such common software design problems, I query
>the
>> Wiki (that is the first original wiki, originally being a collection
>and
>> discussion of Design Patterns).
>> A first search [2] brings some nice results like "What is a module"
>[3]
>> and especially the "Module Dependency Problem" [4] (that one we
>should
>> definitively look at!)
>> (I didn't study the Wiki entries entirely yet, so maybe there are
>better
>> solutions mentioned there then what I think about below).
>>
>> I was pondering about similiar stuff before, mainly to find a good
>way to
>> organize my own code.
>> For the moment, I created a directory "tgs" in the picoLisp
>installation
>> ("tgs" being a shortname for my personal framework).
>> In this directory I have several directories for different topics,
>and
>> within those I keep *.l-files.
>> Examples:
>> @tgs/log/log.l
>> @tgs/time/duration.l
>> @tgs/time/tz-offset.l
>> @tgs/time/utc2local.l
>>
>> When I like to use a specific function I load the specific
>> "function.l"-file. This can easily be done with (unless tz-offset.l
>(load
>> "@tgs/time/tz-offset.l"))
>> I try to keep the individual files as granular and small as possible,
>> often having only one function defined in such a file, so I can load
>single
>> individual functions and avoid loading anything I don't need.
>>
>> I also have directory "x" (for extra/external) where I put picoLisp
>code
>> which is neither part of the standard distribution nor made by me.
>> Examples:
>> @x/cyborgar/web.l/...
>> @x/regenaxer/osm/...
>> @x/regenaxer/wiki/...
>>
>> -> So such a scheme may solve one part of problem 1), how the modules
>> should look like on the filesystem when 'installed'
>>
>> ---
>>
>> The biggest problem I see in 4), how to avoid or handle symbol name
>> clashes.
>> Maybe this can solved with namespace system present in picoLisp, I'm
>not
>> so sure because I'm currently not using it.
>> I think the current system somewhat requires for all definitions
>(which
>> are meant to be in the same namespace) to be defined in the same go,
>> probably for the best being defined all in the same file.
>> This works against the small granulation I prefer as described above.
>> Maybe someone with a better understanding of the picoLisp naming
>system
>> (or someone who actually uses it - someone?) can say something about
>it.
>>
>> I partly use a naming scheme of <namespace>:<symbol> for some stuff,
>> mixing that with the standard picoLisp naming conventions:
>> +tgs:Class    -> class within 'tgs'
>> +tgs:class    -> abstract class within 'tgs'
>> +tgs:class:Foo -> one of multiple concrete implementations of a
>certain
>> abstract class
>> tgs:foo        -> function (foo) within 'tgs'
>> ...
>> I prefer ':' (colon) over '~' or '-' or other signs because I find it
>a
>> smaller and more readable character, but it could give side effects
>if a
>> used symbol is not defined and the readers startings looking for the
>shared
>> library "tgs" (check the reference for special behavior of colon in
>symbol
>> names).
>>
>> And of course, this quickly produces loooooong symbol names, which
>can end
>> in unreadable:stupid:stuff and also costs extra memory and
>performance when
>> executed
>> I'm still unsure about that thing and use it inconsistently at the
>moment,
>> as for most part I hadn't any symbol name clashes yet.
>>
>> I think for actual usage to distinct from which modul a certain
>symbol
>> comes from this is highly impractical.
>> Maybe there is a much better way, like when a module is load'ed, use
>short
>> handy names unless a symbol is already defined, then use a longer
>explicit
>> symbol name instead (but all references to that symbol have to be
>updated
>> too!).
>>
>> ---
>>
>> About 8), my first thought would be, that one picoLisp module should
>come
>> just as one big foo.l-file, then it could contain definitions and
>even
>> execute code which 2) checks dependencies.
>> This would fail as soon as one likes to pack not only picoLisp code
>but
>> also arbitrary files, so we will end up with a directory and so with
>a .zip
>> or better with a .tgz-file (similar to distribution of standard
>picoLisp)=

-- 
Skickat från min Android-telefon med K-9 E-post. Ursäkta min fåordighet.

Reply via email to