OSSのSwiftを使ってみる

Linux 版 Swift を Mac 上で Docker を使って手っ取り早く試す - Qiita
に従って作業。

$ docker pull swiftdocker/swift
Using default tag: latest
latest: Pulling from swiftdocker/swift
0bf056161913: Pull complete 
1796d1c62d0c: Pull complete 
e24428725dd6: Pull complete 
89d5d8e8bafb: Pull complete 
985df33f89c4: Pull complete 
c35c1beabe3e: Pull complete 
4dca0c9f2fb6: Pull complete 
9d8e6263e358: Pull complete 
97fcbe440a2e: Pull complete 
759164ecbb9e: Pull complete 
d248265c648b: Pull complete 
737fc0a4e4e4: Pull complete 
Digest: sha256:d19827fb9a081edaa8667768960e3e57ef176eca406a7cb6217602d4d925d005
Status: Downloaded newer image for swiftdocker/swift:latest

Swift イメージがダウンロード出来た。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker-whale        latest              1d657e944bfb        16 hours ago        274.2 MB
swiftdocker/swift   latest              737fc0a4e4e4        3 days ago          859 MB
hello-world         latest              0a6ba66e537a        11 weeks ago        960 B
docker/whalesay     latest              ded5e192a685        7 months ago        247 MB

イメージを起動させ、Swift の REPL を起動させます。

$ docker run -i -t --name swiftfun swiftdocker/swift:latest
root@a3553b1f5c98:/# swift
Welcome to Swift version 2.2-dev (LLVM 3ebdbb2c7e, Clang f66c5bb67b, Swift 1f2908b4f7). Type :help for assistance.
  1> :help

The REPL (Read-Eval-Print-Loop) acts like an interpreter.  Valid statements, expressions, and
declarations are immediately compiled and executed.

The complete set of LLDB debugging commands are also available as described below.  Commands must
be prefixed with a colon at the REPL prompt (:quit for example.)  Typing just a colon followed by
return will switch to the LLDB prompt.

Debugger commands:

  apropos           -- Find a list of debugger commands related to a particular word/subject.
  breakpoint        -- A set of commands for operating on breakpoints. Also see _regexp-break.
  bugreport         -- Set of commands for creating domain specific bugreports.
  command           -- A set of commands for managing or customizing the debugger commands.
  disassemble       -- Disassemble bytes in the current function, or elsewhere in the executable
                       program as specified by the user.
  expression        -- Evaluate an expression (ObjC++ or Swift) in the current program context,
                       using user defined variables and variables currently in scope.
  frame             -- A set of commands for operating on the current thread's frames.
  gdb-remote        -- Connect to a remote GDB server.  If no hostname is provided, localhost is
                       assumed.
  gui               -- Switch into the curses based GUI mode.
  help              -- Show a list of all debugger commands, or give details about specific
                       commands.
  kdp-remote        -- Connect to a remote KDP server.  udp port 41139 is the default port number.
  language          -- A set of commands for managing language-specific functionality.'.
  log               -- A set of commands for operating on logs.
  memory            -- A set of commands for operating on memory.
  platform          -- A set of commands to manage and create platforms.
  plugin            -- A set of commands for managing or customizing plugin commands.
  process           -- A set of commands for operating on a process.
  quit              -- Quit out of the LLDB debugger.
  register          -- A set of commands to access thread registers.
  script            -- Pass an expression to the script interpreter for evaluation and return the
                       results. Drop into the interactive interpreter if no expression is given.
  settings          -- A set of commands for manipulating internal settable debugger variables.
  source            -- A set of commands for accessing source file information
  target            -- A set of commands for operating on debugger targets.
  thread            -- A set of commands for operating on one or more threads within a running
                       process.
  type              -- A set of commands for operating on the type system
  version           -- Show version of LLDB debugger.
  watchpoint        -- A set of commands for operating on watchpoints.

