Re: Fun trick

Liste des GroupesRevenir à co vms 
Sujet : Re: Fun trick
De : arne (at) *nospam* vajhoej.dk (Arne Vajhøj)
Groupes : comp.os.vms
Date : 13. Jan 2025, 19:40:46
Autres entêtes
Organisation : SunSITE.dk - Supporting Open source
Message-ID : <67855e2e$0$714$14726298@news.sunsite.dk>
References : 1 2 3 4 5 6
User-Agent : Mozilla Thunderbird
On 1/9/2025 8:01 AM, hb0815 wrote:
On 1/9/25 02:00, Arne Vajhøj wrote:
Hmmm.
>
It works in C, but it does not seem to work in
any other language (tested with Pascal and Fortran).
...
I assume the difference relates to user code main not being
the real program entry.
 So, make it a main entry.
 This is on Alpha. It should work on IA64 and x86. I don't have access to any of the latter systems. If this does not work on these systems, I know how to make it work, anyway.
 $ gdiff -ub lib.pas-orig lib.pas

$ gdiff -ub lib.for-orig lib.for
For those that do not speak diffish:
$ type prg.c
#include <stdio.h>
extern void say();
int main(int argc, char *argv[])
{
     say();
     return 0;
}
$ type lib.c
#include <stdio.h>
void say()
{
     printf("Hi\n");
}
int main()
{
     printf("This is a shareable image to link against not run\n");
     return 0;
}
$ cc lib
$ link/share=libshr lib + sys$input/opt
symbol_vector=(say=procedure)
$
$ define/nolog libshr sys$disk:[]libshr
$ cc prg
$ link prg + sys$input/opt
libshr/share
$
$ run prg
Hi
$ run libshr
This is a shareable image to link against not run
$ type prg.pas
program prg(input,output);
[external]
procedure say; external;
begin
    say;
end.
$ type lib.pas
program lib(input, output);
[global]
procedure say;
begin
    writeln('Hi');
end;
begin
    writeln('This is a shareable image to link against not run');
end.
$ pas lib
$ link/share=libshr lib + sys$input/opt
symbol_vector=(say=procedure)
$
$ define/nolog libshr sys$disk:[]libshr
$ pas prg
$ link prg + sys$input/opt
libshr/share
$
$ run prg
Hi
$ run libshr
This is a shareable image to link against not run
$ type prg.for
       program prg
       call say
       end
$ type lib.for
       program lib
       write(*,*) 'This is a shareable image to link against not run'
       end
c
       subroutine say
       write(*,*) 'Hi'
       end
$ for lib
$ link/share=libshr lib + sys$input/opt
symbol_vector=(say=procedure)
$
$ define/nolog libshr sys$disk:[]libshr
$ for prg
$ link prg + sys$input/opt
libshr/share
$
$ run prg
Hi
$ run libshr
This is a shareable image to link against not run
So I think the conclusion must be that one should
not think the traditional grouping:
* executable image
* shareable image
but instead:
* image with transfer address
* image with symbol vector
* image with both transfer address and symbol vector
:-)
I believe that is rare for native code.
But common for non-native code.
$ type prg.py
import lib
if __name__ == '__main__':
     lib.say()
$ type lib.py
def say():
     print('Hi')
if __name__ == '__main__':
     print('This is a library not a program')
$ python prg.py
Hi
$ python lib.py
This is a library not a program
$ type Prg.java
public class Prg {
     public static void main(String[] args) {
         Lib.say();
     }
}
$ type Lib.java
public class Lib {
     public static void say() {
         System.out.println("Hi");
     }
     public static void main(String[] args) throws Exception {
         System.out.println("This is a library not a program");
     }
}
$ javac Prg.java Lib.java
$ java Prg
Hi
$ java Lib
This is a library not a program
Arne

Date Sujet#  Auteur
8 Jan 25 * Fun trick39Arne Vajhøj
8 Jan 25 +- Re: Fun trick1Lawrence D'Oliveiro
8 Jan 25 +* Re: Fun trick11John Reagan
8 Jan 25 i`* Re: Fun trick10Arne Vajhøj
8 Jan 25 i `* Re: Fun trick9John Reagan
8 Jan 25 i  +* Re: Fun trick2Arne Vajhøj
8 Jan 25 i  i`- Re: Fun trick1Arne Vajhøj
8 Jan 25 i  `* Re: Fun trick6Arne Vajhøj
14 Jan 25 i   `* Re: Fun trick5John Reagan
14 Jan 25 i    `* Re: Fun trick4Lawrence D'Oliveiro
14 Jan 25 i     `* Re: Fun trick3Arne Vajhøj
14 Jan 25 i      +- Re: Fun trick1Arne Vajhøj
15 Jan 25 i      `- Re: Fun trick1John Reagan
8 Jan 25 `* Re: Fun trick26hb0815
8 Jan 25  `* Re: Fun trick25Arne Vajhøj
8 Jan 25   `* Re: Fun trick24hb0815
9 Jan 25    `* Re: Fun trick23Arne Vajhøj
9 Jan 25     `* Re: Fun trick22hb0815
13 Jan 25      +* Re: Fun trick11Arne Vajhøj
17 Jan 25      i`* GNU diff command, was: Re: Fun trick10Simon Clubley
17 Jan 25      i `* Re: GNU diff command, was: Re: Fun trick9Craig A. Berry
17 Jan 25      i  `* Re: GNU diff command, was: Re: Fun trick8Craig A. Berry
19 Jan 25      i   `* Re: GNU diff command, was: Re: Fun trick7hb0815
21 Jan 25      i    `* Re: GNU diff command, was: Re: Fun trick6Craig A. Berry
22 Jan 25      i     `* Re: GNU diff command, was: Re: Fun trick5hb0815
22 Jan 25      i      `* Re: GNU diff command, was: Re: Fun trick4Lawrence D'Oliveiro
23 Jan 25      i       `* Re: GNU diff command, was: Re: Fun trick3Robert A. Brooks
24 Jan 25      i        `* Re: GNU diff command, was: Re: Fun trick2Simon Clubley
25 Jan 25      i         `- Re: GNU diff command, was: Re: Fun trick1Dave Froble
13 Jan 25      `* Re: Fun trick10Arne Vajhøj
13 Jan 25       `* Re: Fun trick9Lawrence D'Oliveiro
13 Jan 25        `* Re: Fun trick8Arne Vajhøj
14 Jan 25         +* Re: Fun trick6John Reagan
14 Jan 25         i`* Re: Fun trick5Arne Vajhøj
3 Feb 25         i +- Cobol (was Re: Fun trick)1Arne Vajhøj
3 Feb 25         i `* Re: Fun trick3Arne Vajhøj
3 Feb 25         i  `* Cobol (was: Re: Fun trick)2Arne Vajhøj
5 Feb 25         i   `- Re: Cobol1Arne Vajhøj
14 Jan 25         `- Re: Fun trick1Lawrence D'Oliveiro

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal