Installation Guide
System Requirements
- Operating System: Windows 10+, macOS 10.15+, or Linux (Ubuntu 20.04+)
- Memory: 2GB RAM minimum (4GB recommended)
- Disk Space: 500MB free space
- Dependencies: Python 3.8+ (for runtime execution)
Download and Installation Steps
Windows
# Download the installer
curl -O https://hcl-lang.org/downloads/hcl-windows-x64.exe
# Run the installer
./hcl-windows-x64.exe
# Add to PATH (automatically done by installer)
# Or manually add: C:\Program Files\HCL\bin
macOS
# Using Homebrew
brew tap hcl-lang/hcl
brew install hcl
# Or download directly
curl -O https://hcl-lang.org/downloads/hcl-macos.pkg
sudo installer -pkg hcl-macos.pkg -target /
Linux
# Ubuntu/Debian
wget https://hcl-lang.org/downloads/hcl-linux-amd64.deb
sudo dpkg -i hcl-linux-amd64.deb
# Fedora/RHEL
wget https://hcl-lang.org/downloads/hcl-linux.rpm
sudo rpm -i hcl-linux.rpm
# From source
git clone https://github.com/hcl-lang/hcl.git
cd hcl && make install
Testing Installation
Verify HCL is installed correctly:
hcl --version
# Expected output: HCL version 1.0.0
Setting up PATH
If the hcl command is not recognized, add it to your PATH:
# Linux/macOS (add to ~/.bashrc or ~/.zshrc)
export PATH="$PATH:/usr/local/bin/hcl"
# Windows (PowerShell as Administrator)
[Environment]::SetEnvironmentVariable(
"Path",
$env:Path + ";C:\Program Files\HCL\bin",
"Machine"
)
Syntax & Code
How HCL Interprets Human Prompts
HCL uses natural language processing to convert human-readable instructions into executable code. The language is designed to be intuitive while maintaining precision.
# Basic printing
print "Hello World!"
display "Hello World!"
print "Hello World!" endprint
# Printing using variables
assign "Hello " to x
assign "World!" to y
print x plus y
User Input
get user input and store var1
get input and store var2
Assignment
# Single variable assignment
assign "Hello World!" to var1
make variable var2 equal to "Hello World!"
store "Hello World!" in var3
# Multiple variable assignment (explicit values)
create variables x, y, z and set them to "A", "B", "C"
# Multiple variable assignment (same value)
assign "A" to x, y, z
set x, y, z to "A"
make variables x, y, z equal to "A"
Data Types
# Checking data types
assign 34 to x
type of x
assign 3.14 to y
check type of y
assign "Johnny" to z
check type of z
Random Number
generate a random number between 1 and 10
Casting
# Casting numbers to string
assign 10 to a
convert a to string
assign convert a to string to b
# Casting string to integer
assign "123" to c
convert c to integer
assign convert c to integer to d
# Casting string to float
assign "3.14" to e
convert e to float
assign convert e to float to f
# Casting string to complex number
assign "5+2j" to g
convert g to complex number
assign convert g to complex number to h
# Casting string to list
assign "abc" to i
convert i to list
assign convert i to list to j
# Casting string to tuple
assign "12" to k
convert k to tuple
assign convert k to tuple to l
# Casting string to set
assign "123" to m
convert m to set
assign convert m to set to n
# Casting string to frozenset
assign "123" to o
convert o to frozenset
assign convert o to frozenset to p
# Casting string to boolean
assign "true" to q
convert q to boolean
assign convert q to boolean to r
String Methods
# Slicing and substring
assign "HelloWorld" to d
slice d from 1 to 4
assign slice d from 1 to 4 to a
# Whitespace handling
assign " spaced text " to g
strip whitespace from g
assign strip whitespace from g to b
# Joining and concatenation
assign "hello" to i
assign "world" to j
join string i with j
assign join string i with j to k
# Escaped characters
use escaped characters "line\nnew\ttext"
escape characters "path\to\file"
# Capitalization
assign "hello" to o
capitalize o
assign capitalize o to p
# Encoding
assign "encode_this" to r
encode r
assign encode r to s
# Ends with
assign "filename.txt" to t
check if t ends with ".txt"
assign check if t ends with ".txt" to u
# Expand tabs
expand tabs of "a\tb\tc"
# Alphanumeric check
check if "abc123" alphanumeric
assign check if "abc123" alphanumeric to a
# Alphabetic check
assign "HelloWorld" to v
check if v contains only letters
assign check if v contains only letters to w
# ASCII check
assign "A" to x
check if x ascii
assign check if x ascii to y
# Decimal / digit checks
assign "12345" to y
check if y decimal
assign check if y decimal to z
# Identifier validation
assign "valid_var" to ab
check if ab valid identifier
assign check if ab valid identifier to bc
# Lowercase checks
assign "lowercase" to ad
check if ad lowercase
assign check if ad lowercase to da
# Numeric checks
assign "123" to af
check if af numeric
assign check if af numeric to fa
# Printable characters
assign "Hello" to ah
check if ah printable
assign check if ah printable to ha
# Title case checks
assign "Hello World" to ak
check if ak title case
assign check if ak title case to ka
# Uppercase checks
assign "UPPER" to am
check if am uppercase
assign check if am uppercase to ma
# Join using delimiter
assign "abc" to ao
assign "-" to ap
join ao using ap
assign join ao using ap to op
# Case conversion
assign "SAMPLE" to as
convert as to lowercase
assign convert as to lowercase to sa
# Title case conversion
assign "hello world" to ay
convert ay to title case
assign convert ay to title case to ya
# Uppercase conversion
assign "final text" to ba
convert ba to uppercase
ssign convert ba to uppercase to ab
# String indexing
assign "HELLO" to s
character at index 1 from s
assign character at index 1 from s to u
# Negative indexing
assign "PYTHON" to w
character at negative index 2 from w
assign character at negative index 2 from w to v
# Count occurrences
assign "aaaaab" to s
count "a" in s
assign count "a" in s to t
# Index lookup
assign "abracadabra" to y
find "c" inside y
assign find "c" inside y to z
# String formatting
assign "Hello {}, I m {}" to f
format f using "Swagat", "HCL"
assign format f using "Swagat", "HCL" to a
Boolean Methods
assign 5 to x
evaluate boolean of x
Basic Arithmetic
# Addition
assign 5 to a
add a and 10
assign add a and 10 to b
# Subtraction
assign 3 to f
subtract 10 from f
# Multiplication
assign 6 to k
multiply k by 3
assign multiply k by 3 to l
# Division
assign 20 to p
divide p by 4
assign divide p by 4 to q
# Modulus
assign 17 to t
set remainder of t by 3
# Floor Division
assign 17 to c1
floor divide c1 by 3
assign floor divide c1 by 3 to c2
Full Arithmetic Operations
# Addition with assignment
assign 10 to g1
increase g1 by 5
# Subtraction with assignment
assign 20 to k1
subtract 5 from k1
# Multiplication with assignment
assign 3 to o1
multiplication with assign o1 by 4
# Division with assignment
assign 30 to r1
division with assign r1 by 5
# Modulus with assignment
assign 14 to u1
set remainder of u1 by 5
# Floor division with assignment
assign 20 to x1
floor division x1 by 3
# Power with assignment
assign 2 to a2
raise a2 to power 8
# Bitwise AND
assign 12 to d2
and operator bitwise d2 with 6
# Bitwise OR
assign 6 to h2
or operator bitwise h2 with 3
# Bitwise XOR
assign 7 to l2
xor operator bitwise l2 with 2
# Shift right
assign 16 to p2
shift p2 right by 2
# Shift left
assign 5 to t2
shift t2 left by 3
# Equality
assign 5 to x2
check if x2 equals 5
assign check if x2 equals 5 to x3
# Not equal
assign 10 to b3
check if b3 is not equal to 3
assign check if b3 is not equal to 3 to b4
# Greater than
assign 8 to e3
check if e3 is greater than 4
assign check if e3 is greater than 4 to e4
# Less than
assign 4 to h3
check if h3 is less than 9
assign check if h3 is less than 9 to h4
# Greater or equal
assign 10 to k3
check if k3 is greater than or equal to 9
assign check if k3 is greater than or equal to 9 to k4
# Less or equal
assign 5 to n3
check if n3 is less than or equal to 9
assign check if n3 is less than or equal to 9 to n4
# Logical AND
assign 1 to x3
assign 0 to y3
x3 and y3 only
assign x3 and y3 only to z3
# Logical OR
assign 1 to b4
assign 0 to c4
b4 or c4
assign b4 or c4 to d4
# Not / identity / membership
assign 5 to h4
assign 7 to i4
h4 is not i4
assign h4 is not i4 to j4
# Identity and membership (positive)
assign 5 to v4
assign 5 to w4
v4 is equal to w4
assign v4 is equal to w4 to x4
List Methods
# Setting list items
assign [10,20,30] to i
i[0] = 5
# List slicing (negative)
assign [1,2,3,4,5,6] to p
take negative slice p starting 5 from end until 2
assign take negative slice p starting 5 from end until 2 to q
# List slicing
assign [1,2,3,4,5] to t
slice list t from 1 to 4
assign slice list t from 1 to 4 to u
# List contains
assign ["apple","banana"] to x
"banana" in x
assign "banana" in x to y
# Extend list
assign [10,20] to e1
e1.extend([30,40])
# Sort list
assign [3,1,2] to k1
sort k1
# Pop last item
assign [1,2,3] to p1
pop from p1
assign pop from p1 to p2
# Join lists using plus
assign [1,2] to a2
assign [3,4] to b2
join a2 to b2 lists
assign join a2 to b2 lists to c2
# Append item
assign [1,2] to e2
append 3 to e2
# Extend list with another list
assign ["a"] to i2
join ["b","c"] into i2
# Create list using constructor
assign "abc" to k2
convert k2 to list
# Delete entire list
assign ["a","b"] to p2
remove list p2
# Sort list in descending order
assign [3,1,2] to r2
sortreverse r2 descending order
# Reverse list
assign [1,2,3] to v2
reverse v2
# Get item using negative index
assign [10, 20, 30, 40] to a
get item at negative index 1 from a
assign get item at negative index 1 from a to b
# Get item by index
assign [5, 6, 7, 8] to nums
get item at index 2 from nums
assign get item at index 2 from nums to val
# Append element
assign [1, 2, 3] to l
append 4 to l
# Get index of item
assign ["apple", "banana", "mango"] to fruits
get index of "banana" from fruits
# Count occurrences
assign [1, 2, 2, 2, 3] to nums
count 2 in nums
assign count 2 in nums to c
Tuple Methods
# Tuple slicing
assign (1,2,3,4,5) to g
tuple slice g from 1 to 4
assign tuple slice g from 1 to 4 to h
# Tuple slice from start
assign ("a","b","c","d") to j
tuple slice j till 2
assign tuple slice j till 2 to k
# Tuple slice to end
assign (1,2,3,4,5) to m
tuple slice m from 2
assign tuple slice m from 2 to n
# Tuple contains
assign (11,22,33) to r
22 in r
assign 22 in r to s
# Remove item from tuple via list
assign (10,20,30) to u
removing list 20 from tuple u
assign removing list 20 from tuple u to v
# Add tuple to tuple
assign ("a","b") to y
assign ("c","d") to z
join tuple y with z
assign join tuple y with z to x
# Multiply tuple
assign (1,2) to g1
repeat tuple g1 3 times
assign repeat tuple g1 3 times to g2
# Tuple type check
assign (1,2,3) to j1
check if j1 is it tuple
assign check if j1 is it tuple to j2
# Convert tuple to list
assign (1,2,3) to m1
conversion of tuple m1 to list
assign conversion of tuple m1 to list to m2
# Convert list to tuple
assign ["a","b"] to q1
change q1 to tuple
assign change q1 to tuple to q2
# Join tuples
assign (1,2) to s1
assign (3,4) to t1
join tuple s1 and t1
assign join tuple s1 and t1 to u1
# Get tuple item by index
assign (10, 20, 30, 40) to t
get item at index 2 from t
assign get item at index 2 from t to u
# Get tuple item using negative index
assign (5, 6, 7, 8) to a
get item at negative index 1 from a
assign get item at negative index 1 from a to b
# Add item to tuple via list
assign (10, 20, 30) to t
adding list [40] to tuple t
assign adding list [40] to tuple t to u
# Add single item to tuple
assign (1, 2, 3) to t
let tuple item 3 to t
assign let tuple item 3 to t to u
# Tuple unpacking (exact)
assign (10, 20, 30) to t
tuple t to variables x, y, z
# Count occurrences
assign ("apple", "chocolate", "apple", "banana", "apple") to grocery
count "apple" in grocery
assign count "apple" in grocery to count
Set and Frozenset Methods
# Set contains
assign {1,2,3} to a
check if 2 in set a
assign check if 2 in set a to b
# Set symmetric difference
assign {1,2,3} to c1
assign {3,4,5} to d1
symmetric difference of c1 and d1
# Set intersection
assign {1,2,3} to w
assign {2,3,4} to x
common items in w and x
assign common items in w and x to y
# Set difference
assign {1,2,3,4} to o1
assign {2,4} to p1
difference of o1 and p1
# Set difference update
assign {"a","b","c"} to w1
assign {"b"} to x1
difference update set w1 using x1
# Set intersection update
assign {"a","b","c"} to l2
assign {"b"} to m2
intersection update set l2 using m2
# Set is disjoint
assign {1,2,3} to p2
assign {4,5,6} to q2
check if set p2 disjoint with q2
assign check if set p2 disjoint with q2 to r2
# Set subset check
assign {1,2} to v2
assign {1,2,3} to w2
is set v2 contained in w2
assign is set v2 contained in w2 to x2
# Set symmetric difference update
assign {1,2} to t3
assign {2,3} to u3
update set t3 with symmetric difference of u3
# Union with assignment
assign {1,2} to z3
assign {2,3} to a4
combine all elements of set z3 and a4 to result
# Set update
assign {1} to d4
assign {1,2,3} to e4
merge set e4 into set d4
# Discard item from set
assign {10,20,30,40} to nums
discard 40 from set nums
# Set union
assign {1,2,3} to a
assign {3,4,5} to b
combine all elements of set a and b to c
# Create frozenset
assign [1,2,3] to j4
make frozenset from j4
assign make frozenset from j4 to j5
# Frozenset union
assign frozenset({1,2}) to n4
assign frozenset({2,3}) to o4
combine frozensets n4 and o4
assign combine frozensets n4 and o4 to m4
# Frozenset is disjoint
assign frozenset({"x"}) to n5
assign frozenset({"y"}) to o5
do frozensets n5 and o5 share no elements
assign do frozensets n5 and o5 share no elements to p5
# Frozenset subset check
assign frozenset({1}) to p5
assign frozenset({1,2}) to q5
is frozenset p5 contained in q5
assign is frozenset p5 contained in q5 to r5
Dictionaries
# Dictionary length
assign {"a":1,"b":2,"c":3} to g
length of g
assign length of g to h
# Dictionary type check
assign {"id":101,"name":"Sam"} to j
type of j
# Get item by key
assign {"name":"John","age":30} to m
get value for key "name" from dict m
assign get value for key "name" from dict m to n
# Get item safely
assign {"name":"Alice","country":"UK"} to p
get value for key "country" from dict p safely
assign get value for key "country" from dict p safely to q
# Check if key exists
assign {"user":"Tom","role":"admin"} to s
check if key "role" exists dict s
assign check if key "role" exists dict s to t
# Get dictionary keys
assign {"name":"Mia","age":22} to u
get all keys inside dict u
assign get all keys inside dict u to v
# Get dictionary values
assign {"name":"Mia","age":22} to x1
get all values inside dict x1
assign get all values inside dict x1 to y1
# Get dictionary items
assign {"name":"Mia","age":22} to a2
get items dict a2
assign get items dict a2 to b2
# Set item in dictionary
assign {"name":"John","age":25} to d2
set key "age" to 30 in dict d2
# Update dictionary
assign {"a":1,"b":2} to g2
assign {"c":3} to h2
update dict g2 with h2
# Set default value
assign {"a":1} to q2
set default value for key "b" in dict q2
# Pop key from dictionary
assign {"name":"John","age":30} to t2
pop key "age" from dict t2
# Delete key
assign {"name":"Tom","age":40} to z3
delete key "age" from dict z3
# Delete dictionary
assign {"x":10} to d4
remove dict d4
# Clear dictionary
assign {"a":1,"b":2,"c":3} to f4
clear f4
# Copy dictionary
assign {"name":"Sam","age":21} to i4
make a copy of dict i4 to j4
Conditionals
# if statement
assign 33 to x
assign 66 to y
if y > x then print "y is greater than x" end if
# elif statement
assign 33 to x
assign 33 to y
if y > x then print "y is greater than x" elif y == x then print "x and y are equal" end if
assign 75 to score
if score >= 90 then print "A GRADE" elif score >= 80 then print "B GRADE" elif score >= 70 then print "C GRADE" elif score >= 60 then print "D GRADE" end if
# else statement
assign 400 to x
assign 99 to y
if y > x then print "y is greater than x" elif y == x then print "x and y are equal" else then print "x is greater than y" end if
assign 120 to n
if n % 2 == 0 then print "n is even number" else print "n is odd number" end if
# Nested if inside if
assign 11 to x
assign 4 to y
if x > 10 then if y > 5 then print "x big and y big" else print "x big but y small" end if end if
# Conditional with loop
assign 11 to x
if x == 11 then for i in range(0,5) then print i end for end if
# Conditional with nested while
assign 0 to y
if y < 5 then while y < 5 do print y; y += 1 end while end if
# Conditional with function definition
assign 5 to y
assign "Hello World!" to msg
if y == 5 then define function show with msg then print msg end function end if
Loops
# Basic for loop
for i in range(0,10) then print i end for
# Break Statement
assign ["apple", "banana", "cherry", "graphs", "mango"] to fruits
for i in fruits then if i == "cherry" then break end if print i end for
# Continue Statement
assign ["apple", "banana", "cherry", "graphs", "mango"] to fruits
for i in fruits then if i == "cherry" then continue end if print i end for
# Nested for loop
for i in range(0,3) then for j in range(0,2) then print i; print j end for end for
# Nested for with mixed execution
for i in range(0,3) then for j in range(0,2) then print j end for print i end for
# For loop with conditional
for i in range(0,5) then if i % 2 == 0 then print "even" else print "odd" end if end for
# For loop with nested while
for i in range(0,3) then while i < 3 then print i; break end while print "i is incremented by for loop" end for
# For loop defining function
for i in range(0,3) then define function show with msg then print msg end function end for
# Basic while loop
assign 1 to x
while x < 5 do print x; x += 1 end while
# Nested while loop
assign 1 to x
assign 1 to y
while x < 5 do assign 1 to y; while y < 5 do print y; y += 1 end while x += 1 end while
# While loop with conditional and break
assign 0 to x
while x < 5 do if x == 3 then print "three"; break else print "not three" end if x += 1 end while
# While loop with for loop inside
assign True to flag
while flag == True do for i in range(0,3) then print i end for break end while
# While loop defining function
assign True to flag
while flag == True do define function toggle then print flag end function break end while
Functions
# Create a Function
define function HCL then print "Hello this is HCL function" end function
# Call a Function
call HCL
# Function with parameters
define function Greet with msg then print msg end function
call Greet with "Hello World!"
define function fullName with fname, lname then print fname+lname end function
call fullName with "Peter", "Parker"
call fullName with "Flash", "Thomson"
# Function with statements
define function whether with temp then if temp >= 30 then print "Sunny" else print "Not Sunny" end if end function
assign 40 to temperature
call whether with temperature
# Function with loops
define function car with model then for carname in model then print carname end for end function
assign ["Lambo", "BMW", "Bugatti", "Mercedes"] to Mymodel
call car with Mymodel
OOP - (Object Oriented Programming)
# Create Class
class greetings then print "Hello this is class created in HCL." end class
# Access Class via Object
class ageinfo then assign 22 to Manish; assign 20 to Swagat; assign 21 to Rohan end class
create object age from class ageinfo
print age.Manish
print age.Swagat
print age.Rohan
# Delete Object
class myclass then assign "Data" to x end class
create object myobj from class myclass
remove object myobj
DSA - (Data Structures and Algorithms)
Code Execution
HCL code is compiled and executed through the HCL compiler:
# Save your code in a .hcl file
# example.hcl
assign 10 to x
if x > 5 then print "Large"
# Run it
hcl run example.hcl
Examples
Arithmetic Operations
assign 10 to a
assign 5 to b
add a and b, store in sum
subtract b from a, store in difference
multiply a by b, store in product
divide a by b, store in quotient
print sum # Output: 15
print difference # Output: 5
print product # Output: 50
print quotient # Output: 2
Working with Variables
set name to "John Doe"
set age to 25
set is_student to true
print "Name: " + name
print "Age: " + age
print "Student: " + is_student
Control Flow
assign 85 to score
if score >= 90 then
print "Grade: A"
else if score >= 80 then
print "Grade: B"
else if score >= 70 then
print "Grade: C"
else
print "Grade: F"
Lists and Collections
create list with 1, 2, 3, 4, 5 and store as numbers
add 6 to numbers
print numbers # Output: [1, 2, 3, 4, 5, 6]
for each num in numbers
print num
Dictionaries
create dictionary as person
set person["name"] to "Alice"
set person["age"] to 30
set person["city"] to "New York"
print person["name"] # Output: Alice
Simple Project: Temperature Converter
# Temperature Converter
print "Enter temperature in Celsius:"
get input and store as celsius
# Convert to Fahrenheit
multiply celsius by 9/5
add 32 to result
store result as fahrenheit
print "Temperature in Fahrenheit: " + fahrenheit
HCL AI Prototype
The HCL AI Prototype is a specialized chatbot fine-tuned specifically for the Human Centric Language (HCL). Unlike general-purpose AI systems, this model is trained on structured HCL grammar, semantic rules, compiler behavior, and execution patterns.
It acts as an intelligent programming assistant that understands user intent and generates valid HCL instructions that compile seamlessly within the HCL ecosystem.
Why This Prototype Matters
HCL already removes strict syntax barriers through natural-language instructions. The AI prototype takes this further by introducing intent-centric programming — where users describe what they want, and the system interprets and structures it correctly.
- Understands HCL semantic structure
- Generates compiler-compatible prompts
- Explains logic step-by-step for beginners
- Reduces syntax and semantic errors
- Bridges human thought and execution logic
Educational Assistant Mode
For beginners, the chatbot functions as an interactive tutor. It explains what it understood from the user's input, suggests improvements, and progressively teaches programming concepts without overwhelming the learner.
Seamless Compiler Integration
Because the model is trained using HCL's structured dataset and rule definitions, its outputs are optimized for:
- Accurate AST generation
- Minimal semantic mismatch
- Reduced compilation errors
- Stable multi-language output
Vision Alignment
This prototype represents the first step toward our larger goal: eliminating strict syntax rules and enabling rule-free coding. In the future, AI will not just assist — it will act as a core execution partner in the programming workflow.
Frequently Asked Questions
What is HCL?
Human Centric Language (HCL) is a high-level instruction language that bridges the gap between human natural language and programming languages. It allows developers to write code using intuitive, human-readable syntax that compiles to various target languages including Python, C, C++, and JavaScript.
How is NLP used in HCL?
HCL uses Natural Language Processing (NLP) techniques to parse and understand human-like instructions. The compiler employs:
- Tokenization: Breaking down instructions into meaningful tokens
- Pattern Matching: Identifying common programming patterns from natural language
- Semantic Analysis: Understanding the intent behind instructions
- Context-Aware Parsing: Maintaining state and context across statements
However, HCL maintains deterministic behavior — the same instruction always produces the same code, unlike AI-based code generators.
Is HCL faster or slower than Python?
It depends on the target compilation:
- HCL → Python: Similar speed to native Python (adds minimal compilation overhead)
- HCL → C/C++: Significantly faster than Python (10–100× depending on workload)
- HCL → JavaScript: Similar to hand-written JavaScript
The key advantage is flexibility — write once in HCL, compile to the best language for your use case.
Is HCL open-source?
Yes! HCL is fully open-source under the MIT License. You can:
- View the source code on GitHub
- Contribute to the project
- Fork and modify for your needs
- Use it in commercial projects
- Submit issues and feature requests
Repository: github.com/hcl-lang/hcl
Can I use HCL in production?
Yes! HCL is production-ready. Many companies use it for:
- Rapid prototyping
- Teaching programming concepts
- Internal tooling
- Cross-platform applications (compile once, deploy to multiple languages)
- Domain-specific languages (DSLs)
How does HCL compare to other languages?
| Feature | HCL | Python | C++ |
|---|---|---|---|
| Readability | ★★★★★ | ★★★★☆ | ★★★☆☆ |
| Performance | ★★★★★ (depends on target) | ★★★☆☆ | ★★★★★ |
| Learning Curve | ★★★★★ | ★★★★☆ | ★★☆☆☆ |
| Cross-platform | ★★★★★ | ★★★★☆ | ★★★☆☆ |
What are the limitations of HCL?
- Not suitable for extremely low-level system programming
- Limited third-party library support (depends on target language)
- Compilation adds an extra step to the development process
- Some advanced features may not translate perfectly across all target languages
How do I contribute to HCL?
We welcome contributions! Here’s how to get started:
- Fork the repository on GitHub
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes and write tests
- Commit your changes (
git commit -m "Add amazing feature") - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Does HCL support web development?
Yes! You can compile HCL to JavaScript for frontend development or to Python for backend frameworks like Flask or Django. Example:
# Compiles to Express.js, Flask, or similar
create web server on port 3000
handle GET requests to "/api/users"
return user list as JSON
Where can I get help?
- Documentation: This guide covers most use cases
- GitHub Issues: Report bugs or request features
- Community Forum: Ask questions and share projects
- Discord Server: Real-time chat with other developers
- Stack Overflow: Tag your questions with
[hcl-lang]
Release Notes
Version 1.0.0 – January 15, 2026
Latest Stable ReleaseNew Features
- 🎉 Official 1.0 release – production ready!
- ✨ Complete Python, C, and C++ code generation
- 🚀 Performance improvements (30% faster compilation)
- 📦 Package manager integration (npm, pip, cargo)
- 🧠 Advanced AST transformations
- 🎨 Syntax highlighting for VS Code, Vim, and Sublime
Improvements
- Better error messages with suggestions
- Improved type inference system
- Enhanced IDE support and autocomplete
- Optimized memory usage
Bug Fixes
- Fixed loop variable scoping issues
- Resolved Windows path handling bugs
- Corrected C++ template generation edge cases
Version 0.9.0 – December 1, 2025
New Features
- JavaScript/TypeScript compilation target
- Interactive REPL mode
- Watch mode for auto-recompilation
- Custom grammar extensions API
Breaking Changes
- Changed
storekeyword toassignfor consistency - Updated CLI flags (see migration guide)
Version 0.8.0 – October 15, 2025
New Features
- C++ modern features (C++17/20 support)
- Async/await syntax
- Built-in testing framework
- Documentation generator
Version 0.7.0 – September 1, 2025
New Features
- Module system and imports
- Standard library (file I/O, networking, etc.)
- Debug mode and profiling tools
Version 0.6.0 – July 20, 2025
New Features
- Initial C language support
- Function definitions and calls
- Basic type system
Version 0.5.0 – June 1, 2025
New Features
- Beta release
- Python code generation (stable)
- CLI tooling
- Basic syntax and grammar
Upcoming Features (Roadmap)
Version 1.1.0 (Q2 2026)
- Rust compilation target
- AI-assisted code suggestions
- Web-based playground
- Mobile app support (React Native / Flutter output)
Version 1.2.0 (Q3 2026)
- GPU/CUDA support
- Machine learning primitives
- Cloud deployment integration