LINUX.ORG.RU

быстрый взгляд на C++0x


0

0

Страуструп описал вкратце улучшения, грозящие всем программёрам С++ в следующем стандарте, который должен выйти к 2009 году. Немалая толика софта под линукс пишется на С++ поэтому новость будет интересна не только разработчикам, пишущим на С++. Итак, что же нам светит:

* язык будет лучше поддерживать системное программирование
* язык будет проще в обучении и преподавании

Обещается опциональная сборка мусора и поддержка параллелизма. Внимание разработчиков стандарта фокусируется на расширениях, которые "меняют способ которым люди думают" (дословно!). Добавлено наиболее значительное расширение - "концепция" как "тип типов" (посредством where-выражения) и обобщенный список инициализации. Обещано, что вектора базовых типов будут работать не медленнее встроенных массивов тех же типов. В общем всё для того, чтобы сделать обощённое программирование таким же мейнстримом как объектно-ориентированное.
Также комитет по языку уже проголосовал за добавку в STL хешей, регекспов, смарт-поинтеров, генераторов случайных чисел и математических спец-функций. Появится новый тип итераторов - auto с автоопределением своего типа. Наконец-то стандартизаторы обещают уделять внимания простоте не меньше, чем гибкости но, тем не менее, не в ущерб последней.

Просьба языковой флейм не начинать, языки всякие важны, языки всякие нужны.

>>> Подробности

★★

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

> VBScript уже давно используется для таких задач. Плачете, что у вас его нет?

Прочитай мой пост ещё раз 15, а то с первого раза тебе не понять.

PS: ничего против Питона не имею. Просто пример привёл.

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

Ее купить проще (напечатана в издательстве Питер, перепечатка оригинала от Addison-Wesley, в оригинале "Generative Programming. Methods, Tools, and Applications" Krzysztov Czarnecki and Ulrich W. Eisenecker). 8-) Русский вариант в нете ни где не видел, а английский где то в eMule проскакивал.

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

> Все дружно читаем книгу К. Чарнецки и У.Айзенкера "Порождающее программирование". Я думаю после этого у здравомыслящих людей неостанется вопросов типа: "Какой язык круче" или "За каким языком будущее".

Оглавление и отрывок на http://shop.piter.com/book/978546900118/

Не впечатлило ;)

yyk ★★★★★
()

>чтобы сделать обощённое

Какое-какое?! ;)))

php-coder ★★★★★
()

А как же работа с сетью/графикой в стандартнйо поставке?.. Или они уже передумали?..

А вообще, язык плавно превращается не просто в диназаврика, а уже в какого-то монстра... Нет это хорошо, что язык становится уневерсальным... но не до такой же степени... А вообще, надо пробовать :) Ждем года так 07-08 ;)

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

> Я, как-то, 5 квадратных сантиметров картины Рембранда видел, тоже не впечатлило, ни чего не понял. 8-)

Ну, если выбирать автомобиль для гонок, поверхностного взгляда с расстояния в 500 м. на БелАЗ будет достаточно, чтобы понять - не, не пойдет... ;)

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

Кстати, про питонистов.

>несколько людей с форума уже безрезультатно поломали свои копья бившись над этой, в принципе несложной, интересной и ответственной, задачей. >Однако ничего рабочего мы к сожалению не имеем до сих пор... forum.vingrad.ru/index.php?showtopic=72429&st=90

>Клоуны. "Питон - такой хороший изык". Только ни для чего путнего непригоден, как на поверку оказывается. Если для такой простой задачи пистон не подходит, то как же на нем можно напесать что-то более сложное? Где же его хваленые хэши и dictionary?

>anonymous (*) (04.01.2006 14:13:00)

Клоун. Подсветку на питоне не сделать? Открою мега-секрет: IDLE и WING написаны _полностью_ на питоне. И, прикинь, там даже подсветка есть.

А то, что надо определённые слова окружать тэгами <a></a> -- так это вообще детский сад:

words = ('if', 'for', 'while', ...)

for word in text: if word in words: word = '<a href = "bla-bla-bla/wiki/%s.html">%s</a>' % (word,word)

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

> Все дружно читаем книгу К. Чарнецки и У.Айзенкера "Порождающее программирование".

http://www.books.ru/shop/books/245636
Опять предлагается велосипеды самим изобретать?

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

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

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

Будушее - за метаязыками, т.е. за Common Lisp, Template Haskell и подобными. С - для системного программирования останется, по-видимому. Это его ниша.

PS: А г-н SLiDER читал "On Lisp" Грэхема?

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

В топку твой лисп. Ты на нем что-то серьёзнее "hello world" написал, уродец? То то же...

anonymous
()
Ответ на: Кстати, про питонистов. от anonymous

Что-то мне в голову пришла чудесная идея, адаптировать C++ для web:)

--------- <html> <body> <? #include "Web/Framework.h"

using namespace html;

void web_main() { if (!hCookie::singleton()->exists("some_cookie")) out << "You are not authorized to fuck." << endl; else out << "Welcome, dude!" << endl;

return 0; } ?> </body> </html> -----------

