•  


GitHub - marcobambini/gravity: Gravity Programming Language
Skip to content

marcobambini/gravity

Repository files navigation

Build Status

Gravity Programming Language

Gravity is a powerful, dynamically typed, lightweight, embeddable programming language written in C without any external dependencies (except for stdlib). It is a class-based concurrent scripting language with modern Swift -like syntax.

Gravity supports procedural programming, object-oriented programming, functional programming, and data-driven programming. Thanks to special built-in methods, it can also be used as a prototype-based programming language.

Gravity has been developed from scratch for the Creo project in order to offer an easy way to write portable code for the iOS and Android platforms. It is written in portable C code that can be compiled on any platform using a C99 compiler. The VM code is about 4K lines long, the multipass compiler code is about 7K lines and the shared code is about 3K lines long. The compiler and virtual machine combined add less than 200KB to the executable on a 64-bit system.

What Gravity code looks like

class
 Vector
 {

	// instance variables

	var
 x
 =
 0
;
	
var
 y
 =
 0
;
	
var
 z
 =
 0
;

	
// constructor

	func
 init 
(
a 
=
 0
,
 b 
=
 0
,
 c 
=
 0
)
 {

		x 
=
 a; y 
=
 b; z 
=
 c;
	
}


	// instance method (built-in operator overriding)

	func
 +
 (
v
)
 {

		if 
(
v is 
Int
)
 return
 Vector
(
x
+
v
,
 y
+
v
,
 z
+
v
)
;
		
else
 if 
(
v is 
Vector
)
 return
 Vector
(
x
+
v
.
x
,
 y
+
v
.
y
,
 z
+
v
.
z
)
;
		
return
 null;
	
}


	// instance method (built-in String conversion overriding)

	func
 String
(
)
 {

	        // string interpolation support

		return
 "
[
\(
x
)
,
\(
y
)
,
\(
z
)
]
"
;
	
}

}


func
 main
(
)
 {

	// initialize a new vector object

	var
 v1
 =
 Vector
(
1
,
2
,
3
)
;
	
	
// initialize a new vector object

	var
 v2
 =
 Vector
(
4
,
5
,
6
)
;
	
	
// call + function in the vector object

	var
 v3
 =
 v1 
+
 v2;
	
	
// returns string "[1,2,3] + [4,5,6] = [5,7,9]"

    	return
 "
\(
v1
)
 + 
\(
v2
)
 = 
\(
v3
)
"
;
 
}

Features

  • multipass compiler
  • dynamic typing
  • classes and inheritance
  • higher-order functions and classes
  • lexical scoping
  • coroutines (via fibers)
  • nested classes
  • closures
  • garbage collection
  • operator overriding
  • powerful embedding API
  • built-in unit tests
  • built-in JSON serializer/deserializer
  • optional semicolons

Special thanks

Gravity was supported by a couple of open-source projects. The inspiration for closures comes from the elegant Lua programming language; specifically from the document Closures in Lua . For fibers, upvalues handling and some parts of the garbage collector, my gratitude goes to Bob Nystrom and his excellent Wren programming language. A very special thanks should also go to my friend Andrea Donetti who helped me debugging and testing various aspects of the language.

Documentation

The Getting Started page is a guide for downloading and compiling the language. There is also a more extensive language documentation . Official wiki is used to collect related projects and tools.

Where Gravity is used

Community

Seems like a good idea to make a group chat for people to discuss Gravity.
Join the chat at https://gitter.im/gravity-lang/

Contributing

Contributions to Gravity are welcomed and encouraged!
More information is available in the official CONTRIBUTING file.

License

Gravity is available under the permissive MIT license.

- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본