rust это кот шредингера (траспайлеры выход из тупика)
От: Разраб  
Дата: 30.10.23 02:05
Оценка:
КСВ делится на 3 типа:
1 за ВМ
2 за сборщик мусора
3 за ручное управление
А если посмотреть с другой стороны?
4 за траспайлеры

rust

available-targets

Взять тот же Blazor webassembly — монструозная надстройка над html и js.
и хотя нам обещают бешенную производительность, пока (уже несколько лет) этого не произошло.
Вероятно потому что V8 одна из самых оптимизированных существующих ВМ.
Ну и зачем оно спрашивается?
Когда можно взять относительно простой F# и собрать код под js и получить на выходе рабочее приложение без дополнительных прослоек.
или rust и получить бинарь аналогичный тем, что пишут растаманы?

  Giraffe.ViewEngine(F#)
let index (items : seq<string>) = html [ _lang "ru"] [ul [] [ yield! items |> Seq.map (fun e -> li [] [str e])]];;
val index: items: string seq -> XmlNode

> index ["alice"; "bob"; "jack" ]  |> RenderView.AsString.htmlDocument ;;
val it: string =
  "<!DOCTYPE html>
<html lang="ru"><ul><li>alice</li><li>bob</li><li>jack</li></ul></html>"

> index ["alice"; "bob"; "jack" ];;
val it: XmlNode =
  ParentNode
    (("html", [|KeyValue ("lang", "ru")|]),
     [ParentNode
        (("ul", [||]),
         [ParentNode (("li", [||]), [Text "alice"]);
          ParentNode (("li", [||]), [Text "bob"]);
          ParentNode (("li", [||]), [Text "jack"])])])

Вот пример F# -> Rust при помощи Fable.
Плюшки очевидны: код прост, программа нативная без сборщика мусора.
type Person =  { Name : string }

[<EntryPoint>]
let main args = 

    let alice = { Name = "Alice" }
    printfn "Hello, %A!" alice

    0


#![allow(dead_code,)]
#![allow(non_camel_case_types,)]
#![allow(non_snake_case,)]
#![allow(non_upper_case_globals,)]
#![allow(unreachable_code,)]
#![allow(unused_attributes,)]
#![allow(unused_imports,)]
#![allow(unused_macros,)]
#![allow(unused_parens,)]
#![allow(unused_variables,)]
use fable_library_rust::NativeArray_::array_from;
use fable_library_rust::String_::fromString;
pub mod Program {
    use super::*;
    use fable_library_rust::Native_::LrcPtr;
    use fable_library_rust::NativeArray_::Array;
    use fable_library_rust::String_::string;
    #[derive(Clone, Debug, Default, PartialEq, PartialOrd, Hash, Eq, Ord,)]
    pub struct Person {
        pub Name: string,
    }
    impl core::fmt::Display for Program::Person {
        fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
            write!(f, "{}", core::any::type_name::<Self>())
        }
    }
    pub fn main(args: Array<string>) -> i32 {
        let alice: LrcPtr<Program::Person> =
            LrcPtr::new(Program::Person{Name: string("Alice"),});
        println!("Hello, {:?}!", alice);
        0_i32
    }
}
pub fn main() {
    let args = std::env::args().skip(1).map(fromString).collect();
    Program::main(array_from(args));
}
☭ ✊ В мире нет ничего, кроме движущейся материи.
Отредактировано 31.10.2023 7:53 Разраб . Предыдущая версия . Еще …
Отредактировано 31.10.2023 7:03 Разраб . Предыдущая версия .
Отредактировано 30.10.2023 2:51 Разраб . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.