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

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

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

[identity profile] theiced.livejournal.com 2013-01-26 04:18 pm (UTC)(link)
нет
нет нет нет
нет
нет нет
нет нет нет нет
нет
не надо

[identity profile] kiryl.livejournal.com 2013-01-26 04:32 pm (UTC)(link)
why?

[identity profile] theiced.livejournal.com 2013-01-26 04:41 pm (UTC)(link)
just because

мы его пользуем уже год. самое хуёвое решение принятое за три года. хуёвее чем использование монги.

[identity profile] kurilka.livejournal.com 2013-01-26 05:06 pm (UTC)(link)
Это не JIT

[identity profile] potan.livejournal.com 2013-01-26 09:41 pm (UTC)(link)
Пока сырой. И GC у него странный.
Но смотрю на него с надеждой - давно хочу язык для втсраиваемых систем и быструю мозилу ;-).

[identity profile] theiced.livejournal.com 2013-01-26 10:26 pm (UTC)(link)
guile же
ну или для метросексуалов - lua

(Anonymous) 2013-01-27 12:11 pm (UTC)(link)
Пункт 2 сам по себе не требует smp, и в 4.00 появился caml_register_thread для "чужих" потоков, так что это теперь делается. Пункт 1 решается форками+bigarray, если есть желание.

[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] zerthurd.livejournal.com 2013-01-27 05:02 pm (UTC)(link)
Нет.

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

[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] zamotivator.livejournal.com 2013-01-28 03:18 am (UTC)(link)
Компилируемый. В байт-код.

[identity profile] thedeemon.livejournal.com 2013-01-28 03:49 am (UTC)(link)
У меня основная таргет-платформа - винда, там форки дорогие, да и версию 4.0 еще недавно было сложно заиметь. Но в целом, да, при должных усилиях наверное все решается.

[identity profile] schrdinger's cat (from livejournal.com) 2013-01-28 05:58 am (UTC)(link)
Чем же он так плох?

[identity profile] migmit.livejournal.com 2013-01-28 06:48 am (UTC)(link)
Ну, ихние дженерики совмещают худшие черты настоящих дженериков и плюсовых шаблонов, а так, вроде, всё хорошо.

[identity profile] schrdinger's cat (from livejournal.com) 2013-01-28 07:17 am (UTC)(link)
Аргументация?

[identity profile] migmit.livejournal.com 2013-01-28 09:51 am (UTC)(link)
От дженериков: невозможно в каких-то случаях специализировать алгоритм вручную. Например, использовать массивы в общем случае, но битмаски для типа boolean, или что-то в этом роде.

От шаблонов: компилятор автоматически специализирует алгоритмы для всех типов, которые могут потребоваться. Это исключает возможность использовать потенциально неограниченное количество типов.

Page 3 of 3