Русские вычислители

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Русские вычислители » Иные русские языки программирования » Гонец-платформа создания микросервисов на 1С-подобном языке-русский Go


Гонец-платформа создания микросервисов на 1С-подобном языке-русский Go

Сообщений 1 страница 6 из 6

1

Цели
Платформа Гонец:Микросервисы создана для решения программистами 1С задач, связанных с высокопроизводительными распределенными вычислениями, создания микросервисов, вэб-сервисов и вэб-порталов для работы тысяч пользователей, работы с высокоэффективными базами данных, с использованием синтаксиса языка, похожего, но не ограниченного возможностями языка 1С.

Еще никогда программистам 1С не были так легко доступны возможности:

Создать микросервис с произвольным сетевым протоколом, развернуть его на linux, в docker контейнере или кластере kubernetes
Выполнить сложную многопоточную вычислительную задачу для десятков тысяч подключающихся пользователей за миллисекунды
Взаимодействовать с пользователем через web-браузер с минимальным трафиком
Сохранять и получать данные с максимально доступной скоростью в key-value базах данных

https://covrom.github.io/gonec/ - официальный сайт

https://github.com/covrom/gonec - гит хаб

https://vk.com/gonec1c - ВК группа пользователей языка Гонец

https://habrahabr.ru/post/335390/ - статья на Хабре

Отредактировано тхабрф (09.01.2018 10:18:45)

0

2

Пример кода

#!gonec
// Демонстрационный пример - todo список задач на базе vue.js и bootstrap

база = Новый ФайловаяБазаДанных
база.Открыть("todo.db")

// инициируем таблицу, если ее еще нет
тр = база.НачатьТранзакцию(Истина)
тр.Таблица("Задачи")
тр.ЗафиксироватьТранзакцию()

Функция ГлавнаяСтраница(вых,вх)
    вых.Отправить({"Статус":200, "Тело": `<html>
            <head>
                <meta http-equiv="content-type" content="text/html; charset=utf-8">
           
                <title>TODO App</title>
           
                <!-- Latest compiled and minified CSS -->
                <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">

                <!-- Font Awesome -->
                <link rel="stylesheet"  href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css">

                <!-- JQuery -->
                <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
       
                <!-- Latest compiled and minified JavaScript -->
                <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
           
                <!-- Vue.js -->
                <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.24/vue.min.js"></script>
                <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/0.7.0/vue-resource.min.js"></script>
            </head>
            <body>
                <div class="container">
                    <div class="row">
                        <div class="col-md-4">
                            <h2>Мои задачи</h2>
                            <ul class="list-group">
                                <li class="list-group-item" v-for="task in tasks">
                                    {{ task.name }}
                                    <span class="pull-right">
                                        <button class="btn btn-xs btn-danger" v-on:click="deleteTask($index)">
                                            <i class="fa fa-trash-o" aria-hidden="true"></i>
                                        </button>
                                    </span>
                                </li>
                            </ul>
                            <div class="input-group">
                                <input type="text"
                                    class="form-control"
                                    placeholder="New Task"
                                    v-on:keyup.enter="createTask"
                                    v-model="newTask.name">
                                <span class="input-group-btn">
                                    <button class="btn btn-primary" type="button" v-on:click="createTask">Создать</button>
                                </span>
                            </div><!-- /input-group -->
                        </div>
                    </div>
                </div>
                <script>
                    new Vue({
                        el: 'body',
                        data: {
                            tasks: [],
                            newTask: {}
                        },
                        // This is run whenever the page is loaded to make sure we have a current task list
                        created: function() {
                            // Use the vue-resource $http client to fetch data from the /tasks route
                            this.$http.get('/tasks').then(function(response) {
                                this.tasks = response.data.items ? response.data.items : []
                            })
                        },
                        methods: {
                            createTask: function() {
                                if (!$.trim(this.newTask.name)) {
                                    this.newTask = {}
                                    return
                                }
                                // Post the new task to the /tasks route using the $http client
                                this.$http.put('/tasks', this.newTask).success(function(response) {
                                    this.newTask.id = response.created
                                    this.tasks.push(this.newTask)
                                    console.log("Задача создана!")
                                    console.log(this.newTask)
                                    this.newTask = {}
                                }).error(function(error) {
                                    console.log(error)
                                });
                            },
                            deleteTask: function(index) {
                                // Use the $http client to delete a task by its id
                                this.$http.delete('/tasks?id=' + this.tasks[index].id).success(function(response) {
                                    this.tasks.splice(index, 1)
                                    console.log("Task deleted!")
                                }).error(function(error) {
                                    console.log(error)
                                })
                            }
                        }
                    })
                </script>
            </body>
        </html>
    `})
