Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

Language Atlas (mini-courses for more languages)  Module 1 – Start here: how the atlas works and how to learn a language fast

How the Language Atlas works

What every atlas mini-course contains, how to read and repeat a recorded example with its exact command and version, and why a language is in or out.

  • Beginner
  • 15 minutes
  • Examples run with Python 3.14.8, Pyodide 314.0.7, tcl 9.0.4, Clang 21.0.0 and .NET 10.0.401
  • By MySmartCoPilot
Free lesson, Pro answers: 15 minutes
Free: the whole lesson. With a pass: the model answers to its 2 interview questions.

What you will learn

  • Explain the four parts of every atlas mini-course: setup, idioms, a signature feature and a tested project
  • Reproduce a recorded example with the exact command and toolchain pin shown in it
  • Use the language register to see why a language is in the atlas, waiting or left out
What you’ll learn

What you will learn

  • Explain the four parts of every atlas mini-course: setup, idioms, a signature feature and a tested project
  • Reproduce a recorded example with the exact command and toolchain pin shown in it
  • Use the language register to see why a language is in the atlas, waiting or left out
On this page

The same small program prints 55 in Tcl, Objective-C and Visual Basic, yet it takes one command to run in Tcl, two in Objective-C and a project file in Visual Basic. The Language Atlas gives 12 less common languages a short course each, and every example in it shows the commands that ran it and the version of each tool that printed its output, so that you can repeat any run on your own computer.

This lesson shows how the atlas is laid out: the four lessons each language gets, how to read a recorded terminal session: A run of commands typed one after another in a terminal, kept with what each one printed. In a recorded session the lines after $ are the commands to type, and the lines below them are their output. and repeat it, why one Tcl expression prints 9 on one version and 11 on another, and the register that says why a language is in the atlas, waiting for a later edition or left out.

Every atlas language gets the same four lessons

Take Tcl. Its mini-course has four lessons, and every other language of the atlas has the same four, in the same order:

  1. Setup and where it is used. Install the pinned toolchain, check that it reports the pinned version and run a first program.
  2. Idioms, compared with a language you know. Tcl next to Python and Bash, Visual Basic next to C#. Each idiom is a pair of short programs that print the same thing.
  3. The signature feature. What the language does that the one you know does not: for Tcl, its event loop and coroutines.
  4. A project with tests. One small program that uses the first three lessons, with tests that say when it works.

The order follows what each lesson needs. Idioms can only be compared once something runs, the signature feature reads naturally only after the everyday idioms do, and the project needs all three. Step through the four lessons for Tcl, and see where a failing project test sends you:

Interactive · stage by stage The four lessons of one atlas language, followed for Tcl Step through the four lessons in order and see what each one leaves you able to do, then what a failing test sends you back to.
The four lessons of one atlas language, followed for Tcl, step 5 of 5. Showing 1. Setup, 2. Idioms, 3. Signature feature, 4. Project with tests. In focus: back, 2. Idioms.a test fails1. Setuppinned toolchain, first run2. Idiomscompared with one you know3. Signature featurewhat the language is for4. Project with testsall of it in one program

The drawing shows the whole scene; its 5 steps are listed below.

Every step as text
  1. Lesson 1: setup. Lesson 1 installs the pinned toolchain, checks that it reports the pinned version and runs a first program. For Tcl that means tclsh answering with its exact version, such as 9.0.4. The lesson also shows where the language is used, so you know what code you will meet.
  2. Lesson 2: idioms. Lesson 2 meets the language through one you already know: Tcl through Python and Bash, Visual Basic through C#. Each idiom is a pair of short programs that print the same thing, and the traps that change results get runs of their own.
  3. Lesson 3: the feature. Lesson 3 teaches what the language does that the one you know does not: for Tcl its event loop and coroutines, for Ada contracts, for Gleam processes and actors. It is the reason to learn the language at all.
  4. Lesson 4: a project. Lesson 4 builds one small program that uses the first three lessons, with tests that say when it works. For Tcl it is a summariser for timing reports.
  5. When a test fails. A failing project test usually points at an idiom: a division, a comparison or a string length that works differently from the language you know. Go back to lesson 2 for that idiom, fix the line, and run the tests again.

