{"id":26180514,"url":"https://github.com/timandy/routinex","last_synced_at":"2025-12-25T11:17:20.261Z","repository":{"id":280973596,"uuid":"943080909","full_name":"timandy/routinex","owner":"timandy","description":"The toolexec tool of routine.","archived":false,"fork":false,"pushed_at":"2025-08-18T03:04:57.000Z","size":41,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-18T04:14:03.504Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timandy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-05T06:16:16.000Z","updated_at":"2025-08-18T02:54:04.000Z","dependencies_parsed_at":"2025-03-06T10:28:04.124Z","dependency_job_id":"b9931996-6155-4616-b082-eb3e1578fdf4","html_url":"https://github.com/timandy/routinex","commit_stats":null,"previous_names":["timandy/routinex"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/timandy/routinex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timandy%2Froutinex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timandy%2Froutinex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timandy%2Froutinex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timandy%2Froutinex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timandy","download_url":"https://codeload.github.com/timandy/routinex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timandy%2Froutinex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28027866,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-25T02:00:05.988Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-11T21:56:11.898Z","updated_at":"2025-12-25T11:17:20.239Z","avatar_url":"https://github.com/timandy.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RoutineX Compiler\n\n[![Build Status](https://github.com/timandy/routinex/actions/workflows/build.yml/badge.svg)](https://github.com/timandy/routinex/actions)\n[![Codecov](https://codecov.io/gh/timandy/routinex/branch/main/graph/badge.svg)](https://app.codecov.io/gh/timandy/routinex)\n[![Go Report Card](https://goreportcard.com/badge/github.com/timandy/routinex)](https://goreportcard.com/report/github.com/timandy/routinex)\n[![Documentation](https://pkg.go.dev/badge/github.com/timandy/routinex.svg)](https://pkg.go.dev/github.com/timandy/routinex)\n[![Release](https://img.shields.io/github/release/timandy/routinex.svg)](https://github.com/timandy/routinex/releases)\n[![License](https://img.shields.io/github/license/timandy/routinex.svg)](https://github.com/timandy/routinex/blob/main/LICENSE)\n\n\u003e [中文版](README_zh.md)\n\n**`RoutineX`** is a compilation tool designed to enhance the goroutine capabilities of the `runtime` package in `Golang` standard library.\n\nAs a compilation tool for the `routine` static mode, it supports advanced features such as native goroutine-local storage (`TLS`).\n\nThis enables `routine` in static mode to achieve higher performance and a safer memory access mechanism.\n\n## :house:Introduction\n\nIn the normal mode, `routine` stores the `labelMap` and goroutine context data in the `g.labels` field based on the structure layout.\n\nThis requires additional validation and judgment during reading and inheritance, which impacts performance and may not be compatible with future go versions.\n\nTo further improve performance and compatibility, the `RoutineX` compiler uses source code enhancement techniques to export some functions at the lower level,\nallowing `routine` to efficiently and safely access the data of the goroutine structure `g`.\n\n## :hammer_and_wrench:Usage Instructions\n\n### Installation\n\n```shell\ngo install -a github.com/timandy/routinex@latest\n```\n\nBefore calling, you need to set the environment variable to append `$(go env GOPATH)/bin` to `PATH`, so that `routinex` can be run directly in the console.\n\n- windows\n\n```powershell\n#!/bin/pwsh\n\n$env:Path=\"$env:Path;$(go env GOPATH)\\bin\"\n```\n\n- linux\n\n```shell\n#!/bin/bash\n\nexport PATH=\"$PATH:$(go env GOPATH)/bin\"\n```\n\n### Enable Debugging\n\nUsing debugging parameters can output logs from `routinex`.\n\n- `--debug` or `-d` outputs detailed logs.\n- `--verbose` or `-v` outputs brief logs.\n\n- windows\n\n```powershell\n#!/bin/pwsh\n\n# Set environment variable\n$env:Path=\"$env:Path;$(go env GOPATH)\\bin\"\n# Add parameters\ngo build -a -toolexec='routinex -v' -o main.exe .\n```\n\n- linux\n\n```shell\n#!/bin/bash\n\n# Set environment variable\nexport PATH=\"$PATH:$(go env GOPATH)/bin\"\n# Add parameters\ngo build -a -toolexec='routinex -v' -o main.exe .\n```\n\n### Multiple Toolchains\n\nIf you have already used another toolchain before using `routinex`, take `abc` as an example.\n\nSince it cannot be guaranteed that `abc` has chain transfer functionality, `routinex` should be placed before the `abc` toolchain.\n\nAfter `routinex` is executed, it will automatically call the `abc` tool.\n\n- windows\n\n```powershell\n#!/bin/pwsh\n\n# Set environment variable\n$env:Path=\"$env:Path;$(go env GOPATH)\\bin\"\n# Add parameters\ngo build -a -toolexec='routinex -v abc' -o main.exe .\n```\n\n- linux\n\n```shell\n#!/bin/bash\n\n# Set environment variable\nexport PATH=\"$PATH:$(go env GOPATH)/bin\"\n# Add parameters\ngo build -a -toolexec='routinex -v abc' -o main.exe .\n```\n\n## :bulb:Implementation Principle\n\n[See](docs/PRINCIPLE.md)\n\n## :rocket:Performance Improvement\n\n[See](docs/PERFORMANCE.md)\n\n## :scroll:*License*\n\n`RoutineX`is released under the [Apache License 2.0](LICENSE).\n\n```\nCopyright 2021-2025 TimAndy\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimandy%2Froutinex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimandy%2Froutinex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimandy%2Froutinex/lists"}