LINUX.ORG.RU

Преемники царей дня сегодняшнего

 ,


0

7

Мир не стоит на месте, как отправились в могилу гиганты прошлого (Fortran, COBOL, Lisp), так уйдут в тень и текущие лидеры индустрии. Дабы не оказаться вместе с ними на краю пропасти, разработчикам необходимо начать приглядываться к новым языкам и искать среди них замены текущим уже сейчас.

Итак, LOR, давай думать, к чему готовиться?
Сфера: Сегодня -> Завтра

Системное программирование: C -> D // ОС, драйверы, утилиты
Язык общего назначения: Java -> Go // прикладное ПО
Скриптовый язык: Perl -> Python // наколенное ПО
Web: PHP -> Go // сайты, web-приложения

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

Ответ на: комментарий от Deleted

А типичный быдлокодеришка — с императивным алгоритмом.

fxd

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

Ты штангу столько раз не поднимешь.

iVS ★★★★★
()

тред не читал, но:

Fortran

скорее жив чем мертв.

Lisp

уж тем более

так что, кг/ТСм

Deleted
()

Системное программирование: Assembler -> Assembler

fixed. писать низкоуровневое ПО на языках настолько высокого уровня, как C, глупо.

Lincor
()
Ответ на: комментарий от tailgunner

Луа - тоже тормозной пых без библиотек.

Давай тоньше

annulen ★★★★★
()

Fortran
Lisp

отправились в могилу

*facepalm.jpg*

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

pypy такой быстрый, что портадж работает даже медленнее https://forums.gentoo.org/viewtopic-t-918820-start-0.html

Это раcчитано на тех, кто не ходит по ссылкам?

it seems to greatly depend. Conclusion for me is: they scarcely differ.
pypy:
emerge --update --newuse --keep-going --deep --tree --quiet-build=y  -a @worl  168.28s user 5.95s system 99% cpu 2:55.16 total

python3:
emerge --update --newuse --keep-going --deep --tree --quiet-build=y  -a @worl  271.40s user 6.33s system 99% cpu 4:38.64 total

python2:
emerge --update --newuse --keep-going --deep --tree --quiet-build=y  -a @worl  323.13s user 6.50s system 99% cpu 5:30.59 total
tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Это расчитано на тех, кто читает до конца.

python3.2:
real   0m15.112s
user   0m14.817s
sys   0m0.219s
pypy2.0:
real   0m31.482s
user   0m30.619s
sys   0m0.352s 
pypy-bin-1.9:

119.26user 2.99system 2:58.14elapsed 68%CPU (0avgtext+0avgdata 611440maxresident)k
0inputs+0outputs (1major+46678minor)pagefaults 0swaps

(drop cache)
python-3.2:

119.56user 3.22system 3:02.41elapsed 67%CPU (0avgtext+0avgdata 611200maxresident)k
0inputs+0outputs (51major+46466minor)pagefaults 0swaps
python2.7:
Code:	
real    1m20.119s
user    1m19.284s
sys     0m0.825s
78.53user 0.82system 1:19.36elapsed 99%CPU (0avgtext+0avgdata 1817632maxresident)k
0inputs+0outputs (0major+127789minor)pagefaults 0swaps	

python3:
Code:	
real    1m6.659s
user    1m5.835s
sys     0m0.813s
65.79user 0.81system 1:06.63elapsed 99%CPU (0avgtext+0avgdata 1876432maxresident)k
200inputs+0outputs (1major+130936minor)pagefaults 0swaps	


pypy2_0:
Code:	
real    1m1.223s
user    1m0.134s
sys     0m1.078s
59.16user 1.02system 1:00.19elapsed 99%CPU (0avgtext+0avgdata 4344896maxresident)k
0inputs+192outputs (0major+303639minor)pagefaults 0swaps
anonymous
()

Linux -> Windows

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

Или получается, что портеж ускоряется в два раза. Радиус кривизны рук решает.

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

Так, я все веселье пропустил, но все же.

Изначально был вопрос: Заменит ли Rust язык Си в области написания библиотек общего назначения. Ответ: нет...

Тут я согласен, заменить вряд ли сможет.

... потому что библиотеку на Rust нигде нельзя использовать (в отличие от библиотеки на Си).

Резюмирую: использовать библиотеку на Rust из любого другого языка невозможно. При большом желании (и изначально принятом решении) можно писать на Си с синтаксисом Rust, но при этом не будет половины синтаксиса и стандартной библиотеки.

Но вот тут не соглашусь. Почему всю библиотеку надо писать на кастрированной Ржавчине? Библиотеку можно и нужно писать как положено, используя полноценный язык, а потом надо просто сделать над ней тонкую обертку на кастрированной Ржавчине для доступа из Си. Последний шаг - это необходимая плата за использование разных языков в одном проекте и его, вроде как, можно и автоматизировать. Есть же библиотеки на полноценном С++, которые можно использовать с Си - для них просто написаны сишные обертки.

Кстати, я не уверен, что #[no_std] необходим, если есть возможность прилинковать стандартную библиотеку.

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

Есть же библиотеки на полноценном С++, которые можно использовать с Си - для них просто написаны сишные обертки.

Я как раз про это и спрашивал. Как сделать обёртку на Rust к библиотеке на Rust. Ответа не было. Рассказали только про FFI, который в Rust есть на том же уровне, что и в Python, Java, SBCL, Racket, ...