The way back from lesson 4 to lesson 2 is the one you will use most. In a new language, tests rarely fail on syntax, which the compiler or interpreter rejects at once; they fail on an idiom that means something else, such as a division. The twelve languages, with the language each one’s lesson 2 starts from and each one’s signature feature:

Language Lesson 2 starts from Lesson 3, the signature feature
ABAP Java and Python objects, exceptions and unit tests
Visual Basic .NET C# LINQ, XML literals and asynchronous code
Object Pascal Python and C classes, generics and exceptions
Ada C and Java contracts, tasks and a first SPARK proof
Tcl Python and Bash events, coroutines and domain-specific languages
Objective-C Swift and C memory, blocks and calls from Swift
Groovy Java closures, domain-specific languages and static checking
D C, C++ and Python programs that run at compile time
Gleam JavaScript and Python processes, actors and calls into other languages
Nim Python macros, memory and its C and JavaScript back ends
Elm JavaScript The Elm Architecture, JSON and ports
Crystal Ruby macros, fibers and C bindings

The track page lists each language’s four lessons under a module of its own. A capstone module at the end asks for one money-splitting specification in any atlas language.

Checkpoint

Check: The four lessons of each language

  1. Question 1 of 2 A colleague's Tcl script uses coroutines and the event loop, and you have to change it. Which lesson of the Tcl mini-course teaches them?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Lesson 3, the signature feature

    Every atlas language follows the same order: setup, idioms compared with a language you know, the signature feature, and a project with tests. For Tcl the signature feature is its event loop and coroutines.

  2. Question 2 of 2 A test of your lesson-4 project fails: a total comes out one cent lower than the expected value. Where do you look first?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: In the idioms of lesson 2, at the division and rounding of the language you are writing

    In a new language, tests rarely fail on syntax, which the compiler or interpreter rejects at once. They fail on an idiom that means something else, which is why the figure's way back from lesson 4 leads to lesson 2.

A recorded session names its commands and its versions

Here are the three programs of the opening, one per tab. Each says hello and adds the whole numbers 1 to 10; the Visual Basic program comes with its project file, which says how to build it:

One small program in three atlas languages

Tcl · pin/hello.tcl

# Says which Tcl runs it, then adds the whole numbers 1 to 10.
puts "Hello from Tcl [info patchlevel]"
set total 0
for {set n 1} {$n <= 10} {incr n} {
    incr total $n
}
puts "1 + 2 + ... + 10 = $total"

Objective-C · pin/hello.m

// Says hello, then adds the whole numbers 1 to 10.
#import <Foundation/Foundation.h>
#include <stdio.h>

int main(void) {
    @autoreleasepool {
        NSString *greeting = @"Hello from Objective-C";
        printf("%s\n", greeting.UTF8String);
        NSInteger total = 0;
        for (NSInteger n = 1; n <= 10; n++) {
            total += n;
        }
        printf("1 + 2 + ... + 10 = %ld\n", (long)total);
    }
    return 0;
}

Visual Basic · pin/hello/Program.vb

' Says hello, then adds the whole numbers 1 to 10.
Module Program
    Sub Main()
        Console.WriteLine("Hello from Visual Basic")
        Dim total As Integer = 0
        For n As Integer = 1 To 10
            total += n
        Next
        Console.WriteLine($"1 + 2 + ... + 10 = {total}")
    End Sub
End Module

Visual Basic project · pin/hello/Hello.vbproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <OptionStrict>On</OptionStrict>
  </PropertyGroup>

</Project>

None of the three languages runs in the browser here, so this page shows a recorded terminal session instead: each command as it was typed after a $, and below it what the command printed.

The three programs built and run, each tool saying its version first Python · pin_session.py
from session import run

# One small program in three atlas languages. Each tool first says which version it is; then the program is built
# where the language needs a build, and run. The last three lines run one Tcl expression on two versions of Tcl.
run("""
echo 'puts [info patchlevel]' | tclsh9.0
tclsh9.0 pin/hello.tcl
clang --version | head -n 1
clang -fobjc-arc -Wall -Wextra -framework Foundation pin/hello.m -o hello
./hello
dotnet --version
dotnet run --project pin/hello
echo 'puts "[info patchlevel]: 010 + 1 = [expr {010 + 1}]"' | /usr/bin/tclsh
echo 'puts "[info patchlevel]: 010 + 1 = [expr {010 + 1}]"' | tclsh9.0
""")

