Lev Walkin ([info]lionet) wrote,

The C++0x “Concepts” Effort

Свежачок (29 Dec 2011). Совершенно сногсшибательная статья про историю Концептов в C++, и почему её в итоге не включили в стандарт C++0x.

http://arxiv.org/pdf/1201.0027.pdf

В тексте непременно замешан Хаскель, Окамл, моноиды, полугруппы, Страуструп, Степанов и Олег™®©.



Haskell faired particularly well in this study, with Standard ML not too far behind, while Eiffel, Java, and C# did not do as well. The underlying pattern was that the three object-oriented languages relied on F-bounded polymorphism, whereas Standard ML and Haskell did not. Standard ML supports generic programming through Functors and signatures and Haskell supports generic programming via type classes. The take-away point for us was that a design for concepts in C++ should be based on the best features of Haskell and Standard ML, and not F-bounded polymorphism. Our case study influenced other programming language researchers. For example, Chakravarty et al. added associated types to Haskell (Шрифт мой —[info]lionet), filling in the only half-circle for Haskell in Table 1.
<...>
In addition to informing the design for concepts, FG inspired the implicits feature of the Scala language. (Шрифт мой —[info]lionet) The inspiration for FG came primarily from Haskell and Standard ML.
<...>
Nevertheless, type classes provide excellent support for generic programming, combining a modular type system with the convenience of implicit instantiation of generics […]. If only the divide between the imperative and functional programming communities had not been so large!


Как всегда, самая мякотка — на странице 42.

Enjoy!
Tags: fp

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    Your reply will be screened

    Your IP address will be recorded 

  • 50 comments

[info]macrop

February 3 2012, 07:25:27 UTC 3 months ago

жалко без перевода

[info]lionet

February 3 2012, 07:33:15 UTC 3 months ago

#facepalm

[info]macrop

February 3 2012, 09:08:42 UTC 3 months ago

да не.. читать я это и так могу. это просто каприз утренний

Deleted comment

[info]lionet

February 3 2012, 07:48:59 UTC 3 months ago

Там в тексте написаны критерии, по которым минусы расставлялись. Ничего военного: минус — когда возможно, но через жопу.

Deleted comment

[info]lionet

February 3 2012, 08:14:01 UTC 3 months ago

Ну да, только в C++ это через жопу. В остальных или совсем беленькие кружочки, или всё явно поддерживается.

[info]av_ast

February 3 2012, 11:01:57 UTC 3 months ago

Лев, спасибо за статью.

Лично мне, как человеку слабо разбирающемся в STL (и знакомым с ней только понаслышке), было интересно, наконец, выяснить какие же все-таки существуют проблемы, связанные с использованием шаблонов в сиплюсах. Так же, в целом, интересно было проследить историю развития GP и его различные имплементации: generic packages (Ada), type set-ы Лискова (CLU), сигнатуры и функторы МакКуина (HOPE и впоследствии SML), type classes (Haskell).
И про историю создания концептов было очень занимательно почитать. Спасибо.

[info]blacklion

February 3 2012, 13:40:57 UTC 3 months ago

Лисков — женщина! :)

[info]av_ast

February 3 2012, 13:55:16 UTC 3 months ago

Сорри, не посмотрел на полное имя :) А она умная тетка: разработчик CLU и Argus, прабабушка ООП, премия Тьюринга, одна из первых женщин Ph.D. from CS... Еще раз дико перед ней извиняюсь :)

[info]esil0x

February 3 2012, 12:42:26 UTC 3 months ago

Спасибо за статью.

"The Indiana proposal also differed from the Texas proposal in that it did not
support implicit modeling, but instead relied on model definitions to establish the
modeling relationship between a class and a concept."

Давно знал, что из-за каких-то придурков, предложивших свою реализацию, которая напрочь убивает всю идею концептов, Страуструпу пришлось отказаться от включения их в стандарт. Теперь подробнее прочитал, что это за придурки. Так и знал, что без ёбнутых функциональщиков тут не обошлось.