Кстати, я не уверен, что #[no_std] необходим

«When calling Rust code you will not be executing in a Rust task and will not have access to any runtime services that require task-local resources. Currently this means you can’t use the local heap, nor can you spawn or communicate with tasks, nor call fail!() to unwind the stack. I/O doesn’t work because core::io (unfortunately, and incorrectly) uses @-boxes. Even logging does not work. Calling any code that tries to access the task context will cause the process to abort. Because code is not executing in a task, it does not grow the stack, and instead runs on whatever stack the foreign caller was executing on. Recurse too deep and you will scribble on random memory.» (с) http://bluishcoder.co.nz/2013/08/08/linking_and_calling_rust_functions_from_c...

Так что не вариант. У OCaml и то шансов больше: http://caml.inria.fr/pub/docs/manual-ocaml-312/manual032.html#htoc249

monk ★★★★★
()
Ответ на: комментарий от monk
$ ls
treble.c  treble.rs
$ cat treble.rs 
// treble.rs - a rust library for tripling numbers.

#![crate_type = "dylib"]

pub fn treble_real(value: i32) -> i32 {
    println!("hello from rust");
    value * 3
}

// wrapper
#[no_mangle]
pub extern fn treble(value: i32) -> i32 {
    treble_real(value)
}
$ rustc treble.rs 
$ ls
libtreble.so  treble.c  treble.rs
$ cat treble.c 
#include <stdint.h>
#include <stdio.h>

int32_t treble(int32_t value);

int main() {
    printf("9 tripled is %d\n", treble(9));
}
$ gcc treble.c -L. -ltreble -o treble                             
$ ls
libtreble.so  treble  treble.c  treble.rs
$ ./treble 
hello from rust
9 tripled is 27
$ rustc -v
rustc 0.12.0-pre (f8426e2e2 2014-09-16 02:26:01 +0000)

Так лучше? Вроде как все работает.

Мне кажется, эта статья - http://harkablog.com/calling-rust-from-c-and-python.html - чуть более актуальна, она хоть в этом году написана))

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

Ну т.е. no_std вовсе не обязателен, в std много всякого полезного, что не использует std::rt.

Вообще, я был уверен, что надо просто вызвать std::rt::init(....) (http://doc.rust-lang.org/std/rt/fn.init.html) и можно использовать все возможности языка, но сейчас вот попробовал и просто так оно не работает, надо будет поразбираться.

Другой вопрос, что если нельзя использовать рантайм (ну на голом железе запускается, например), то насколько Ржавчина без родного рантайма удобней простого Си. Я не пробовал, но мне не кажется, что это все равно не будет просто «Си с синтаксисом Rust». Надо будет как-нибудь посмотреть на всякие игрушечные ядра ОС на Ржавчине и тому подобное.

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

Сейчас немного почитал и поэкспериментировал. Мде, документации по этому делу не сильно-то много. Вышло чего-то вроде:

std::rt::init(0, std::ptr::null)); // можно нормальные argc и argv передать
let task = native::task::new((0, std::uint::MAX)).run(|| {
    // тут уже можно, вроде как, любой код вызывать
});

По крайней мере у меня так нормально заработали spawn() и fail!, так что, думаю, в этом направлении надо смотреть.

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

Извиняюсь за четыре сообщения подряд :( .

Я дурак, можно просто native::start вызвать, он сам все сделает. Вот:

#![crate_type = "dylib"]
#![feature(phase)] // для подключения логгирования

extern crate native;

#[phase(plugin, link)]
extern crate log;

pub fn treble_real(value: i32) -> i32 {
    native::start(0, std::ptr::null(), proc() {
        // проверка логгирования
        info!("test warn");

        // проверка создания тасков и передачи сообщений
        let (tx, rx) = channel();
        spawn(proc() {
            tx.send("Hello from a task!".to_string());
        });
        let message = rx.recv();

        // проверка обычного io
        println!("{}", message);

        // проверка убийства задачи fail`ом
        spawn(proc() {
            println!("hello from bad proc!");
            fail!("test fail");
        });
    });

    value * 3
}

#[no_mangle]
pub extern fn treble(value: i32) -> i32 {
    treble_real(value)
}

Сишный файл тот же.

$ rustc treble.rs && gcc treble.c -L. -ltreble -o treble && RUST_LOG=info ./treble
INFO:treble: test warn
Hello from a task!
hello from bad proc!
task '<unnamed>' failed at 'test fail', treble.rs:29
9 tripled is 27
$ 

Так что, думаю, Ржавчина все же может нормально использоваться для написания библиотек, дергающихся из других языков.

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

можно просто native::start вызвать

Действительно, работает. Ну тогда может действительно C/C++ заменит.

monk ★★★★★
()

отправились в могилу гиганты прошлого (Fortran, COBOL, Lisp)

ну да, скажи это, например, разрабам Octave или Emacs

upcFrost ★★★★★
()

Мир не стоит на месте, как отправились в могилу гиганты прошлого (Fortran, COBOL, Lisp)

Читать всю простыню не буду, наверняка кто-то уже говорил, что lisp никуда не отправлялся. Вообще тема просто мастурбация от малолетних говнокодеров с их офигенно интересным мнением по теме.

spec_po_kiskam ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.