Output

$ echo 'puts [info patchlevel]' | tclsh9.0
9.0.4
$ tclsh9.0 pin/hello.tcl
Hello from Tcl 9.0.4
1 + 2 + ... + 10 = 55
$ clang --version | head -n 1
Apple clang version 21.0.0 (clang-2100.3.34.2)
$ clang -fobjc-arc -Wall -Wextra -framework Foundation pin/hello.m -o hello
$ ./hello
Hello from Objective-C
1 + 2 + ... + 10 = 55
$ dotnet --version
10.0.401
$ dotnet run --project pin/hello
Hello from Visual Basic
1 + 2 + ... + 10 = 55
$ echo 'puts "[info patchlevel]: 010 + 1 = [expr {010 + 1}]"' | /usr/bin/tclsh
8.5.9: 010 + 1 = 9
$ echo 'puts "[info patchlevel]: 010 + 1 = [expr {010 + 1}]"' | tclsh9.0
9.0.4: 010 + 1 = 11

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 pin_session.py

Read it from the top. Each part starts by asking a tool for its version, and the answer is the toolchain pin: The exact version of the compiler, interpreter or SDK that an example was built and run with, such as Tcl 9.0.4 or the .NET SDK 10.0.401. Another version may print something else for the same file. of what follows: tclsh9.0 answered 9.0.4, clang answered Apple clang version 21.0.0, and dotnet answered 10.0.401. Then come the commands that build and run the program. Tcl runs the script directly. Objective-C, a superset of C, is compiled first: clang writes a program named hello, and the next line runs it. Visual Basic needs its project file, and dotnet run builds the project before it runs it. All three print 55.

Under the session, the page says it was recorded with Python 3.14.8 and gives a Python command. That is the small script that typed the commands and kept what they printed, so the session replays the same way every time. You do not need it to repeat the run: the commands to type are the lines after each $.

Repeating a session takes five moves, and two of them can send you back. Step through them with this session’s own versions:

Interactive · stage by stage Repeating a recorded session on your own computer Step through the five moves from reading a record to comparing your own output with it, and the two ways back when something differs.
Repeating a recorded session on your own computer, step 7 of 7. Showing Read the version lines, Install that version, Ask your tool its version, Type the commands, Compare the output. In focus: other-output, Type the commands.another versionoutput differsRead the version linestclsh9.0 said 9.0.4Install that versionor find one that reports itAsk your tool its versionthe same command, your shellType the commandseach line after a $Compare the outputline by line

The drawing shows the whole scene; its 7 steps are listed below.

Every step as text
  1. Read the record. Start at the top of the session. Its first lines are each tool answering a version question: tclsh9.0 said 9.0.4, clang said Apple clang version 21.0.0, dotnet said 10.0.401. Those are the pins.
  2. Install the version. Install that version, or find out whether one you have reports it. One Mac can hold several Tcls: on the Mac that recorded this session, tclsh9.0 answered 9.0.4 and macOS's own /usr/bin/tclsh answered 8.5.9, which is not the pin.
  3. Ask your tool. Type the same version command in your own terminal and compare its answer with the record before you run anything else.
  4. Another version. If your tool reports another version, go back and install the pinned one. With a different version, a different output tells you nothing about the program: 010 + 1 is 9 on Tcl 8.5.9 and 11 on Tcl 9.0.4.
  5. Type the commands. With the pinned version in place, type each command that follows a $, in the order shown. A build line, such as the clang line, leaves a program behind that the next line runs.
  6. Compare the output. Compare what you see with the recorded output, line by line. The same version and the same output means you have repeated the run.
  7. Output differs. The same version and a different output points at what you typed, the folder you typed it in or the files themselves. Check the command and the file, then type it again.

The version comes first because a run on another version proves nothing about the program, as the next section shows with one line of Tcl.

Repeat the Tcl part

Install Tcl 9 (on a Mac, Homebrew calls the package tcl-tk), save the Tcl tab as hello.tcl, then type echo 'puts [info patchlevel]' | tclsh and tclsh hello.tcl. On Tcl 9.0.4 your output matches the session line for line. On any other version, such as 9.1.0, the hello line names that version instead: the tool changed that line, not the program.

Checkpoint