Для того, чтобы на Си++ можно было писать в стиле ПХП, нужен только небольшой парсер и в итоге мы получим хорошие CGI скрипты со всей мощью -) А вот чтобы на ПХП писать как на Си++... Можно только долго пукать в лужу и ничего не добиться.

Бред, а все же, что в голову не прийдет, когда ЛОРу начитаешься.

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

Читал. И что мне с ним делать (с Lisp-ом). Заметте, я ни чего не имею против функциональных языков. Но, в силу ряда причин, не вижу ни какой возможности применять их в своих задачах (встраиваемые системы, обработка сигналов, системы управления). Lisp, в первую очередь, именно функциональный язык, и в этом его сила, он великолепно подходит для решения рекурсивных задач (например обработка списков). Но только псих станет применять его для обработки сигналов или построения систем управления, тем более для этих целей у Lisp-а нет ничего, ни инструментария, ни переносимости на, специфичные для этих задач, платформы.

З.Ы. А метапрограммирование в C++ достаточно мощное (если уметь им пользоваться). Хорошим доказательством этого является Порождающая Библиотека Расчета Матриц (GMCL).

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

>Клоун. Подсветку на питоне не сделать? Открою мега-секрет: IDLE и WING написаны _полностью_ на питоне. И, прикинь, там даже подсветка есть.

>А то, что надо определённые слова окружать тэгами <a></a> -- так это вообще детский сад:

Там ссылка в постинге есть: иди и напиши им это. Они здорово посмеются.

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

>Там ссылка в постинге есть: иди и напиши им это. Они здорово посмеются.

Если я правильно всё понял, проблема у них _совсем_не_в_кодировании_. И вопросов по кодированию там не стоит. Проблема -- в в разработке формата wiki.

Просто чел котороый первым запостил на лор про это приплёл питон ну совсем не в тему Ж)

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

>только псих станет применять его для обработки сигналов или построения систем управления

Часть софта в робототехнике и встраеваемых системах пишется на лиспе.

Sun-ch
()
Ответ на: комментарий от Sun-ch

>Часть софта в робототехнике и встраеваемых системах пишется на лиспе.

А с этого места можно по подробнее.

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

> Гммм. Но видеть то вы его, в данном случае, будете полностью, а не только гайку от колеса. ;)

Неа, оглавление - это "контуры" - достаточно.

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

> Читал.

Х.з. что ты читал, ибо лисп не функциональный язык, а метапрограммирование ты на нем и не видел (разбирался).

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

> Заметте, я ни чего не имею против функциональных языков.

Плохо значит читал.

ЛИСП НЕ ЯВЛЯЕТСЯ ФУНКЦИОНАЛЬНЫМ ЯЗЫКОМ!!!!!!!

Лисп может быть функциональным, императивным, ОО, каким угодно языком.

> Lisp, в первую очередь, именно функциональный язык,

Лисп, в первую очередь, именно язык с изменяемой семаниткой. И в этом его сила, он великолепно подходит для решения абсолютно любых задач.

>Но только псих станет применять его для обработки сигналов или построения систем управления,

Обоснуй.

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

ЛИСП НЕ ЯВЛЯЕТСЯ ФУНКЦИОНАЛЬНЫМ ЯЗЫКОМ!!!!!!!

(defun fact (n)
 (prog (result)
  (setq result 1)
  loop
  (if (= n 1)(return result)) 
  (setq result (* result n))
  (setq n (- n 1))
  (go loop)))

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

ugoday ★★★★★
()
Ответ на: комментарий от Sun-ch

А если поискать по "Functional Reactive Programming", то окажется, что и (о, боже!) Haskell используется в робототехнике.

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

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

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

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

catap ★★★★★
()
Ответ на: комментарий от Sun-ch

Я вот был злобный лиспоненавистник, с++ фил и жабоман. Но всетаки осилил почитать по Лиспу хорошие книги. И теперь я ненавижу жабу, с++ переношу с лугким сарказмом.

И мне стало жить хуже. Я прихожу на работу и плачу. А потом силой заставляю себя работать. Не получая практически никакого удовольствия.

Вот-так... :(

mutable
()

Что-то тормозит комитет. Я помню когда его (комитет по стандартизации C++) создавали приняли решение о выпуске новой версии стандарта каждые 5 лет, потом с 2003 выпуск нового перенесли на 2005, теперь получается на 2009.

А вообще считаю что C++ это наиболее совершенный из современных языков Совершенный в том плане что наиболее универсальный. А главной фичей, которой мне так не хватает в C# (и в Java, хотя я на ней давно не писал) - это шаблоны и STL.

Используя STL, можно писать код практически не используя напрямую операции выделения памяти, так что сборка мусора - имхо перебор, хотя может кому-то и нужна (горбатого могила исправит).

Генерики, появившиеся сперва в java 1.5 потом в .net 2.0 это все-таки не то. Да и производительность их оставляет желать лучшего (надеюсь что пока).

П.с. кстати C++ тоже не ООП-язык :)

dees
()

>(defun fact (n) > (prog (result) > (setq result 1) > loop > (if (= n 1)(return result)) > (setq result (* result n)) > (setq n (- n 1)) > (go loop)))

