2007-04-01
 
the chances of anything coming from mars...
HELSINKI - Een prachtige zondag in Helsinki; +10°C, een zonnetje - en wat kun je dan beter doen dat een beetje programmeren :)

Tot mijn vreugde blijkt de programmeertaal D nu ook beschikbaar voor 64-bit platforms, zoals mijn AMD-64. En mijn collega Michael rapporteerde al enig succes met het compileren op onze 770/N800 devices.

D is vergelijkbaar met C/C++ voor wat betreft de syntax en het 'close-to-the-metal' gevoel, maar heeft allerlei nuttige features van talen als Java/C# toegevoegd. Het succes van een programmeertaal is natuurlijk slechts zeer gedeeltelijk afhankelijk van de kwaliteit van de taal en haar implementatie. Het gaat met name ook om 'developer mindshare'. Talen met een groot bedrijf als supporter (Java, C#) kunnen dat 'kopen' tot op zekere hoogte -- maar andere talen moeten meer hun best doen. Maar alles is mogelijk - zie Ruby, Perl, Python.

Begin jaren '90 programmeerde ik in Eiffel, een soort voorbeeldtaal voor OO-programmeren. 'Schoner' dan C++ (en in die tijd was C++ nog wat anders dan tegenwoordig - geen std:: en geen goede implementaties). De taal is nooit echt aangeslagen, maar ze bevatte een aantal sterke ideeën, mijn favoriet was wel Design By Contract. Dat houdt in dat je de pre- en postcondities en allerlei invarianten en zelfs unittests in je code opneemt. De assert()-functie in C is een Neanderthal-versie van het concept.

Er lijkt een niche te zijn voor D, en ik ga er wat mee experimenteren. Zoveel ideeën, zo weinig tijd. Zie het wikipedia-artikel voor veel meer informatie.

$ cat hello.c
#include 

int
main (int argc, char *argv[])
{
        printf ("hello, world!\n");
        return 0;
}

$ cat hello.d
int 
main (char[][] args)
{
 printf ("hello, world!\n");
 return 0;
}

$ gcc -o hello-c.s -S hello.c
$ gdc -o hello-d.s -S hello.d
$ diff -u hello-c.s hello-d.s
--- hello-c.s 2007-04-01 21:24:05.000000000 +0300
+++ hello-d.s 2007-04-01 21:24:15.000000000 +0300
@@ -1,11 +1,11 @@
- .file "hello.c"
+ .file "hello.d"
  .section .rodata
 .LC0:
- .string "hello, world!"
+ .string "hello, world!\n"
  .text
-.globl main
- .type main, @function
-main:
+.globl _Dmain
+ .type _Dmain, @function
+_Dmain:
 .LFB2:
  pushq %rbp
 .LCFI0:
@@ -13,26 +13,32 @@
 .LCFI1:
  subq $16, %rsp
 .LCFI2:
- movl %edi, -4(%rbp)
- movq %rsi, -16(%rbp)
+ movq %rdi, %rax
+ movq %rsi, %rdx
+ movq %rax, -16(%rbp)
+ movq %rdx, -8(%rbp)
  movl $.LC0, %edi
- call puts
+ movl $0, %eax
+ call printf
  movl $0, %eax
  leave
  ret
 .LFE2:
- .size main, .-main
+ .size _Dmain, .-_Dmain
+.globl __gdc_personality_v0
  .section .eh_frame,"a",@progbits
 .Lframe1:
  .long .LECIE1-.LSCIE1
 .LSCIE1:
  .long 0x0
  .byte 0x1
- .string "zR"
+ .string "zPR"
  .uleb128 0x1
  .sleb128 -8
  .byte 0x10
- .uleb128 0x1
+ .uleb128 0x6
+ .byte 0x3
+ .long __gdc_personality_v0
  .byte 0x3
  .byte 0xc
  .uleb128 0x7
@@ -60,5 +66,5 @@
  .uleb128 0x6
  .align 8
 .LEFDE1:
- .ident "GCC: (GNU) 4.1.2 (Ubuntu 4.1.2-0ubuntu4)"
+ .ident "GCC: (GNU) 4.1.1 20060524 (  (gdc 0.23, using dmd 1.007))"
  .section .note.GNU-stack,"",@progbits

Labels: ,


0 Reacties:

Een reactie plaatsen


Emacs, the UberEditor Powered by Blogger