Многоязычный привет мир

C, C++, Java, Swift, Python, Haskell, JS, Kotlin, Go, ASM, Fortran

C

Запустите Терминал и начните вводить код.

% vim helloworld.c              
% gcc -o helloworld_c helloworld.c
% ./helloworld_c                
Hello, World!

#include <stdio.h>
int main(int argc, char **argv) {
 printf("Hello, World!\n");
 return 0;
}

C++

Запустите Терминал и начните вводить код.

% vim helloworld.cpp                 
% g++ -o helloworld_cpp helloworld.cpp
% ./helloworld_cpp 
Hello, World!

#include <iostream>
int main() {
 std::cout << "Hello, World!\n";
 return 0;
}

Ява

Запустите Терминал и начните вводить код.

👍 vim HelloWorld.java
👍 javac HelloWorld.java
👍 java HelloWorld 
Hello, World!

class HelloWorld {
  public static void main(String[] argv) {
    System.out.println("Hello, World!");
  }
}

Быстрый

Запустите Xcode и создайте новый проект. Затем создайте тестовый файл HelloWorldTests.swift.

import XCTest
class HelloWorldTests: XCTestCase {
    func testHelloWorld() {
        print("Hello, World!")
    }
}

питон

Запустите Терминал и начните вводить код.

% vim HelloWorld.py
% python HelloWorld.py 
Hello, World!

def main():
    print("Hello, World!")
main()

Хаскелл

Запустите Терминал и начните вводить код.

% vim helloworld.hs
% ghc -o helloworld_hs helloworld.hs
[1 of 1] Compiling Main             ( helloworld.hs, helloworld.o )
Linking helloworld_hs ...
% ./helloworld_hs 
Hello, World!

main = putStrLn "Hello, World!"

JS

Запустите терминал, чтобы установить Node. Затем начните вводить код.

% brew update
% brew install node
% node -v
v12.12.0
% vim main.js
% node main.js 
Hello, World!

console.log('Hello, World!');

Котлин

Запустите терминал, чтобы установить Kotlin. Затем начните вводить код.

% brew install kotlin
% kotlin -version
Kotlin version 1.3.50-release-112 (JRE 1.8.0_20-b26)
% kotlinc helloworld.kt -include-runtime -d helloworld.jar
% java -jar helloworld.jar 
Hello, World!

fun main(args: Array<String>) {
  println("Hello, World!")
}

Go

Запустите терминал, чтобы установить Go. Затем начните вводить код.

👍 brew upgrade go
👍 go version
go version go1.13.4 darwin/amd64
👍 vim helloworld.go
👍 go run helloworld.go
Hello, World!

package main
import "fmt"
func main() {
 fmt.Println("Hello, World!")
}

КАК М

Запустите терминал, чтобы установить NASM. Затем начните вводить код.

% nasm -v
NASM version 2.14.02 compiled on Dec 27 2018
% vim helloworld.asm
% nasm -f macho64 helloworld.asm
% gcc -Wl,-no_pie -o helloworld_asm helloworld.o
% ./helloworld_asm 
Hello, World!

        global    _main
        section    .text
_main:  mov    rax, 0x02000004
        mov    rdi, 1
        mov    rsi, msg
        mov    rdx, 14
        syscall
        mov    rax, 0x02000001
        xor    rdi, rdi
        syscall
        section    .data
msg:    db    "Hello, World!", 10

Используйте lldb для отображения машинного кода.

👍lldb helloworld_asm
(lldb) target create "helloworld_asm"
Current executable set to 'helloworld_asm' (x86_64).
(lldb) b main
Breakpoint 1: where = helloworld_asm`main, address = 0x0000000100000f91
(lldb) r
Process 86987 launched: '/Users/zhijunsheng/c_java_swift_etc/factorial/helloworld_asm' (x86_64)
Process 86987 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100000f91 helloworld_asm`main
helloworld_asm`main:
->  0x100000f91 <+0>:  mov    eax, 0x2000004
    0x100000f96 <+5>:  mov    edi, 0x1
    0x100000f9b <+10>: movabs rsi, 0x100001000
    0x100000fa5 <+20>: mov    edx, 0xe
Target 0: (helloworld_asm) stopped.
(lldb) di -b
helloworld_asm`main:

👍vim helloworld.asm            
👍nasm -f macho64 helloworld.asm
👍gcc -Wl,-no_pie -o helloworld_asm helloworld.o
👍./helloworld_asm            
Hello, World!

helloworld.asm с машинным кодом:

section .data
        msg db "Hello, World!",10
section .text
        global _main
_main:
        db 0xb8, 0x04, 0x00, 0x00, 0x02 ; mov rax, 0x2000004
        db 0xbf, 0x01, 0x00, 0x00, 0x00 ; mov rdi, 1
        mov rsi, msg
        db 0xba, 0x0e, 0x00, 0x00, 0x00 ; mov rdx, 14
        db 0x0f, 0x05 ; syscall
db 0xb8, 0x01, 0x00, 0x00, 0x02 ; mov rax, 0x2000001
        db 0xbf, 0x00, 0x00, 0x00, 0x00 ; mov rdi, 0
        db 0x0f, 0x05 ; syscall

Вот еще один способ сказать «Hello, World!» в АСМ.

👍vim helloworld.asm                                    
👍nasm -fmacho64 helloworld.asm && gcc helloworld.o && ./a.out
Hello, World!

привет мир.asm

        section   .data
msg:    db        'Hello, World!',10,0
        
        section   .text
        global    _main
        extern    _printf
        default   rel
_main:  push      rbp
        mov       rbp, rsp ; Preparing the main function
lea     rdi,      [msg] ; The string is on rdi
        mov       rax, 0
        call      _printf
mov     rax,      0; Return 0
        leave
        ret

насм в линуксе

$ export PS1="👍"
👍uname -a
Linux dreamteam-1 3.10.0-1062.4.3.el7.x86_64 #1 SMP Wed Nov 13 23:58:53 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
👍vim hello.asm 
👍nasm -f elf64 -o hello.o hello.asm
👍ld -o hello hello.o
👍./hello 
Hello, World!

привет.asm

section .data
        msg db "Hello, World!",10
section .text
        global _start
_start  mov rax, 1
        mov rdi, 1
        mov rsi, msg
        mov rdx, 14 
        syscall
        mov rax, 60
        mov rdi, 0
        syscall

Фортран

Установите Гфортран:

👍 xcode-select --install
👍 brew install gcc

Напишите исходный код в hello.f90

👍 vim hello.f90
👍 gfortran hello.f90 -o hello
👍 ./hello 
 Hello, World!

Исходный код:

program hello
  print *, 'Hello, World!'
end program hello

Многоязычный Привет Мир

Мультиязычный Факториал