Category:Objeck: Difference between revisions

4,051 bytes removed ,  11 months ago
m
no edit summary
No edit summary
mNo edit summary
 
(105 intermediate revisions by 5 users not shown)
Line 1:
{{language|Objeck
|exec=bytecode
|site=http://sourceforgewww.net/projects/objeck-lang/.org
|gc=yes
|parampass=value
|safety=safe
|checking=static
|strength=strong}}
|LCT=yes}}
{{language programming paradigm|Object-oriented}}
{{language programming paradigm|Object-oriented}}{{language programming paradigm|functional}}
 
'''Objeck ''' is an [[object-oriented]] computing language with [[functional programming|functional]] features. The language was based upon the author's use of [[Java]] and [[Scheme]]. In the language, all data types are treated as objects and first-class functions that support closures.
The '''Objeck programming language''' is an object-oriented (OO) computing language that has ties with Java, Pascal and indirectly Ruby. In this language, all data types are treated as objects. The language contains all of the "basic" features of a general-purpose (Turing complete) programming language with an emphasis placed on OOP simplicity. The language consists of a compiler and virtual machine with associated garbage collector and JIT compiler. The compiler emits binary byte code that is executed by the runtime system. The runtime system has the ability to translate the byte code into IA-32 native machine code.
 
The programming environment consists of an optimizing compiler, command-line debugger, and virtual machine with associated [[Garbage collection|garbage collector]] and [[JIT]] compiler. The compiler emits binary [[bytecode]] that is executed by the runtime system. The 64-bit runtime JIT compilers support ARM64 and AMD64 machine code targets for macOS, Linux and Windows.
For more information check out the [http://objeck-lang.svn.sourceforge.net/viewvc/objeck-lang/objeck-lang/docs/objeck_lang.pdf The Objeck Programmer's Guide]. The Objeck compiler and VM can [http://sourceforge.net/projects/objeck-lang/ downloaded] from the main project homepage.
 
Learn more from the [https://www.objeck.org/getting_started.html getting started guide].
===Features===
* Support for object-oriented programming (including: virtual classes, enums, functions, methods, etc.)
* Support for polymorphic methods and functions
* "public" and "private" methods classifications
* Native runtime JIT support for IA-32 architectures (currently working on AMD64 support)
* [[garbage collection|Automatic memory management]]
* Dynamic type variable binding
* Class library support (console, strings, files, sockets, directories, vectors, linked lists and balanced binary trees, etc.)
* String object support
* Support for class bundles
* Native platform support for Windows, Linux and OS X
* Command line debugger
* Platform independent optimizations (short-circuit logic, constant folding, strength reduction, instruction simplification and method inlining- WIP)
* Heavy use of the SSE3 instruction set in order to support fast decimal calculations
 
==Examples==
===Hello World!===
<lang objeck>
bundle Default {
class SayHello {
function : Main(args : String[]), Nil {
"Hello World!"->PrintLine();
}
}
}
</lang>
 
===Prime Numbers===
<lang objeck>
bundle Default {
class FindPrime {
function : Main(args : System.String[]), Nil {
Run(1000000);
}
 
function : native : Run(topCandidate : Int), Nil {
candidate : Int := 2;
while(candidate <= topCandidate) {
trialDivisor : Int := 2;
prime : Int := 1;
found : Bool := true;
while(trialDivisor * trialDivisor <= candidate & found) {
if(candidate % trialDivisor = 0) {
prime := 0;
found := false;
}
else {
trialDivisor := trialDivisor + 1;
};
};
if(found) {
candidate->PrintLine();
};
candidate := candidate + 1;
};
}
}
}
</lang>
 
===Socket Client===
<lang objeck>
use Net;
use IO;
 
bundle Default {
class SocketTest {
function : Main(args : System.String[]), Nil {
address := "www.du.edu";
 
socket := TCPSocket->New(address, 80);
if(socket->IsOpen()) {
get := "GET / HTTP/1.1\r\nHost: ";
get->Append(address);
get->Append("\r\n\r\n");
socket->WriteString(get);
 
line := socket->ReadString();
while(line->GetSize() > 0) {
trim := line->Trim();
start : Int;
end : Int;
for(i := 0; i < trim->GetSize(); i := i + 1;) {
# find tag start
if(trim->GetChar(i) = '<') {
start := i;
};
 
# find tag end
if(trim->GetChar(i) = '>') {
end := i;
len := i - start;
# print tag
if(len > 0) {
tag := trim->SubString(start + 1, len - 1);
if(tag->GetSize() > 0) {
if(tag->GetChar(0) <> '/') {
tag_end := 0;
while(tag_end < tag->GetSize() &
tag->GetChar(tag_end) <> ' ') {
tag_end := tag_end + 1;
};
Console->GetInstance()->Print("start tag: |")->Print(tag->SubString(tag_end))->PrintLine("|");
}
else {
tag_end := 1;
while(tag_end < tag->GetSize() &
tag->GetChar(tag_end) <> ' ') {
tag_end := tag_end + 1;
};
Console->GetInstance()->Print("end tag: |")->Print(tag->SubString(1, tag_end - 1))->PrintLine("|");
};
};
};
};
};
line := socket->ReadString();
};
socket->Close();
}
else {
error := "unable to connect to: ";
error->Append(address);
error->PrintLine();
};
}
}
}
</lang>
760

edits