Check: Reading and repeating a recorded session

  1. Question 1 of 2 In the recorded session, which line tells you which compiler built the Objective-C program?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Apple clang version 21.0.0 (clang-2100.3.34.2)

    Each part of the session starts by asking a tool for its version. The answer is the pin of what follows: tclsh9.0 said 9.0.4, clang said Apple clang version 21.0.0 and dotnet said 10.0.401.

  2. Question 2 of 2 You want to repeat the Visual Basic part of the session on your own computer. What do you type?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: The lines that follow each $: dotnet --version, then dotnet run --project pin/hello

    A terminal session shows each command after a $ and what it printed below it. Repeat it by typing the commands in order, starting with the version question, and compare what you see with the recorded lines.

One Tcl expression, two versions, two answers

The last two lines of the session run the same expression, expr {010 + 1}, on two Tcls of one Mac. macOS still ships Tcl 8.5.9 as /usr/bin/tclsh, while the tclsh9.0 used above is 9.0.4:

Command Version it reports 010 + 1 printed
/usr/bin/tclsh 8.5.9 9
tclsh9.0 9.0.4 11

Neither answer is a bug. Before 9.0, Tcl read a number that starts with 0 as octal, so 010 was eight. The Tcl 9.0 release notes record the change in one line: “0NNN format is no longer octal interpretation. Use 0oNNN”. In Tcl 9, 010 is ten, and an octal number needs the 0o prefix.

So the version is part of an example, as much as the file is. A recorded output is a fact about one version: the same script can print something else on the next release, and you cannot tell which from the output alone. That is why every atlas session starts with the version lines, and why the first check when your output differs is the version, not the program. The 9.0 release notes list other incompatible changes too; the third lesson of this module reads them as a reference reader would.

Key idea

A recorded output is true for the version that printed it: match the version first, then compare the output.

Number Base Converter Convert 10 from octal to decimal and back, to see why Tcl 8 read 010 as eight.

Checkpoint

Check: Why the version is part of an example

  1. Question 1 of 2 What does Tcl 9.0.4 print for expr {010 + 1}?

    Type a number.

    Show the answer: Question 1 of 2

    Answer: 11 printed

    Tcl 9 reads 010 as the decimal number ten, so 010 + 1 is 11. Tcl 8.5.9, which macOS ships as /usr/bin/tclsh, read a leading zero as octal and printed 9.

  2. Question 2 of 2 Your tclsh prints 9 for a line whose recorded output is 11, and info patchlevel says 8.5.9. The page pins 9.0.4. What can you conclude about the program?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Nothing yet: run it on Tcl 9.0.4 first, then compare

    A recorded output is true for the version that printed it. Match the version first; only then does a different output point at the program, the input or the folder.

The register says why a language is in, waiting or out

A language joins the atlas when a free toolchain runs it from a command line, so every example can show a real run that you can repeat, and when its official documentation can be cited. The register keeps every language that was considered, with one of three statuses and the reason for it:

Language Status Why
ABAP In the atlas Its home is inside proprietary SAP systems, but the MIT-licensed abaplint transpiler runs a large part of the language on Node.js
Visual Basic .NET In the atlas The free .NET SDK builds and runs Visual Basic projects, as the session above shows
Objective-C In the atlas Apple clang compiles it, as above; its examples run on macOS only
Tcl In the atlas Its licence lets anyone use, copy and change it and its documentation, without a fee
Standard ML, Smalltalk, Raku, Forth Waiting Considered for a later edition of the atlas, with no date set
VBScript Left out It runs only on Windows, and Microsoft has deprecated it
LabVIEW Left out Its language, G, is graphical: a program is a diagram, not text that a page can show with its output
Solidity Left out A language for smart contracts: code that moves money on a blockchain needs a security-first course of its own
OCaml, Scala, Elixir Left out Each is taught in a track of its own on MySmartCoPilot Learn

ABAP shows that the rules are applied, not assumed. Its own runtime belongs to SAP systems, so it could have been left out with VBScript. Instead its examples run on the abaplint transpiler, a transpiler: A compiler whose output is source code in another high-level language rather than machine code. The abaplint transpiler turns ABAP into JavaScript, which Node.js then runs. that turns ABAP into JavaScript for Node.js, which Exercism’s ABAP test runner also depends on. The choice has a price that the ABAP lessons state: the transpiler takes ABAP 7.02 syntax, newer syntax is converted first, and topics that only an SAP system can show are named as such.