Ну и нахера тут столько строк и скобок? Засунь свой Lisp и ему подобные в одно место, предварительно скатав в трубочку.

Вот как надо.

int factorial (const int n) { return n == 0 ? 1 : n * factorial (n - 1); }

P.S. Гуляй вася, жуй опилки

Подпись: Voviks.

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

>конечно, бред, а перегружать http-сервер ты при изменении одной строки - будешь?

Зачем? Допустим поступил запрос http://site/index.cpp и допустим есть сервер приложений для С++, он сравнит дату создания index.cpp и index и если index.cpp новее, то запустит пересборку вот и все. Потом выдаст страницу, сгенерированную пересобранным index. Чем это принципиально сложнее jsp мне не понятно.

Кстати, main можно не писать сервер может сам дополнить код специальным образом:) Интересно, а может такое уже где-то есть?

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

>давно всё уже придумано http://www.cserverpages.com/

))) Дейтвительно. Странно, что не получило так популярности, как jsp. C++ намного богаче java возможностями, а скомпиленый нативный код всяк быстрее байт кода. Мне все таки кажется, что проблема C++ отсутсвия одной(хотябы) кроссплатформенной библиотеки, где есть все xml, gui, regexp и т.д. Только этим java и берет. А еще одна проблема: полное отсутствие совместимости между компиляторами (( Вот это дейтвительно проблемы. А вы все Java круче C++. Не так надо, надо правду говорить, java урезана до той степени, что ужк давно кроссплатформена и в этом ее сили. Время C++ еще не пришло.

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

Для особо тупых анонимусов поясняю, что вышеприведённый код факториала был на примером хорошего кода на лиспе, а примером _императивного_ применения лиспа. Помоему это было очевидно для любого индивида с неотрицательным iq.

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

>нативный код всяк быстрее байт кода.

Имхо, узким местом большинства вэб приложений является бд/сеть/браузер, а не скрипт.

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

>Имхо, узким местом большинства вэб приложений является бд/сеть/браузер, а не скрипт.

Согласен. Это я просто к тому, что C++ ничем не хуже, а в некоторых вещах даже лучше.

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

Ну чо, пофлеймим немножко?;)

Вопрос первый. Представьте, в базовом классе B описана виртуальная функция f, потом в дочернем классе D она переопределена. Что будет, если вызов f запихнуть в конструктор класса B - если на самом деле я создаю объект класса D? Оцените время поиска ошибки, если функция f вызывается не прямо из конструктора, а внутри некоторой функции, вызываемой внутри некоторой функции, вызываемой из конструктора.

Вопрос второй. Оцените легкость поддержки кода, наполненного по делу и не по делу перегруженными операторами.

Доп. вопрос. Как сочетается декларируемая бинарная совместимость по структурам данных с С - и необходимость хранения rtti информации для классов?

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

> Представьте, в базовом классе B описана виртуальная функция f, потом в дочернем классе D она переопределена. Что будет, если вызов f запихнуть в конструктор класса B - если на самом деле я создаю объект класса D?

Бред какой-то, зачем из конструктора вызывать функцию, если она нихрена для инициализации не делает??? Вы ерунду-то не выдумывайте...

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

>Вопрос второй. Оцените легкость поддержки кода, наполненного по делу и не по делу перегруженными операторами.

Если дело касается стандартной библиотека (предположим такая существует и называется C++ API), там будет все по делу. Например: для регэкспов будут перегружены операторы сравнения со строками и т.д. Прелесть ООП это повторное использование кода такого как какая-нибудь либа. А что касается вашего кода, то вы сами дажи распланировать и продумать как это использовать и по возможности не усложнять себе жизнь. Все диктуется здравым смыслом. Можно конечно надумывать себе задачки, а что будет, если я сделаю то, потом другое, а в нем третее. Если не знаешь как это будет себя вести, сомневаешься - не делай, пойди другим путем: слава богу в С++ возможностей море.

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

> Бред какой-то, зачем из конструктора вызывать функцию, если она нихрена для инициализации не делает???

Запросто. Функция может предоставлять некую информацию, нужную для инициализации. Причем делать это по-разному, для разных реализаций (в смысле - дочерних классов). А дальше эта информация стандартным образом используется (поэтому использование ее специфицировано в базовом классе). Единственное известное мне решение - это создание метода init, вызываемого после конструктора - т.е. фактически подхачивание объектной модели плюсов.

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

> Если не знаешь как это будет себя вести, сомневаешься - не делай, пойди другим путем: слава богу в С++ возможностей море.

О том и спич. Возможностей - море. И утонуть в них - легче легкого, особенно новичкам.

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

>Доп. вопрос. Как сочетается декларируемая бинарная совместимость по структурам данных с С - и необходимость хранения rtti информации для классов?

Просто надо разделить на две разных сущности структуры и классы. Структуры должны быть совместимы C, как поступать с классами дело C++(к вопросу о rtti). Не понятно в чем вопрос. Все прекрасно сочетается. Может есть какие-то подводные камни? Я просто действительно не знаю?

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