Configuration for Debugging the Pony Compiler in Visual Studio Code on Windows

For debugging the Pony compiler on Windows I use the following configuration files in the .vscode directory of my cloned ponyc git repo.

I also use the Pony Syntax Colorizer for syntax highlighting in Pony programs.

Updated: updated tasks.json for more recent VSCode versions.

c_cpp_properties.json:

{
  "configurations": [
    {
      "name": "Win32",
      "includePath": [
        "${workspaceRoot}/build/debug-llvm-3.9.1/ThirdParty/lib/LLVM-3.9.1-Debug/include",
        "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/include",
        "C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared",
        "C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt",
        "C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um",
        "${workspaceRoot}/src/common",
        "${workspaceRoot}/src/libponyrt"
      ],
      "defines": [
        "PONY_VERSION=\"0.20.0\"",
        "LLVM_VERSION=\"3.9.1\"",
        "PONY_COMPILER=\"msvc\"",
        "PONY_BUILD_CONFIG=\"debug\"",
        "PONY_LLVM=391",
        "DEBUG",
        "_DEBUG",
        "_MSC_VER=1900",
        "UNICODE"
      ],
      "browse": {
        "limitSymbolsToIncludedHeaders": true,
        "databaseFilename": "C:/Users/Gordon/Dev/pony/ponyc/.vscode/browse/.browse.VC.db",
        "path": [
          "${workspaceRoot}/build/debug-llvm-3.9.1/ThirdParty/lib/LLVM-3.9.1-Debug/include",
          "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/include",
          "C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/shared",
          "C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/ucrt",
          "C:/Program Files (x86)/Windows Kits/10/Include/10.0.16299.0/um",
          "${workspaceRoot}/src"
        ]
      },
      "intelliSenseMode": "msvc-x64"
    }
  ],
  "version": 3
}

Obviously the version numbers and directory names for LLVM, Visual Studio and Windows SDK will need to be updated for your particular installation.

launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch Ponyc",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${workspaceRoot}/build/debug-llvm-3.9.1/ponyc.exe",
      "args": [ ],
      "stopAtEntry": false,
      "cwd": "${workspaceRoot}",
      "environment": [
        {
          "name": "PONYPATH",
          "value": ""
        }
      ],
      "externalConsole": false
    },
    {
      "name": "Attach to Process",
      "type": "cppvsdbg",
      "request": "attach",
      "processId": "${command:pickProcess}"
    }
  ]
}

This provides two launch tasks, one for the Pony compiler, and one for attaching to a running program.

tasks.json

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "distclean",
      "command": "${workspaceRoot}/make.bat",
      "args": [
        "distclean"
      ],
      "type": "shell",
      "group": "none",
      "problemMatcher": []
    },
    {
      "label": "configure",
      "command": "${workspaceRoot}/make.bat",
      "args": [
        "configure"
      ],
      "type": "shell",
      "group": "none",
      "problemMatcher": []
    },
    {
      "label": "clean",
      "command": "${workspaceRoot}/make.bat",
      "args": [
        "clean",
        "--config=debug"
      ],
      "type": "shell",
      "group": "none",
      "problemMatcher": []
    },
    {
      "label": "build",
      "command": "${workspaceRoot}/make.bat",
      "args": [
        "build",
        "--config=debug"
      ],
      "type": "shell",
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "problemMatcher": "$msCompile"
    },
    {
      "label": "test",
      "command": "${workspaceRoot}/make.bat",
      "args": [
        "build",
        "test",
        "--config=debug"
      ],
      "type": "shell",
      "group": {
        "kind": "test",
        "isDefault": true
      },
      "problemMatcher": "$msCompile"
    }
  ]
}

This will provide tasks for building and testing ponyc in debug mode.

settings.json

{
  "files.associations": {
    "*.h": "cpp",
    "*.c": "cpp"
  }
}

Windows builds must use C++ for all source files.

PEG Parser Library for Pony

I have recently released a PEG parser library for the Pony programming language: Kiuatan (“horse” or “pony” in Chinook Jargon). This is mostly a learning exercise for me. It doesn’t make use of any of Pony’s actor model functionality.

Kiuatan (“horse” or “pony” in Chinook Jargon) is a library for building and running parsers in the Pony programming language.

Kiuatan uses Parsing Expression Grammar semantics, which means:

  • Choices are ordered, i.e. the parser will always try to parse alternatives in the order they are declared.
    • Parsers do not backtrack from successful choices.
    • Sequences are greedy, i.e. the parser will not backtrack from the end of a sequence.
  • Kiuatan parsers are “packrat” parsers; they memoize intermediate results, resulting in linear-time parsing.
  • Parsers use Mederios et al’s algorithm to handle unlimited left-recursion.

Legi Plu

En mia lasta posto mi rakontis pri mia eklegado de La Mastro de l’Ringoj. Mi nun atingis la sekcion en kiu Frodo kaj Sam marŝas kune kun Golumo ĉirkaŭ la landlimoj de Mordoro. Tiun sekcion mi neniam ĝuis tiom, kiom mi ĝuis la ceterajn partojn. Ĝi sentigas min malkomforte. Mi ne diras, ke la resto de la verko estas afabla kaj komforta! Sed la malrapida progreso de Frodo kaj Sam ŝajnas solece, misaŭgure. Precipe post la unua legado, ĉar oni jam konas la venontajn ĝenojn. Tamen mi celas tute legi, ĉar mi legas ĝin tiom plibonigi mian lerton, kiom min amuzi.

Esperanta Legado

Mi aĉetis antaŭ kelkaj jaroj La Mastro de l’ Ringoj de J. R. R. Tolkien, kaj komencis legi ĝin. Sed estis malrapide, kaj ĝeniĝe, ĉar mi kutimas legi angle tre facile kaj flue. Sed dum la lastaj du aŭ tri semajnoj ŝajnas ke mi atingis novan lertnivelon, ĉar mi eblas legi multe pli rapide. Antaŭ nun mi apenaŭ sekvis la hobitojn for de la Provinco, sed ĉimomente oni restas en Rivendelo. Min amuzas esti pliboniganta mian lerton je iu temo. Prizorgi du infanoj malviglecigas min.