VBScript’s reason comes from Microsoft’s own list of deprecated Windows features:

VBScript is deprecated. In future releases of Windows, VBScript will be available as a feature on demand before its removal from the operating system.

A course about a language on its way out of its only platform would teach towards nothing.

Organisations named on this page

MySmartCoPilot has no link with Apple, Microsoft, SAP, NI, Exercism or any other organisation named in this lesson. Each one is named only as the maker or publisher of a language, a tool or a document.

Checkpoint

Check: The language register

  1. Question 1 of 2 A language can be run only inside one company's paid development tool for one operating system. Where would the register put it?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Left out, because no free toolchain runs it from a command line

    The register puts a language in the atlas when a free toolchain runs it from a command line and its documentation can be cited. A language whose only runtime is a paid tool is left out, with that reason.

  2. Question 2 of 2 ABAP normally runs inside SAP systems, which are proprietary. Why is it in the atlas?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: The MIT-licensed abaplint transpiler turns ABAP into JavaScript that Node.js runs, so its examples can run

    ABAP's place in the register rests on a toolchain, not on its popularity: the abaplint transpiler, an open-source project, runs a large part of the language on Node.js, and Exercism's ABAP test runner depends on its packages too.

Practise: check a run against its record

The exercise turns the five moves of repeating a session into code: find the version in what a tool printed, and compare your output with the record only when the version is the pin. Its sample tests use this lesson’s own session, from the hello programs to 010 + 1 on both Tcls.

Exercise · Easy · Python

Check your own run against a recorded session

You typed the commands of a recorded session on your own computer and want to know whether your run matches the record. Write two functions in run_check.py.

version_of(line) returns the first version number in a line that a tool printed when asked for its version: one or more digits, then one or more groups of a dot and digits. It returns None when the line holds no version.

  • version_of("9.0.4") is "9.0.4", what tclsh9.0 printed for info patchlevel.
  • version_of("Apple clang version 21.0.0 (clang-2100.3.34.2)") is "21.0.0".
  • version_of("10.0.401") is "10.0.401", what dotnet --version printed.

check_run(pin, version_line, recorded, mine) compares your run with the record and returns one of three strings:

  • "other version" when the version in version_line is not pin. Compare nothing else: with another version, a different output says nothing about the program.
  • "same" when the version is the pin and the two outputs have the same lines. Spaces at the end of a line, Windows line endings (\r\n) and empty lines at the very end do not count as differences.
  • "other output" when the version is the pin and the outputs differ.

The sample tests use the lesson's own session: the hello programs, and 010 + 1 on Tcl 8.5.9 and Tcl 9.0.4.

Starter code · run_check.py

def version_of(line):
    """Return the first version number in the line, such as "21.0.0", or None when the line has none."""
    # Replace this line with your code.
    return None


def check_run(pin, version_line, recorded, mine):
    """Return "same", "other version" or "other output", as the prompt describes."""
    # Replace this line with your code.
    return "same"
The sample tests · test_run_check.py
from run_check import check_run, version_of


def test_versions_from_the_session():
    """finds the version in what tclsh9.0, clang and dotnet printed"""
    assert version_of("9.0.4") == "9.0.4"
    assert version_of("Apple clang version 21.0.0 (clang-2100.3.34.2)") == "21.0.0"
    assert version_of("10.0.401") == "10.0.401"


def test_no_version_in_the_line():
    """returns None for a line without a version number"""
    assert version_of("zsh: command not found: tclsh") is None


def test_same_run():
    """says "same" for the pinned version and the recorded output"""
    recorded = "Hello from Tcl 9.0.4\n1 + 2 + ... + 10 = 55\n"
    assert check_run("9.0.4", "9.0.4", recorded, recorded) == "same"


def test_other_version_is_checked_first():
    """says "other version" for Tcl 8.5.9, whatever it printed"""
    assert check_run("9.0.4", "8.5.9", "11\n", "9\n") == "other version"
    assert check_run("9.0.4", "8.5.9", "11\n", "11\n") == "other version"


def test_other_output():
    """says "other output" when the version is the pin and a line differs"""
    assert check_run("9.0.4", "9.0.4", "010 + 1 = 11\n", "010 + 1 = 9\n") == "other output"


