LINUX.ORG.RU
ФорумTalks

Rust+Go = Borgo

 , ,


0

2

Растаманы и Говнари - Объеденяйтесь!

Дополнительно можно отметить язык программирования Borgo, который пытается быть более выразительным, чем язык Go, но менее сложным, чем язык Rust. Borgo комбинирует лучшие черты Go и Rust, восполняя недостатки каждого из языков. Например, язык Go прост и понятен, но не предоставляет расширенных средств для обеспечения безопасности при работе с типами. Язык Rust предоставляет средства для безопасного программирования, но переусложнён. Проект развивает Marco Sampellegrini, автор книги «The Simple Haskell Handbook» и разработчик системы непрерывной интеграции Quad CI.
В Borgo используется статическая типизация, аналогичные языку Go типы и синтаксис, похожий на Rust. Указание точек с запятой в конце строк в коде на Borgo не является обязательным. Код на языке Borgo компилируется в представление на языке Go, которое полностью совместимо с существующими пакетами для языка Go. Код компилятора написан на языке Rust и распространяется под лицензией ISC.

use fmt

enum NetworkState<T> {
    Loading,
    Failed(int),
    Success(T),
}

struct Response {
    title: string,
    duration: int,
}

fn main() {
    let res = Response {
        title: "Hello world",
        duration: 0,
    }

    let state = NetworkState.Success(res)

    let msg = match state {
        NetworkState.Loading => "still loading",
        NetworkState.Failed(code) => fmt.Sprintf("Got error code: %d", code),
        NetworkState.Success(res) => res.title,
    }

    fmt.Println(msg)
}

★★★★

Вау, новый язык программирования!

thesis ★★★★★
()

Язык Rust предоставляет средства для безопасного программирования, но переусложнён.

Очередное «огнетушитель предоставляет средства для тушения пожара, но переусложнен — вот вам стакан воды»?

t184256 ★★★★★
()

и за что бы он не брались, у них всегда получался дотнет..

Syncro ★★★★★
()

Так они просто в Go запилили нормальную систему типов и сахар ? вместо if err != nil { return err; }? А что тогда там от Rust? ADT, напомню не является уникальной фичей раста, а тем же borrow checker-ом там совсем не пахнет.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 2)
Ответ на: комментарий от t184256

Ну, гошный рантайм (async by default, каналы и горутины) с Rust-овой системой типов — это и в самом деле хорошо.

intelfx ★★★★★
()

One ambitious goal of this project is to be fully compatible with the existing Go ecosystem.

You’ve already seen how the fmt package was used in previous examples, but how do we deal with functions that return multiple values?

This is where our trusty Option and Result types come in! The compiler will handle the conversion automatically for you :)

A good mental model is to think of return types in Go functions as:

when return type is    (T, bool)
it becomes             Option<T>

Но ведь это не взаимнооднозначное отображение. return "foo", true и return nil, false ещё можно отобразить на return Some("foo") и return None, соответственно, но вот return "foo", false уже на Option<> не натягивается.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Но ведь это не взаимнооднозначное отображение

That’s the point. Гошники из-за анемической системы типов лепят (T, bool) там, где нужно было бы Option<T>, и из-за этого у них пространство значений, возвращаемых функцией, ровно в два раза больше, чем надо.

return "foo", false (равно как и return nil, true) — это баг, он и не должен ни на что натягиваться, его нужно отлавливать при компиляции (но Go не умеет).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

return "foo", false — это баг.

Ой ли? Я вот легко могу представить себе функцию, где булево значение означает не успешность операции, а какую-нибудь дополнительную инфу. Например, попали ли мы в кэш при вычислении какого-нибудь значения:

func getMaybeCachedValueByID(id int) (result string, cacheHit bool) 

Вопрос, что это поделие будет делать с данной функцией. Слепо переделает в Option<string>? Или будет анализировать все returnы и проверять, что когда мы возвращаем второе значение false, то первое значение всегда nil? Сможет ли оно вообще такой анализ провести?

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Видимо что.

На всякий случай: я не агитирую за сабж, он выглядит игрушечным, но underlying sentiment мне более чем близок.

intelfx ★★★★★
()
Ответ на: комментарий от t184256

А что, джава разве не так взлетела? Было слишком сложно управлять памятью полувручную, и дали сборщик мусора.

seiken ★★★★★
()

Боров чекер, владение, сэйф/ансейф – что-то из этого есть, кроме

синтаксис, похожий на Rust

?
Если нет, то при чем тут Раст?

Virtuos86 ★★★★★
()

<petrosyan>Предлогаю скрестить Go + V, а в качестве рантайма взять Node</petrosyan>

utf8nowhere ★★★
()
Последнее исправление: utf8nowhere (всего исправлений: 1)

Borgo комбинирует лучшие недостатки Go и Rust

Починил. Резистанс из футиль, борг зохавает.

slackwarrior ★★★★★
()

Растаманы и Говнари

Слабо, в русском языке есть другое слово, в котором присутствует подстрока «раст»

buddhist ★★★★★
()

Код на языке Borgo компилируется в представление на языке Go

…которое с помощью GopherJS можно сконпелировать в JS!

goingUp ★★★★★
()
Ответ на: комментарий от thesis

И с помощью команды rm удалить, не запуская.

…предварительно загрузив в serverless облако

goingUp ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)