- Notifications
You must be signed in to change notification settings - Fork88
Universal Programming Language & Translator
License
CrossGL/crosstl
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
CrossTL is a revolutionary universal programming language translator built aroundCrossGL - a powerful intermediate representation (IR) language that serves as the bridge between diverse programming languages, platforms, and computing paradigms. More than just a translation tool, CrossGL represents a complete programming language designed for universal code portability and cross-platform development.
CrossGL has evolved far beyond its origins as a shader language into a comprehensive programming language with full support for:
- Advanced Control Flow: Complex conditionals, loops, switch statements, and pattern matching
- Rich Data Structures: Arrays, structs, enums, and custom types
- Memory Management: Buffer handling, pointer operations, and memory layout control
- Function Systems: First-class functions, generics, and polymorphism
- Compute Paradigms: Parallel processing, GPU computing, and heterogeneous execution
- Modern Language Features: Type inference, pattern matching, and algebraic data types
CrossGL enables you to write sophisticated programsonce and deploy across:
- Graphics APIs: Metal, DirectX (HLSL), OpenGL (GLSL), Vulkan (SPIRV)
- Systems Languages: Rust, Mojo
- GPU Computing: CUDA, HIP
- Specialized Domains: Slang (real-time graphics), compute shaders
CrossTL provides comprehensive bidirectional translation between CrossGL and major programming ecosystems:
- Metal - Apple's unified graphics and compute API
- DirectX (HLSL) - Microsoft's graphics framework
- OpenGL (GLSL) - Cross-platform graphics standard
- Vulkan (SPIRV) - High-performance graphics and compute
- Rust - Memory-safe systems programming with GPU support
- Mojo - AI-first systems language with Python compatibility
- CUDA - NVIDIA's parallel computing platform
- HIP - AMD's GPU computing interface
- Slang - Real-time shading and compute language
- CrossGL (.cgl) - Our universal programming language and IR
- 🔄 Universal Portability: Write complex algorithms once, run on any platform
- ⚡ Performance Preservation: Maintain optimization opportunities across translations
- 🧠 Simplified Development: Master one language instead of platform-specific variants
- 🔍 Advanced Debugging: Universal tooling for analysis and optimization
- 🔮 Future-Proof Architecture: Easily adapt to emerging programming paradigms
- 🌐 Bidirectional Translation: Migrate existing codebases to CrossGL or translate to any target
- 📈 Scalable Complexity: From simple shaders to complex distributed algorithms
- 🎯 Domain Flexibility: Graphics, AI, HPC, systems programming, and beyond
CrossTL employs a sophisticated multi-stage translation pipeline:
- Lexical Analysis: Advanced tokenization with context-aware parsing
- Syntax Analysis: Robust AST generation with error recovery
- Semantic Analysis: Type checking, scope resolution, and semantic validation
- IR Generation: Conversion to CrossGL intermediate representation
- Optimization Passes: Platform-agnostic code optimization and analysis
- Target Generation: Backend-specific code generation with optimization
- Post-Processing: Platform-specific optimizations and formatting
CrossGL supports seamless translation in both directions - import existing code from any supported language or export CrossGL to any target platform.
// Advanced pattern matching and algebraic data typesenum Result<T, E> {Ok(T),Error(E)}structMatrix<T> { data: T[], rows:u32, cols:u32}function matrixMultiply<T>(a: Matrix<T>, b: Matrix<T>) -> Result<Matrix<T>, String> {if (a.cols != b.rows) {returnResult::Error("Matrix dimensions incompatible"); } let result = Matrix<T> { data:new T[a.rows * b.cols], rows: a.rows, cols: b.cols }; parallelfor i in0..a.rows {for j in0..b.cols { let mut sum =T::default();for k in0..a.cols { sum += a.data[i * a.cols + k] * b.data[k * b.cols + j]; } result.data[i * result.cols + j] = sum; } }returnResult::Ok(result);}// GPU compute shader with advanced memory managementcompute spawn matrixCompute { bufferfloat* matrix_A; bufferfloat* matrix_B; bufferfloat* result; localfloat shared_memory[256];voidmain() { let idx =workgroup_id() *workgroup_size() +local_id();// Complex parallel reduction with shared memory shared_memory[local_id()] = matrix_A[idx] * matrix_B[idx];workgroup_barrier();// Tree reductionfor stride in [128,64,32,16,8,4,2,1] {if (local_id() < stride) { shared_memory[local_id()] += shared_memory[local_id() + stride]; }workgroup_barrier(); }if (local_id() ==0) { result[workgroup_id()] = shared_memory[0]; } }}
// Physically-based rendering with advanced material systemstructMaterial { albedo: vec3, metallic:float, roughness:float, normal_map: texture2d, displacement: texture2d}structLighting { position: vec3, color: vec3, intensity:float, attenuation: vec3}shader PBRShader { vertex { input vec3 position; input vec3 normal; input vec2 texCoord; input vec4 tangent; uniform mat4 modelMatrix; uniform mat4 viewMatrix; uniform mat4 projectionMatrix; output vec3 worldPos; output vec3 worldNormal; output vec2 uv; output mat3 TBN;voidmain() { vec4 worldPosition = modelMatrix *vec4(position,1.0); worldPos = worldPosition.xyz; vec3 T =normalize(vec3(modelMatrix *vec4(tangent.xyz,0.0))); vec3 N =normalize(vec3(modelMatrix *vec4(normal,0.0))); vec3 B =cross(N, T) * tangent.w; TBN =mat3(T, B, N); worldNormal = N; uv = texCoord; gl_Position = projectionMatrix * viewMatrix * worldPosition; } }// Advanced fragment shader with PBR lighting fragment { input vec3 worldPos; input vec3 worldNormal; input vec2 uv; input mat3 TBN; uniform Material material; uniform Lighting lights[8]; uniformint lightCount; uniform vec3 cameraPos; output vec4 fragColor; vec3calculatePBR(vec3 albedo,float metallic,float roughness, vec3 normal, vec3 viewDir, vec3 lightDir, vec3 lightColor) {// Advanced PBR calculation with microfacet model vec3 halfVector =normalize(viewDir + lightDir);float NdotV =max(dot(normal, viewDir),0.0);float NdotL =max(dot(normal, lightDir),0.0);float NdotH =max(dot(normal, halfVector),0.0);float VdotH =max(dot(viewDir, halfVector),0.0);// Fresnel term vec3 F0 =mix(vec3(0.04), albedo, metallic); vec3 F = F0 + (1.0 - F0) *pow(1.0 - VdotH,5.0);// Distribution term (GGX)float alpha = roughness * roughness;float alpha2 = alpha * alpha;float denom = NdotH * NdotH * (alpha2 -1.0) +1.0;float D = alpha2 / (3.14159 * denom * denom);// Geometry termfloat G =geometrySmith(NdotV, NdotL, roughness); vec3 numerator = D * G * F;float denominator =4.0 * NdotV * NdotL +0.001; vec3 specular = numerator / denominator; vec3kS = F; vec3kD =vec3(1.0) -kS;kD *=1.0 - metallic;return (kD * albedo /3.14159 + specular) * lightColor * NdotL; }voidmain() { vec3 normal =normalize(TBN * (texture(material.normal_map, uv).rgb *2.0 -1.0)); vec3 viewDir =normalize(cameraPos - worldPos); vec3 color =vec3(0.0);for (int i =0; i < lightCount; ++i) { vec3 lightDir =normalize(lights[i].position - worldPos);float distance =length(lights[i].position - worldPos);float attenuation =1.0 / (lights[i].attenuation.x + lights[i].attenuation.y * distance + lights[i].attenuation.z * distance * distance); vec3 lightColor = lights[i].color * lights[i].intensity * attenuation; color +=calculatePBR(material.albedo, material.metallic, material.roughness, normal, viewDir, lightDir, lightColor); }// Add ambient lighting color += material.albedo *0.03;// Tone mapping and gamma correction color = color / (color +vec3(1.0)); color =pow(color,vec3(1.0/2.2)); fragColor =vec4(color,1.0); } }}
Install CrossTL's universal translator:
pip install crosstl
// algorithm.cgl - Universal algorithm implementationfunction quicksort<T>(arr: T[], low:i32, high:i32) ->void {if (low < high) { let pivot =partition(arr, low, high);quicksort(arr, low, pivot -1);quicksort(arr, pivot +1, high); }}function partition<T>(arr: T[], low:i32, high:i32) ->i32 { let pivot = arr[high]; let i = low -1;for j in low..high {if (arr[j] <= pivot) { i++;swap(arr[i], arr[j]); } }swap(arr[i +1], arr[high]);return i +1;}compute parallel_sort { bufferfloat* data; uniformint size;voidmain() { let idx =global_id();if (idx < size) {// Parallel bitonic sort implementationbitonicSort(data, size, idx); } }}
importcrosstl# Translate to any target language/platformrust_code=crosstl.translate('algorithm.cgl',backend='rust',save_shader='algorithm.rs')cuda_code=crosstl.translate('algorithm.cgl',backend='cuda',save_shader='algorithm.cu')metal_code=crosstl.translate('algorithm.cgl',backend='metal',save_shader='algorithm.metal')mojo_code=crosstl.translate('algorithm.cgl',backend='mojo',save_shader='algorithm.mojo')
importcrosstl# Translate neural network kernels across AI platformsai_kernel="""compute neuralNetwork { buffer float* weights; buffer float* inputs; buffer float* outputs; buffer float* biases; uniform int input_size; uniform int output_size; void main() { let neuron_id = global_id(); if (neuron_id >= output_size) return; float sum = 0.0; for i in 0..input_size { sum += weights[neuron_id * input_size + i] * inputs[i]; } outputs[neuron_id] = relu(sum + biases[neuron_id]); }}"""# Deploy across AI hardware platformscuda_ai=crosstl.translate(ai_kernel,backend='cuda')# NVIDIA GPUship_ai=crosstl.translate(ai_kernel,backend='hip')# AMD GPUsmetal_ai=crosstl.translate(ai_kernel,backend='metal')# Apple Siliconmojo_ai=crosstl.translate(ai_kernel,backend='mojo')# Mojo AI runtime
# Translate systems-level code across platformssystems_code="""struct MemoryPool { buffer u8* memory; size_t capacity; size_t used; mutex lock;}function allocate(pool: MemoryPool*, size: size_t) -> void* { lock_guard guard(pool.lock); if (pool.used + size > pool.capacity) { return null; } void* ptr = pool.memory + pool.used; pool.used += size; return ptr;}"""rust_systems=crosstl.translate(systems_code,backend='rust')# Memory-safe systems codecpp_systems=crosstl.translate(systems_code,backend='cpp')# High-performance C++c_systems=crosstl.translate(systems_code,backend='c')# Portable C code
# Import and unify existing codebasesconversions= [ ('existing_shader.hlsl','unified.cgl'),# DirectX to CrossGL ('gpu_kernel.cu','unified.cgl'),# CUDA to CrossGL ('graphics.metal','unified.cgl'),# Metal to CrossGL ('algorithm.rs','unified.cgl'),# Rust to CrossGL ('compute.mojo','unified.cgl'),# Mojo to CrossGL]forsource,targetinconversions:unified_code=crosstl.translate(source,backend='cgl',save_shader=target)print(f"✅ Unified{source} into CrossGL:{target}")
importcrosstl# One CrossGL program, unlimited platformsprogram='universal_algorithm.cgl'# Deploy across all supported platformsdeployment_targets= {# Graphics APIs'metal':'.metal',# Apple ecosystems'directx':'.hlsl',# Windows/Xbox'opengl':'.glsl',# Cross-platform'vulkan':'.spirv',# High-performance# Systems languages'rust':'.rs',# Memory safety'mojo':'.mojo',# AI-optimized'cpp':'.cpp',# Performance'c':'.c',# Portability# Parallel computing'cuda':'.cu',# NVIDIA'hip':'.hip',# AMD'opencl':'.cl',# Cross-vendor# Specialized'slang':'.slang',# Real-time graphics'wgsl':'.wgsl',# Web platforms}forbackend,extensionindeployment_targets.items():output_file=f'deployments/{program.stem}_{backend}{extension}'try:code=crosstl.translate(program,backend=backend,save_shader=output_file)print(f"✅{backend.upper()}:{output_file}")exceptExceptionase:print(f"⚠️{backend.upper()}:{str(e)}")print(f"\n🚀 Universal deployment complete!")print(f"📁 Check deployments/ directory for platform-specific implementations")
CrossGL provides comprehensive programming language features:
- Strong static typing with type inference
- Generic programming with type parameters
- Algebraic data types (enums with associated data)
- Trait/interface system for polymorphism
- Memory layout control for performance
- Pattern matching for complex conditional logic
- Advanced loops (for, while, loop with break/continue)
- Exception handling with Result types
- Async/await for concurrent programming
- Explicit lifetime management when needed
- Buffer abstractions for GPU programming
- Pointer safety with compile-time checks
- Reference semantics for efficient data sharing
- Compute shaders for GPU programming
- Parallel loops for CPU vectorization
- Workgroup operations for GPU synchronization
- Memory barriers for consistency
For comprehensive language documentation, visit ourLanguage Reference.
CrossGL is a community-driven project. Whether you're contributing language features, backend implementations, optimizations, or documentation, your contributions shape the future of universal programming! 🌟
Find out more in ourContributing Guide
Join the universal programming revolution
- Twitter - Latest updates and announcements
- LinkedIn - Professional community
- Discord - Real-time discussions and support
- YouTube - Tutorials and deep dives
Shape the future of programming languages!
CrossTL is open-source and licensed under theApache License 2.0.
CrossGL: One Language, Infinite Possibilities 🌍
Building the universal foundation for the next generation of programming
The CrossGL Team
About
Universal Programming Language & Translator
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.