КонецФункции

Функция Задачи(вых,вх)
    база = вх.Данные()
    сообщ = вх.Сообщение()
   
    Если сообщ["Метод"] = "GET" Тогда
       
        тр = база.НачатьТранзакцию(Ложь)
        таб = тр.Таблица("Задачи")
        задачи = таб.ПолучитьВсе()       
        тр.ОтменитьТранзакцию() // при чтении транзакция не фиксируется, но отменяется
       
        items = []
        Для каждого к из задачи.Ключи() Цикл
            items += {"id":к, "name": задачи[к]}
        КонецЦикла
       
        вых.Отправить({"Статус":200, "Тело": Строка({"items": items})})
   
    ИначеЕсли сообщ["Метод"] = "PUT" Тогда
       
        задача = Структура(сообщ["Тело"])

        тр = база.НачатьТранзакцию(Истина)
        Попытка
            таб = тр.Таблица("Задачи")
            ид = Формат("%09d",таб.СледующийИдентификатор()) // 9 знаков с лидирующими нулями
            таб.Установить(ид, задача.name)
            // 201 = HTTP Created
            вых.Отправить({"Статус":201, "Тело": Строка({"created": ид})})
            тр.ЗафиксироватьТранзакцию()
        Исключение
            Сообщить(ОписаниеОшибки())
            тр.ОтменитьТранзакцию()
        КонецПопытки

    ИначеЕсли сообщ["Метод"] = "DELETE" Тогда

        ид = сообщ["Параметры"]["id"]

        тр = база.НачатьТранзакцию(Истина)
        Попытка
            таб = тр.Таблица("Задачи")
            таб.Удалить(ид)
            вых.Отправить({"Статус":200, "Тело": Строка({"deleted": ид})})
            тр.ЗафиксироватьТранзакцию()
        Исключение
            Сообщить(ОписаниеОшибки())
            тр.ОтменитьТранзакцию()
        КонецПопытки

    КонецЕсли

КонецФункции

серв = Новый Сервер
Попытка
    серв.Открыть("http", ":9990", 100, {
        "/": ГлавнаяСтраница,
        "/tasks": Задачи,
    }, база)
    Сообщить("Запущен сервер приложения 'Список задач' на порту 9990")
Исключение
    Сообщить(ОписаниеОшибки())
КонецПопытки

Пока серв.Работает() Цикл
    ОбработатьГорутины()

0

3

Еще никогда программистам 1С не были так легко доступны возможности:


Создать микросервис с произвольным сетевым протоколом, развернуть его на linux, в docker контейнере или кластере kubernetes
Выполнить сложную многопоточную вычислительную задачу для десятков тысяч подключающихся пользователей за миллисекунды
Взаимодействовать с пользователем через web-браузер с минимальным трафиком
Сохранять и получать данные с максимально доступной скоростью в key-value базах данных

А оно и не нужно. В 1С встроены механизмы для связи с внешним миром и также присутствуют механизмы SOAP-сервера на основе Апача.
Насосаные из пальца ваши преимущества.
Вот если бы полностью семантику и синтаксис языка 1С мог поддерживать Гонец - то великие блага можно было бы получить от повышенной производительности.

Отредактировано vic_one (13.01.2018 11:55:24)

0

4

я так понимаю он ближе к Go ?

0

5

Хорошая работа. Хотя можно было язык более русским сделать, отказавшись от нерусских слов совсем, если бы не было задачи делать его подобным языку 1С.
Если вы и правда не шутите, то, пожалуйста, продолжайте его развивать. Мне лично сильно не хватает русского языка программирования с лёгкой и простой работой с сетью.

0

6

Серёга написал(а):

Хорошая работа. Хотя можно было язык более русским сделать, отказавшись от нерусских слов совсем, если бы не было задачи делать его подобным языку 1С.
Если вы и правда не шутите, то, пожалуйста, продолжайте его развивать. Мне лично сильно не хватает русского языка программирования с лёгкой и простой работой с сетью.

V просто работает с сетью

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Русские вычислители » Иные русские языки программирования » Гонец-платформа создания микросервисов на 1С-подобном языке-русский Go