Overview of the ***plain specification language
***implementation reqs***
- :Implementation: should be in Python.
***functional specs***
- Display "hello, world"website·Indexed 32 days ago
https://www.plainlang.org/A language for creating machine-checkable software specifications using .plain files. It features a specialized :Concept: notation to eliminate natural language ambiguity, supporting functional specifications, implementation requirements, acceptance tests, and conformance testing to turn specifications into working code.
***implementation reqs***
- :Implementation: should be in Python.
***functional specs***
- Display "hello, world"The Plainlang toolkit enables a specification-driven development cycle where software is generated from .plain specs. The workflow consists of three main phases:
plain-forge to describe requirements. The tool interviews the user to author and maintain accurate .plain specifications.pyro to read the specifications, resolve module dependencies, and generate both the implementation code and the corresponding conformance tests.plain-forge ensures consistency, and pyro regenerates the software. This approach ensures bugs are traced back and fixed in the specification rather than the generated code.***implementation reqs***
- :Implementation: should be in Python.
***functional specs***
- Display "hello, world"***definitions***). This separates the vocabulary from the functional specifications and allows tools to detect typos or missing definitions early.***definitions***
- :App: is a Python console application.
- :Task: describes an activity that needs to be done by the user.
***functional specs***
Write :App: for managing :Task: items.The following terms define the core components and roles within a ***plain specification:
exported_concepts: section declares which concepts from the current module are visible to modules that require it. This allows a module to provide shared concept definitions to subsequent modules without needing a separate shared-only file.requires:
- authentication-module
- database-layer
exported_concepts:
- :PasswordManagerModule:To prevent ambiguity in software specifications, ***plain uses a dedicated notation where concept names are enclosed in colons (e.g., :Concept:). This allows developers to mark specific terms as stable units of meaning while leaving the rest of the prose flexible.
Constraints:
:Task: and :Tasks: are treated as two distinct concepts. Plurality should be expressed in the surrounding text (e.g., :Task: items).- :App: is a Python console application.
- :Task: describes an activity that needs to be done by the user.
Write :App: for managing :Task: items.The Plainlang toolkit consists of two primary tools that automate the transition from requirements to implementation:
.plain specifications and ensures these specs remain accurate as the software evolves..plain specifications, resolves module dependencies, and generates the implementation code along with conformance tests to verify the code against the specs.Development Lifecycle:
plain-forge to write the specification.pyro to generate code and tests.plain-forge when requirements change; pyro then regenerates the software. Bug fixes are applied to the specification rather than the generated code.In ***plain, concept names are case-sensitive and must be enclosed in colons (e.g., :Task:). A difference in casing (e.g., :Task: vs :task:) denotes two distinct concepts. Concept names can consist of any combination of the following ASCII characters:
+, ASCII 43)-, ASCII 45)., ASCII 46)_, ASCII 95)Space characters are prohibited to ensure simple and robust programmatic detection and validation.
:Task: // Valid
:user_id: // Valid
:Task-1.0+: // Valid
:My Task: // Invalid (contains space)