[info]migmit

February 3 2012, 22:37:05 UTC 3 months ago

То есть, вам нравится то гуано, которое он там предлагал?

[info]esil0x

February 4 2012, 13:51:27 UTC 3 months ago

Да. То гуано, которое он предлагал - это примерно то, в каком виде концепты реализованы в бусте. Я бы с удовольствием использовал бы его концепты вместо бустовских.
Тот вариант, в котором мэппинг между типом и концептом объявляется явно, по сути дублирует type traits.

[info]migmit

February 4 2012, 15:54:29 UTC 3 months ago

Гм. Вы читали статью? Там наглядно показаны некоторые острые углы в его предложении. И это, разумеется, только немногие.

[info]esil0x

February 4 2012, 17:25:05 UTC 3 months ago

Ну и что, что есть острые углы? В целом концептами пользоваться было бы можно, и они были бы лучше, чем концепты буста. Вариант с явным мэппингом был бы неиспользуемым.

[info]migmit

3 months ago

[info]esil0x

3 months ago

[info]migmit

3 months ago

[info]esil0x

3 months ago

[info]migmit

3 months ago

[info]esil0x

3 months ago

[info]migmit

3 months ago

[info]esil0x

3 months ago

[info]cottidianus

3 months ago

[info]migmit

February 3 2012, 13:51:37 UTC 3 months ago

This example shows that C++templates are not a form of parametric polymorphism

Я их уже люблю.

[info]max630

February 3 2012, 21:58:30 UTC 3 months ago

может, для начала следует прийти к хоть сколько-нибудь стабильной реализации в том же Хаскеле, чтобы он без звёздочек был чёрным, а потом уже двигать это в плюсы. Это же промышленный язык (TM), там надо чтобы код продолжал собираться следующей версией компилятора.

[info]nealar

February 4 2012, 11:55:45 UTC 3 months ago

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

[info]max630

February 4 2012, 12:36:10 UTC 3 months ago

Можно. В жабе вон их их нет - и ничего. Но можно сделать и так как в плюсах.

[info]max630

February 4 2012, 12:40:44 UTC 3 months ago

Я не совсем понял, что такое эти concepts, но если они для явной проверки, определён ли less для типа - то на это есть type traits и static asserts, и я бы даже не сказал что они как-то плохо выглядят.

[info]migmit

February 4 2012, 15:55:18 UTC 3 months ago

Фишка в раздельной компиляции.

[info]lionet

February 4 2012, 18:17:56 UTC 3 months ago

И в коротких error logs.

[info]max630

February 4 2012, 19:28:52 UTC 3 months ago

для раздельной компиляции нужны виртуальные классы

[info]migmit

February 4 2012, 19:33:57 UTC 3 months ago

Виртуальные классы — са-авсем другая фишка.

Речь шла о том, чтобы шаблоны из макросов на стероидах превратить в дженерики на стероидах.

[info]max630

February 4 2012, 20:02:12 UTC 3 months ago

Почему другая? Явовские генерики afaik так и работают: как тонкий слой поверх динамического кастования из Object. Думаю, если запилить однообразную реализацию шаблону основанную на динамическом разрешении - будет собираться намного быстрее. Но работать медленее, правда, но тут уж ничего не поделаешь.

[info]migmit

3 months ago

[info]max630

3 months ago

[info]migmit

3 months ago

[info]max630

3 months ago

[info]migmit

3 months ago

[info]esil0x

3 months ago

[info]migmit

3 months ago

[info]esil0x

3 months ago

[info]thesz

3 months ago

[info]migmit

3 months ago

[info]max630

3 months ago

[info]migmit

3 months ago

[info]max630

3 months ago

[info]migmit

3 months ago

[info]max630

3 months ago

[info]migmit

3 months ago

[info]max630

3 months ago

[info]migmit

3 months ago

Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…