migmit: (Default)
[personal profile] migmit
Наткнулся на язык Rust. Позиционирует себя как "C, сделанный человеком, знающим Haskell". Читаю официальный туториал — и понимаю: да, так и есть. Алгебраические типы. Замыкания. Классы типов (называемые трейтами, но всем ведь всё понятно). И одновременно — язык достаточно близок к машине: не чисто функциональный, с указателями (причём, безопасными) — ну супер.

А потом натыкаюсь на такой пассаж:
The Rust compiler compiles generic functions very efficiently by monomorphizing them. Monomorphization is a fancy name for a simple idea: generate a separate copy of each generic function at each call site, a copy that is specialized to the argument types and can thus be optimized specifically for them. In this respect, Rust's generics have similar performance characteristics to C++ templates.
Ып. Вот тебе, бабушка, и сабж. Никакие это не дженерики, а обычные темплейты, только обрезанные. Попробовал на всякий случай свой тест — и, ЧСХ, Rust его зафейлил с совершенно невнятным сообщением об ошибке.

И сразу у меня впечатление, что делал этот язык не "человек, знающий Haskell", а "человек, прочитавший пару страничек из Душкина".

Date: 2012-12-25 10:13 pm (UTC)
From: [identity profile] udpn.livejournal.com
AFAIK unbounded polymorphic recursion не нужна. Тип списков, где каждый следующий элемент содержит больше [] в типе аргумента cons это какая-то бесполезная херня и Окасаки. Как, собственно, и ваш пример, который отлично превращается в один for. Контраргументация приветствуется.

Date: 2012-12-25 10:29 pm (UTC)
From: [identity profile] migmit.livejournal.com
Yawn. Мне как-то пофиг, что вам нужно, а что нет. Мне более интересно, что симпатичный язык, как оказалось, реализовывали абы как.

Date: 2012-12-25 11:05 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
"абы как" - это субъективно. Мне пофиг, что вы считаете специализацию "абы каком". У неспециализации также свои проблемы есть, нельзя говорить, что специализация хуже чем uniform representation.

Date: 2012-12-26 04:18 am (UTC)
From: [identity profile] migmit.livejournal.com
Да мне пофиг, что вам пофиг. В данном случае абстракция протекает.

А специализация-то нужна, кто бы спорил. Вот GHC, например, много чего специализирует. Что, почему-то препятствием не становится. Наверное, потому что специализация в нём не является единственно возможным выходом.

Date: 2012-12-26 04:55 am (UTC)
From: [identity profile] udpn.livejournal.com
Да всем пофиг, что вам пофиг. Zero overhead придуман не нами, и он нужен, в отличие от этих ваших цацкелей и растов.

>> что симпатичный язык
Что, вот этот очередной говноязык с говносистемой эффектов? Вот этот стопицотый высер на тему "как мы делали Си с сильной системой типов, но у нас нихера не вышло"?

Date: 2012-12-26 06:42 am (UTC)
From: [identity profile] migmit.livejournal.com
> Zero overhead придуман не нами, и он нужен, в отличие от этих ваших цацкелей и растов.

Сначала пусть заработает, и заработает так, чтобы абстракции не текли. Потом поговорим про zero overhead.

Date: 2012-12-26 12:18 am (UTC)
From: [identity profile] maxim.livejournal.com
Это типа golang от мозиллы :)

Date: 2012-12-26 04:19 am (UTC)
From: [identity profile] migmit.livejournal.com
Не, golang — это C, сделанный человеком, знающим C.

Date: 2012-12-26 06:07 am (UTC)
From: [identity profile] lionet.livejournal.com
Не, golang — это Limbo, сделанный человеком, который знает Limbo.

Date: 2012-12-26 06:38 am (UTC)
From: [identity profile] migmit.livejournal.com
Хм, а я-то не знаю Limbo. Стоит познакомиться?

Date: 2012-12-26 07:13 am (UTC)
From: [identity profile] lionet.livejournal.com
Это Go на VM (байткод) под Inferno (Plan 9). Я на него смотрел пристально несколько лет назад, но потом понял, что это недо-эрланг такой, и переключился на Erlang.

Date: 2012-12-26 06:43 am (UTC)
From: [identity profile] migmit.livejournal.com
Эм... а это Limbo можно на чём-нибудь живом запустить?

Date: 2012-12-26 07:13 am (UTC)
From: [identity profile] lionet.livejournal.com
Под маком запускается. http://www.vitanuova.com/inferno/limbo.html