Giter Club home page Giter Club logo

dm-vev / atomlang Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 625 KB

Atom - это бесплатный, открытый и гибкий язык программирования, который предназначен для создания различных видов программного обеспечения, в том числе и для встраивания в автономные системы. Он предлагает простой и интуитивно понятный синтаксис, который позволяет разработчикам быстро и легко создавать высококачественный код.

License: MIT License

C 100.00%

atomlang's Introduction

Atom

Atom - это бесплатный, открытый и гибкий язык программирования, который предназначен для создания различных видов программного обеспечения, в том числе и для встраивания в автономные системы. Он предлагает простой и интуитивно понятный синтаксис, который позволяет разработчикам быстро и легко создавать высококачественный код.

Atom компилируется в собственную виртуальную машину написанную на Си. Это обеспечивает кроссплатформенность для языка.

Зачем?

Прежде всего, язык ставит перед собой цель стать языком для написания програм для низкопроизводительных устройств, а так-же для микроконтролерров.

Примеры кода:

1. Hello world!

io.write("Hello world!\n");

2. Ввод от пользователя

io.write('Hello, what is your name? ')
var name = io.read()
io.write('Nice to meet you, ', name, '!\n')

3. Структуры

var Car = {
	speed : 0
};

function car::speedTo(v : integer) { // дополнение структуры
	this.speed = v; // изменение локальной переменной speed
}

io.write(Car.speed); // 0
Car->speedTo(12); //вызов функции из структуры
io.write(Car.speed); // 12

4. Работа с файлами

var file = io.open("example.txt", "w");
file->write("Hello, world!");
file->close();

file = io.open("example.txt", "r");
var contents = file->read("*all");
file->close();

5. Корутины

function fibonacci(n) {
    if( n < 2 ) {
        return n;
    } else {
        return fibonacci(n-1) + fibonacci(n-2);
    }
}

var start_time = os.time();
for( i = 1, 40 ) {
    print(fibonacci(i));
}
var end_time = os.time();
print("(Without coroutines) Execution time: " .. (end_time - start_time) .. " seconds");

function fibonacci_co(n) {
    var function iter(a, b, count) {
        if( count == 0 ) {
            return a;
        } else {
            coroutine.yield(a);
            return iter(b, a + b, count - 1);
        }
    }

    return coroutine.wrap(function() { iter(0, 1, n); });
}

var start_time2 = os.time();
for( fib in fibonacci_co(40) ) {
    print(fib);
}
var end_time2 = os.time();
print("(With coroutines) Execution time: " .. (end_time - start_time) .. " seconds");

6. Работа с сетью и внешними библиотеками

require("libnet") // Обратите внимание, требуется отедльная библиотека для работы с сетью. Ее можно найти в lib/libnet/libnet.so

sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) // Создаем сокет
socket.connect("localhost", 80, sockfd) // Подключаемся
socket.send(sockfd, "GET / HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n") // Отправляем данные

var response = socket.recv(sockfd) // Читаем данные
socket.close(sockfd) // Закрываем сокет

io.write(response) // Выводим результат

Больше примеров Вы сможете найти в папке examples.

Использование

И так, вы решили воспользоваться языком. Как его собрать? Для начала, разберемся вообще что происходит с вашим скриптом перед компиляцией.

Ваш скрипт проходит через компилятор atomc(Atom compiler), который генерирует байткод(bytecode.bin) для виртуальной машины vm. Без файла bytecode.bin, ваша программа не запустится(!!!).

Собрать програму в байткод можно так:

./atomc (имя файла) [-о выходной файл(необязательно)]

Далее вы можете запустить вашу уже скомпилированную программу так:

./vm

Виртуальная машина не имеет зависимостей и может спокойно запускаться на любых ПК.

atomlang's People

Contributors

dm-vev avatar

Stargazers

 avatar

Watchers

 avatar  avatar

atomlang's Issues

io.s_connect выдает Network is unreacheable

при попытке подключиться к любому хосту падает с ошибкой недоступности сети, однако работа сети в порядке и брендмауер не мешает работе

Код:

var client = io.s_connect("localhost", 80);
client->send("GET / HTTP\1.1\r\nHost: localhost\r\n\r\n")
print(client->receive("*a"));
client->close()

Ошибка:

atomi: sockets.atom:1: Error connecting to server: Network is unreachable
stack traceback:
	[C]: in function 'io.s_connect'
	sockets.atom:1: in main chunk
	[C]: in ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.