Current command abbreviations (type ':help command alias' for more info):

  add-dsym  -- ('target symbols add')  Add a debug symbol file to one of the target's current
               modules by specifying a path to a debug symbols file, or using the options to
               specify a module to download symbols for.
  attach    -- ('_regexp-attach')  Attach to a process id if in decimal, otherwise treat the
               argument as a process name to attach to.
  b         -- ('_regexp-break')  Set a breakpoint using a regular expression to specify the
               location, where <linenum> is in decimal and <address> is in hex.
  bt        -- ('_regexp-bt')  Show a backtrace.  An optional argument is accepted; if that
               argument is a number, it specifies the number of frames to display.  If that
               argument is 'all', full backtraces of all threads are displayed.
  c         -- ('process continue')  Continue execution of all threads in the current process.
  call      -- ('expression --')  Evaluate an expression (ObjC++ or Swift) in the current program
               context, using user defined variables and variables currently in scope.
  continue  -- ('process continue')  Continue execution of all threads in the current process.
  detach    -- ('process detach')  Detach from the current process being debugged.
  di        -- ('disassemble')  Disassemble bytes in the current function, or elsewhere in the
               executable program as specified by the user.
  dis       -- ('disassemble')  Disassemble bytes in the current function, or elsewhere in the
               executable program as specified by the user.
  display   -- ('_regexp-display')  Add an expression evaluation stop-hook.
  down      -- ('_regexp-down')  Go down "n" frames in the stack (1 frame by default).
  env       -- ('_regexp-env')  Implements a shortcut to viewing and setting environment variables.
  exit      -- ('quit')  Quit out of the LLDB debugger.
  f         -- ('frame select')  Select a frame by index from within the current thread and make it
               the current frame.
  file      -- ('target create')  Create a target using the argument as the main executable.
  finish    -- ('thread step-out')  Finish executing the function of the currently selected frame
               and return to its call site in specified thread (current thread, if none specified).
  image     -- ('target modules')  A set of commands for accessing information for one or more
               target modules.
  j         -- ('_regexp-jump')  Sets the program counter to a new address.
  jump      -- ('_regexp-jump')  Sets the program counter to a new address.
  kill      -- ('process kill')  Terminate the current process being debugged.
  l         -- ('_regexp-list')  Implements the GDB 'list' command in all of its forms except
               FILE:FUNCTION and maps them to the appropriate 'source list' commands.
  list      -- ('_regexp-list')  Implements the GDB 'list' command in all of its forms except
               FILE:FUNCTION and maps them to the appropriate 'source list' commands.
  n         -- ('thread step-over')  Source level single step in specified thread (current thread,
               if none specified), stepping over calls.
  next      -- ('thread step-over')  Source level single step in specified thread (current thread,
               if none specified), stepping over calls.
  nexti     -- ('thread step-inst-over')  Single step one instruction in specified thread (current
               thread, if none specified), stepping over calls.
  ni        -- ('thread step-inst-over')  Single step one instruction in specified thread (current
               thread, if none specified), stepping over calls.
  p         -- ('expression --')  Evaluate an expression (ObjC++ or Swift) in the current program
               context, using user defined variables and variables currently in scope.
  po        -- ('expression -O  -- ')  Evaluate an expression (ObjC++ or Swift) in the current
               program context, using user defined variables and variables currently in scope.
  print     -- ('expression --')  Evaluate an expression (ObjC++ or Swift) in the current program
               context, using user defined variables and variables currently in scope.
  q         -- ('quit')  Quit out of the LLDB debugger.
  r         -- ('process launch -X true --')  Launch the executable in the debugger.
  rbreak    -- ('breakpoint set -r %1')  Sets a breakpoint or set of breakpoints in the executable.
  repl      -- ('expression -r  -- ')  Evaluate an expression (ObjC++ or Swift) in the current
               program context, using user defined variables and variables currently in scope.
  run       -- ('process launch -X true --')  Launch the executable in the debugger.
  s         -- ('thread step-in')  Source level single step in specified thread (current thread, if
               none specified).
  si        -- ('thread step-inst')  Single step one instruction in specified thread (current
               thread, if none specified).
  step      -- ('thread step-in')  Source level single step in specified thread (current thread, if
               none specified).
  stepi     -- ('thread step-inst')  Single step one instruction in specified thread (current
               thread, if none specified).
  t         -- ('thread select')  Select a thread as the currently active thread.
  tbreak    -- ('_regexp-tbreak')  Set a one shot breakpoint using a regular expression to specify
               the location, where <linenum> is in decimal and <address> is in hex.
  undisplay -- ('_regexp-undisplay')  Remove an expression evaluation stop-hook.
  up        -- ('_regexp-up')  Go up "n" frames in the stack (1 frame by default).
  x         -- ('memory read')  Read from the memory of the process being debugged.

For more information on any command, type ':help <command-name>'.