def test_line_ends_do_not_count():
    """ignores spaces at the ends of lines, Windows line endings and a missing last newline"""
    recorded = "Hello from Visual Basic\n1 + 2 + ... + 10 = 55\n"
    mine = "Hello from Visual Basic  \r\n1 + 2 + ... + 10 = 55"
    assert check_run("10.0.401", "10.0.401", recorded, mine) == "same"
A hint

Check the version first and return straight away when it is not the pin. For the outputs, compare lists of lines: text.splitlines() already treats \r\n as a line break, and line.rstrip() drops the spaces at the end of a line.

The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.

Then work through the self-check on the four ideas of this lesson, from the four lessons of a mini-course to the register. It begins with the idea your earlier answers show you know least:

Practice that adapts to you

Practise this lesson

10 questions about 4 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.

  1. Question 1 of 10 Which lesson comes first in every atlas mini-course?

    Choose one answer.

    Show the answer: Question 1 of 10

    Answer: Setup, the pinned toolchain and where the language is used

    The order is setup, idioms, the signature feature and a project with tests, the same for all twelve languages.

  2. Question 2 of 10 You maintain Visual Basic code and already have the .NET SDK installed. What is the quickest sound way into the VB.NET mini-course?

    Choose one answer.

    Show the answer: Question 2 of 10

    Answer: Check that dotnet --version reports the pinned SDK, then start at lesson 2

    Lesson 1 sets up the toolchain. If yours is in place, confirm its version against the pin and go on to the idioms, which is where a maintainer gains the most.

  3. Question 3 of 10 The note under the terminal session says it was recorded with Python 3.14.8. What does that mean?

    Choose one answer.

    Show the answer: Question 3 of 10

    Answer: A small Python script typed the session's commands and kept what they printed; the tools' own versions are in the session

    Terminal sessions are replayed by a small Python script, so the note under them names that script's Python. The commands to type are the lines after each $, and the pins are the versions the tools report at the top.

  4. Question 4 of 10 Why does the Objective-C part of the session take two commands when the Tcl part takes one?

    Choose one answer.

    Show the answer: Question 4 of 10

    Answer: clang first builds a program named hello, and the second line runs it; tclsh9.0 runs the script directly

    A language that is compiled ahead of time needs a build line before the run line: clang writes hello, then ./hello runs it. Visual Basic's dotnet run does both in one command, after reading the project file.

  5. Question 5 of 10 What is a toolchain pin?

    Choose one answer.

    Show the answer: Question 5 of 10

    Answer: The exact version of the compiler, interpreter or SDK that an example ran with, such as Tcl 9.0.4

    A pin is an exact version, such as Tcl 9.0.4 or the .NET SDK 10.0.401. A recorded output is true for that version, and the first step of repeating it is to check that your tool reports the same one.

  6. Question 6 of 10 macOS's /usr/bin/tclsh reports 8.5.9. What does it print for expr {010 + 1}?

    Type a number.

    A hint

    Before Tcl 9.0, a number that starts with 0 is read in another base.

    Show the answer: Question 6 of 10

    Answer: 9 printed

    Tcl 8 read a leading zero as octal, so 010 is eight and 010 + 1 is 9. Tcl 9.0 changed that: there 010 is ten and the same line prints 11.

  7. Question 7 of 10 A teammate's tool reports exactly the pinned version, yet one line of their output differs from the record. Where do you look next?

    Choose one answer.

    Show the answer: Question 7 of 10

    Answer: At what they typed, the folder they typed it in and the files themselves

    Repeat runs in order: version first, then the commands, then the output. A matching version with a different output points at the command, the folder or the files.

  8. Question 8 of 10 Which statuses can a language have in the register? Choose every one.

    Choose every answer that is right.

    Show the answer: Question 8 of 10

    Answer:

    • Left out, with a reason
    • In the atlas
    • Waiting for a later edition

    Every language that was considered has one of three statuses, in the atlas, waiting or left out, and a reason for it.

  9. Question 9 of 10 Why is VBScript left out of the atlas?

    Choose one answer.

    Show the answer: Question 9 of 10

    Answer: It runs only on Windows, and Microsoft has deprecated it

    The register leaves VBScript out because it runs only on Windows and is deprecated there, so it fails the free-toolchain test and has no future to teach towards.

  10. Question 10 of 10 OCaml is less common than Python and has a free compiler. Why is it not in the atlas?

    Choose one answer.

    Show the answer: Question 10 of 10

    Answer: It has a track of its own on MySmartCoPilot Learn

    The register's left-out row for OCaml, Scala and Elixir gives one reason: each is taught in a track of its own, in more depth than a four-lesson mini-course.

