Skip to content

Latest commit

 

History

History
128 lines (101 loc) · 4.36 KB

File metadata and controls

128 lines (101 loc) · 4.36 KB

So by example

A hands-on introduction to Solod (So) — a subset of Go that translates to C.

This repo contains small examples that show individual language, concurrency, stdlib, and safety features, as well as larger apps that demonstrate how everything fits together.

Language

Hello worldValuesVariablesConstantsForIf/elseSwitchArraysSlicesMapsFunctionsMultiple returnsVariadic functionsFor-rangePointersStrings and runesStructsMethodsInterfacesEnumsErrorsPanicDefer

Concurrency

ThreadsChannelsChannel synchronizationChannel bufferingChannel timeoutNon-blocking channelsClosing channelsWorker poolsWorker pools w/channelsMutexesAtomic counters

Standard library

MemoryC interopSlicesMapsStringsTimeUnix timeTime formatRandom numbersNumber parsingSortingCustom sortJSONReading filesWriting filesScanningFile pathsDirectoriesTemp filesTestingBenchmarking Command lineEnv variablesLoggingTCP serverExit

Safety

Dangling pointerDivide-by-zeroMemory leakNil dereferencePanic mode

Apps

Coreutils: cat, cut, head, sort, uniq, wc

Count word frequencies by serge-hulne

Curl interop

DuckDB shell by Lorenzo Mangani

FreeSWITCH module by seven1240

Key-value store with SQLite interop

Reverse lines in file

TCP echo server and client.

Running the code

To run a specific example locally, use the so run command. For example:

so run lang/05-for
so run apps/head -n 4 data/jenny.txt

You'll need to have a C compiler installed and available as cc, or you can set a custom compiler by using the CC environment variable.

To see the generated C code, use the so translate command. For example:

so translate -o lang/05-for/generated lang/05-for

Partially based on Go by Example by Mark McGranaghan, licensed under CC BY 3.0.