読者です 読者をやめる 読者になる 読者になる

どんなにへたくそでも一日後にはプログラミングが上手くなる方法(4/4)

雑記

1 / 2 / 3 / 4

(21) Smalltalk

オブジェクト指向言語として有名なSmalltalk

流石にこれはgnu版のコンパイラもrpmでしっかりありました。

% yum install gnu-smalltalk

コードは、wikipedia版こちらのページ版と2種類用意しました。

'hello,world!' printNl
Transcript show: 'hello,world!'

どちらも以下の実行方法で正しく動きます。

% gst hello.sm

しかし上記のコード、同じファイルで2行に続けて書くとエラーが起きます。どういう仕組みなんでしょうね?

解決しました。Smalltalkは文末をピリオドで表現するようです。

'hello,world!' printNl. 
Transcript show: 'hello,world!'

上記コードで問題なく動きます。

(thx! id:sumim )

(22) Decartes

会社の先輩に教えてもらった言語。

公式サイトを読むと、以下のようなことが書かれています。

デカルト言語は、論理的な推論を中心とした言語として設計しました。

狙っているのは、強力な論理的推論・探索機能があり、関数プログラミング機能を持つオブジェクト群が、人間に近い構文のI/Fによって、並列にマルチコアで動く知的なシステムです。

http://sourceforge.jp/projects/descartes/releases/

……よくわかりません。

まあHello,worldぐらいならきっと動くでしょう。

上記サイトからソースをDL、コンパイルしてインストールします。

% ./configure
% make
% make install

make 時にワーニングの山が出ていましたが……。とりあえず置いておきます。

次はコードの用意。

http://sourceforge.jp/projects/descartes/wiki/ManOperation

ちゃんとHello,worldのコードも、コマンドの使い方も書かれています。

? ;

descartes hello.car

(23) Ada

世界最古の女性プログラマーの名前にちなんでうんたらかんたら……でしたっけ。

この言語も相当古いはずですが……さて、コンパイラは……。

ありました。GNATというのですね。

% yum install gcc-gnat

コードを書いてみます。

こちらのサイトを参考にして、Hello,worldを。

with Ada.Text_IO;                                                                                   
procedure Hello is                                                                                  
begin                                                                                               
   Ada.Text_IO.Put_Line("hello,world!");                                                            
end Hello;

コンパイルしてリンクして……。

% gcc -c hello.adb
% gnatbind -x hello.ali
% gnatlink hello.ali
% ./hello

で、実行できます。


(24) Visual Basic

せっかくMono入れてるのに、VB動かしてませんでした。

……と思ったら、標準で入っていませんでした。

インストールします。

% yum install mono-basic

では早速コードを。wikipediaからとってきます。

Public Class HelloWorldApp
 Shared Sub Main()
 System.Console.WriteLine("Hello, World!")
 End Sub
End Class

私の記憶の中のBASICは行番号書いてあって、FORTRANっぽい感じがしていたのですが、VBって全然違うんですね。
見た目ほとんど最近のオブジェクト指向スクリプト言語と変わらないです。

しかしコンパイルして実行する必要があります。

まずはコンパイルを。

% vbnc /out:hello_vb.exe hello.vb

色々と恐ろしいです。

  • オプション指定で、最初の一文字にスラッシュ使わないといけない -> ルートディレクトリの上書きが怖い
  • アウトプットファイルには必ず拡張子つけないといけない

こんな機会じゃなきゃ触りたくないですこのコマンド。
で、実行。これもjavaC#と同じように、実行形式で保存できないようです。

% mono hello_vb.exe

(25) Pascal

Free Pascal という実装があるのでインストールします。

% yum install fpc

コード。wikipediaより。

program hello;                                                                                      
begin                                                                                               
   Writeln('hello,world!');                                                                         
end.

コンパイル。

% fpc -ohello_p hello.p

(26) Objective-C

Objective-C というとMaxOSXの言語というイメージが強くなってしまいましたが、gccでも余裕でコンパイルできるんですね。

なら何もインストールせずとも……と思ったら、やっぱり必要なパッケージがありました。

% yum install gcc-objc

wikipediaより、オブジェクト指向バージョンのHello,worldのコードをとってきます。

#import <stdio.h>                                                                                   
#import <objc/Object.h>                                                                             
                                                                                                    
@interface Hello : Object                                                                           
{                                                                                                   
}                                                                                                   
- hello;                                                                                            
@end                                                                                                
                                                                                                    
@implementation Hello                                                                               
- hello                                                                                             
{                                                                                                   
  printf("hello,world!\n");                                                                         
}                                                                                                   
@end                                                                                                
                                                                                                    
int main(void)                                                                                      
{                                                                                                   
  id obj;                                                                                           
  obj = [Hello new];                                                                                
  [obj hello];                                                                                      
  [obj free];                                                                                       
  return 0;                                                                                         
}

長い……。

コンパイルします。
man にも書いてますが、Objective-C をコンパイルするときは -lobjc をつけないといけないみたいです。
(エラー出てコンパイルできない)

% gcc -lobjc -o hello_m hello.m

(27) x86アセンブラ

いよいよアセンブラの世界に。

実行方法や記述形式が幾通りもあるので、どれを使ったらいいかわかりません。

今回はこちらのページを参考に、gcc でコンパイルしてみることにしました。

コード。

.text                                                                                               
_start:                                                                                             
        .globl _start                                                                               
        mov $12, %edx                                                                               
        mov $message, %ecx                                                                          
        mov $1, %ebx                                                                                
        mov $4, %eax                                                                                
        int $0x80                                                                                   
        xor %ebx, %ebx                                                                              
        mov $1, %eax                                                                                
        int $0x80                                                                                   
message:                                                                                            
        .ascii "hello,world!\n"

コンパイル。

% gcc -o hello_s -nostdlib -static hello.s

(28) Lua

なぜか標準でインタプリタが入っていたLua

こちらのページを参考に、Hello,worldを書きます。

print("hello,world!")

実行。

% lua hello.lua

一気に易しくなりました。RubyPython並です。

(29) SISAL

プログラミングを独習するには10年かかるで紹介されていた、並列処理を行える言語の一つ。

コンパイル環境をとってきます。

http://sourceforge.net/projects/sisal/

% ./configure
% make

make だけで勝手に /usr/localに放り込むので注意。

コードを書きます。チュートリアルちょっと読んだだけじゃHello,worldの書き方がわからなかったので、結局別のサイトのコードに頼ることに。


http://www.ntecs.de/old-hp/uu9r/lang/html/sisal.en.html

define main

function main(returns array [Character])
"Hello World"
end function

コンパイル。

% sisalc -o hello_sis hello.sis

(30) Prolog

ラストは、先ほどのプログラミングを独習するには10年かかるからもう一つ、宣言的記述をサポートする言語として紹介されていたPrologで締めるとしましょう。

環境をとってきます。gprologよりSWI-prologの方がいいという話もあるようですが、今回はhello,world動かすだけですのでgprolog使います。

% yum install gprolog

コンパイルの仕方がわからなかったので、インタプリタの上で動作。

:- write('hello,world!').

感想

hello,worldは誰でも簡単に作れます。

でも、ちょっと視点を変えてhello,worldを書いてみたらすごく世界が広がった感じがします。

もっと知りたい、使ってみたいという言語をいくつも知ることができました。

今回の作業は、ブログの記事を書くということもあり数日に分けましたが、単純にこの記事の内容を実行するだけでしたら一日でできます。

興味があれば、是非やってみてください。

たった1日で自分の世界を広くすることができるなんて安いものです。

1 / 2 / 3 / 4