Host introspection: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|J}}: another method)
Line 53: Line 53:


=={{header|OCaml}}==
=={{header|OCaml}}==
Print word size:
<ocaml>Printf.printf "%d\n" Sys.word_size; (* Print word size *)
<ocaml>Printf.printf "%d\n" Sys.word_size</ocaml>
Printf.printf "%s\n" Sys.os_type; (* Print operating system *)</ocaml>
Dunno about endianness
Dunno about endianness



Revision as of 18:43, 11 October 2008

Task
Host introspection
You are encouraged to solve this task according to the task description, using any language you may know.

Print the word size and endianness of the host machine.

Ada

<ada> with Ada.Text_IO; use Ada.Text_IO; with System; use System;

procedure Host_Introspection is begin

  Put_Line ("Word size" & Integer'Image (Word_Size));
  Put_Line ("Endianness " & Bit_Order'Image (Default_Bit_Order));

end Host_Introspection; </ada> Sample output on a Pentium machine:

Word size 32
Endianness LOW_ORDER_FIRST

C

<c>#include <stdio.h>

int main() {

   int one = 1;
   printf("word size = %d\n", 8 * sizeof(void *)); // a pointer takes up a word
   if (*(char *)&one) // if the least significant bit is located in the lowest-address byte
       printf("little endian\n");
   else
       printf("big endian\n");
   return 0;

}</c>

Forth

: endian
  cr 1 cells . ." address units per cell"
  s" ADDRESS-UNIT-BITS" environment? if cr . ." bits per address unit" then
  cr 1 here ! here c@ if ." little" else ." big" then ."  endian" ;

This relies on c@ being a byte fetch (4 chars = 1 cells). Although it is on most architectures, ANS Forth only guarantees that 1 chars <= 1 cells. Some Forths like OpenFirmware have explicitly sized fetches, like b@.

J

Method A:

   ":&> (|: 32 64 ;"0 big`little) {"_1~ 2 2 #: 16b_e0 + a. i. 0 { 3!:1 ''  
32
little

Method B:

   ((4*#) ,:&": (;:'little big') {::~ '7'={.) {: 3!:3 ] 33 b.~_1
32
little

OCaml

<ocaml>Printf.printf "%d\n" Sys.word_size; (* Print word size *) Printf.printf "%s\n" Sys.os_type; (* Print operating system *)</ocaml> Dunno about endianness

Python

<python>>>> import sys, math >>> int(round(math.log(sys.maxint,2)+1)) 32 >>> sys.byteorder little >>> import socket >>> socket.gethostname() 'PADDY3118-RESTING' >>> </python>