Interview questions

Warm-up (fresher to mid-level): What is a toolchain pin, and why does a recorded output need one?

A toolchain pin is the exact version of the compiler, interpreter or SDK that a program was built and run with, such as Tcl 9.0.4 or the .NET SDK 10.0.401. A recorded output is only true for that version: expr {010 + 1} prints 9 on Tcl 8.5.9 and 11 on Tcl 9.0.4, because Tcl 9 stopped reading a leading zero as octal. Without the pin, someone who gets a different answer cannot tell whether the program, the input or the tool changed. With it, the first check takes a second: ask the tool for its version and compare. Teams pin toolchains in files for the same reason, such as a global.json that names the .NET SDK, so that a laptop and a build server use the same compiler.

Two more questions about repeatable runs, of the kind a team asks someone who will own a build:

Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.

  1. Fresher to senior

    A script in your pull request prints an invoice total of 1,184 cents on your laptop, but a teammate running the same commit gets 1,183. How do you find out whether the toolchain, the input or the code causes it, and how do you stop it happening again?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  2. Mid to senior

    Your team's build calls tclsh to generate a report. On one build agent tclsh is Tcl 8.5.9, on the others Tcl 9.0.4, and the reports differ. How do you find this quickly, and how do you make every agent use one Tcl?

    Model answer, Pro. First step and follow-ups

Flashcards · 7 cards

Recall it, then check

Say the answer to yourself before you look: recalling it is what makes it stick.

  1. Which four lessons does every Language Atlas language get, in which order?

    Setup and where the language is used, its idioms next to a language you already know, its signature feature, and then a small project with tests. Each lesson relies on the ones before it.

  2. In a recorded terminal session, which lines are the commands to type?

    The lines that follow a $. What sits under a command is its output, and every session opens by asking each tool for its version.

  3. Your output differs from a recorded run. What do you compare first?

    The version the tool reports against the pin of the session. An output only holds for the version that printed it, so a run on another version says nothing about the program yet.

  4. What does expr {010 + 1} print on Tcl 8.5.9, and on Tcl 9.0.4?

    9 on Tcl 8.5.9, which takes a leading 0 to mean octal, and 11 on Tcl 9.0.4, where 010 is ten. Tcl 9 spells octal with the prefix 0o.

  5. What does a language need before it can join the atlas?

    A free toolchain that runs it from a command line, so that each example can show a real run you can repeat, and official documentation to cite.

  6. How can the atlas teach ABAP without an SAP system?

    Its examples run on the MIT-licensed abaplint transpiler, which turns ABAP into JavaScript for Node.js. The price: it reads 7.02 syntax, and topics only an SAP system can show are marked as such.

  7. Why is VBScript left out of the atlas?

    It runs only on Windows, and Microsoft lists it as deprecated, to become a feature on demand before it is removed. A course would teach towards a language that is leaving its only platform.

Key takeaways

  • Every atlas language gets four lessons in the same order: setup, idioms compared with a language you know, the signature feature, and a project with tests.
  • A recorded session starts with each tool’s version, and the lines after each $ are the commands to type.
  • Repeat a run in order: match the version first, then type the commands, then compare the output line by line.
  • The same Tcl expression, 010 + 1, prints 9 on Tcl 8.5.9 and 11 on Tcl 9.0.4, so the version is part of every example.
  • The register gives every language that was considered a status and a reason: in the atlas, waiting for a later edition, or left out.

Terms in this lesson

terminal session
A run of commands typed one after another in a terminal, kept with what each one printed. In a recorded session the lines after $ are the commands to type, and the lines below them are their output.
toolchain pin
The exact version of the compiler, interpreter or SDK that an example was built and run with, such as Tcl 9.0.4 or the .NET SDK 10.0.401. Another version may print something else for the same file.
transpiler
A compiler whose output is source code in another high-level language rather than machine code. The abaplint transpiler turns ABAP into JavaScript, which Node.js then runs.

References

Related tools

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.