metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-01-25 06:43 pm

Компилируемый язык с статик типами и GC?

http://www.rust-lang.org/
Кто-нибудь на сие смотрел, чем оно полезно и зачем?

[identity profile] schrdinger's cat (from livejournal.com) 2013-01-27 04:15 pm (UTC)(link)
Я пробовал на нем писать. В принципе пока мне очень все нравится. Я слежу за развитием этого языка почти с самого начала, еще с тех времен, когда ничего кроме спецификации небыло. С тех пор язык довольно сильно поменялся. Например, они убрали классы, решив, что структуры вполне себе их заменят. Они убрали typestate, потому что им никто не пользовался.
В принципе, язык позволяет делать то же, что и С++, например, он умеет статический полиморфизм, но, в отличии от С++, он умеет это правильно. Например, я могу специализировать какую либо обобщенную сущьность для параметра определенного типа, как в с++, но для эмуляции разных языковых фич я использовать дженерики не буду, так как для этого есть совсем другой механизм (с помощью которого реализовано printf style форматирование с проверкой типов на стадии компиляции, как пример). Для параметров типов можно задавать type bounds и получать вменяемые сообщения об ошибках.

Самое вкусное в Rust, это легковесные потоки и модель памяти. Один легковесный поток занимает порядка килобайта памяти, их можно плодить в огромных количествах и строить свои абстракции на них, как в erlang. Модель памяти, это три типа владения объектами - owned, borrowed и managed указатели, ну и соответственно, возможность размещения объектов на стеке, в хипе(локальном для каждого потока) и в exchange heap, на объекты из которого можно ссылаться только через уникальный указатель, соотв. в языке реализована move semantics аки в с++ для таких указателей. В подробности вдаваться не буду, любой может почитать у них на сайте об этом. Насколько я понимаю, в самом начале чуваки как следует подумали на тему - как сделать так, чтобы простой dataflow анализ смог показать, может ли указатель быть безопасно разименован и, в итоге, пришли к такой модели.

Сейчас rust можно скачать, собрать (оно часа полтора собирается, не меньше, ибо тянет с собой LLVM и яростно его билдит) и даже написать чего нибудь. С библиотеками сейчас совсем все печально, на github совсем мало проектов на rust и они, как правило, игрушечные.

С golang его сравнивать глупо, go - на мой взгляд, скорее замена для питона на серверах гугла, а не замена С++ или С. А Rust, как раз для системного программирования, правда, у него есть свой runtime, его нельзя использовать как Си - без стандартной библиотеки.
Edited 2013-01-27 16:18 (UTC)

[identity profile] kurilka.livejournal.com 2013-01-27 04:20 pm (UTC)(link)
Немного тяжеловаты легковесные потоки - http://thesz.livejournal.com/954916.html

[identity profile] schrdinger's cat (from livejournal.com) 2013-01-27 06:14 pm (UTC)(link)
Насколько я понимаю, никто оптимизациями там еще не заморачивался.

[identity profile] kurilka.livejournal.com 2013-01-27 06:30 pm (UTC)(link)
Ну это было так... побрюзжать, ржавчина у меня тоже в списке "интересно поковырять".

[identity profile] berezovsky.livejournal.com 2013-01-27 06:33 pm (UTC)(link)
Огласите весь список, пожалуйста.

[identity profile] kurilka.livejournal.com 2013-01-27 06:34 pm (UTC)(link)
Вот ещё, рыбные места-то выдавать :)

[identity profile] berezovsky.livejournal.com 2013-01-27 06:45 pm (UTC)(link)
Тайное всегда становится явным! :-)

[identity profile] metaclass.livejournal.com 2013-01-27 05:13 pm (UTC)(link)
Ожидаемо, и, похоже, очень хорошо.