Многоязычный привет мир
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