G'day,

Sorry to hear about your troubles.  As you know, I resorted
to extraordinary lengths (lglicua SourceForge project) to get
IM/CD/IUP to compile under GNU/Linux, especially GCC.


As far as I'm aware, no-one tries to write programs directly
in assembler, and only assembler.  The usual framework I've
seen is to use C to set things up, declare an external function,
and then have that function, written in assembler, interface
with GCC.

This is because of a simple programming maxim:  Try to write
your program in the least number of "simple" or "reasonable"
lines, using programming languages that support high-level
abstractions, as a single line in a high-level language may
translate into many thousands or even millions of lines in
low-level languages such as assembler/machine code.

(APL?  SQL?  R?  Python?  Matlab?  Lua?  A spreadsheet?  A
virtual machine?  A network of clustered machines?)

Basically, revert to a lower-level language only when the
higher-level language cannot model it (e.g. some hardware
features of CPUs and/or GPUs), often due to a desire to gain
performance.

As a rule of thumb, code is read perhaps 10 times more often
than it is written, and it takes perhaps the same amount of
time to write a code in any language -- therefore, always
strive to minimise the drift to lower languages.

Sometimes, algorithm changes or highly expressive languages
can give startling results.  For an example of this, consider
Conway's game of Life:

    - Look up HashLife, that can simulate billions of
      generations efficiently; and/or
    - A YouTube demo of Life in APL, with the final run
      given in a single line of APL:

          https://www.youtube.com/watch?v=a9xAKttWgP4

----

As a worked example, the C program "hw.c":

        #include <stdio.h>

        static void p(char *pStr)
        {
                printf("%s\n", pStr);
        }


        int main(void)
        {
                p("Hello, World");
                return 0;
        }

can be compiled to show the assembly-language output via:

        gcc -O0 -Wa,-ahl hw.c

The "-Wa," incantation means 'send the rest of this argument
as a command-line item ("-ahl") to the assembler'.

The gcc command produces the following output:

--------------------------------------------------------------------


GAS LISTING /tmp/ccpTGSO4.s                     page 1


   1                            .file   "hw.c"
   2                            .text
   3                            .type   p, @function
   4                    p:
   5                    .LFB0:
   6                            .cfi_startproc
   7 0000 55                    pushq   %rbp
   8                            .cfi_def_cfa_offset 16
   9                            .cfi_offset 6, -16
  10 0001 4889E5                movq    %rsp, %rbp
  11                            .cfi_def_cfa_register 6
  12 0004 4883EC10              subq    $16, %rsp
  13 0008 48897DF8              movq    %rdi, -8(%rbp)
  14 000c 488B45F8              movq    -8(%rbp), %rax
  15 0010 4889C7                movq    %rax, %rdi
  16 0013 E8000000              call    puts@PLT
  16      00
  17 0018 90                    nop
  18 0019 C9                    leave
  19                            .cfi_def_cfa 7, 8
  20 001a C3                    ret
  21                            .cfi_endproc
  22                    .LFE0:
  23                            .size   p, .-p
  24                            .section        .rodata
  25                    .LC0:
  26 0000 48656C6C              .string "Hello, World"
  26      6F2C2057 
  26      6F726C64 
  26      00
  27                            .text
  28                            .globl  main
  29                            .type   main, @function
  30                    main:
  31                    .LFB1:
  32                            .cfi_startproc
  33 001b 55                    pushq   %rbp
  34                            .cfi_def_cfa_offset 16
  35                            .cfi_offset 6, -16
  36 001c 4889E5                movq    %rsp, %rbp
  37                            .cfi_def_cfa_register 6
  38 001f 488D0500              leaq    .LC0(%rip), %rax
  38      000000
  39 0026 4889C7                movq    %rax, %rdi
  40 0029 E8D2FFFF              call    p
  40      FF
  41 002e B8000000              movl    $0, %eax
  41      00
  42 0033 5D                    popq    %rbp
  43                            .cfi_def_cfa 7, 8
  44 0034 C3                    ret
  45                            .cfi_endproc
  46                    .LFE1:
  47                            .size   main, .-main
  48                            .ident  "GCC: (Gentoo 13.2.1_p20230826 p7) 
13.2.1 20230826"
  49                            .section        .note.GNU-stack,"",@progbits

----------------------------------------------------------------

Hope this helps,

sur-behoffski (Brenton Hoff)
programmer, Grouse Software


_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to