LINUX.ORG.RU

Вторая часть интервью с Bjarne Stroustrup


0

0

Автор языка программирования C++ рассказывает о лучших примерах использования своего детища, об обобщённом программировании, о перспективах аспектно-ориентированного программирования, о сложностях изучения языков программирования и о невеждах, которые их используют, о том, что Java был во многом навязан общественности с помощью огромных бюджетов на рекламу и о многом другом.

Первую часть интервью можно прочитать здесь: http://www.techreview.com/InfoTech/17...

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

★★★★★

Проверено: Shaman007 ()

Ответ на: комментарий от r

>> это ты утверждаешь
> Где? Кто эту дурацкую ссылку про SQL привел?

ты утверждал что препроцессор это метапрограммирование
значит и генерация SQl то-же метапрограммирование
и вообще любой язык - это метапрограммирование

>> ПАРАДИГМА (греч. paradeigma - пример, образец),
> 5) в программировании...?

да, или программисты изобрели собственный омоним ?

>> если вам не нравиться, замените слово парадигма на слдово МЕТОД/МЕТОДИКА
> Нихрена себе. В Computer Science/Programming очень конкретно различают понятия programming methodology и programming paradigm. Это две конкретные разницы: A programming paradigm is a paradigmatic style of programming (compare with a methodology, which is a paradigmatic style of doing software engineering).

> ООП - это software engineering, а вот ФП - это programming paradigm.

ООП - парадигма software engineering - вас такое устраивает ?
кстати вчитайтесь - a methodology, which is a paradigmatic style of doing software engineering

smalltalk не OOП язык а объектный язык и только поэтому он ООП

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

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

просто чудненько, молодой человек
ну ка дайте определение алгоритма ....

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

>Например можно задолбать image смолтолка и выкосить понятие логического типа - и все хана - не будет никаких ifов.(если оно подметется гарбадж коллектором - для этого много усилий приложить надо).

чудненько, молодой человек, продемонстрируйте пожалуста ваше идиотское утверждение

> Мета - дает возможность описывать что-ли бо в други терминах, более удобных, более компактных.

всегда более удобных, более компактных ? именно описывать ? а трансформировать ни-ни ?
кстати любая библиотека попадает под ваше определение
написание библиотеки - это метапрограммирование ?

> Тот же фактораил C++-шаблонами - это тоже пример метапрограмминга

ну наконец-то вы отгазались от ваших глупых утверждений

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

>Именно _programming_ paradigm, не execution.

Ну попробуй писать на прологе не учитывая как оно будет exceution.

>А выполнение - оно всегда происходит в императивном стиле, (традиционный) компьютер по-другому не умеет

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

>"более удобных, более компактных" - по сравнению с чем?

например в одном моем проекте:

select all person where (name ~ 'fox') or (name ~ 'scully') order by name ascending

разворачивается на лету в:

SELECT *, substring(ddb_body from '<[^\s]+ name="name"[^>]*>([^<]*)') AS name FROM documents WHERE TRUE AND (ddb_type='person') AND ((ddb_body ~* '<[^\s]+ name="name"[^>]*>([^<]*fox[^<]*)') OR (ddb_body ~* '<[^\s]+ name="name"[^>]*>([^<]*scully[^<]*)')) ORDER BY name ASC

достатчно очевидно по сравнению с чем?

>То есть хоть на что-то он способен.

Только выглядит страшно. Если бы он был способен на 5! - это было бы красиво. А это выглядит вот так:

template <int N> struct Factorial { enum { value = N * Factorial<N-1>::value }; };

template <> struct Factorial<1> { enum { value = 1 }; };

const int fact5 = Factorial<15>::value;

То есть мало того что это выглядит по меньшей мере странно в точке использвоания, так это еще и с точки зрения реализации brainfuck. И единственная фича этого - это вычисление на стадии компиляции.

Выглядит не "так задумывалось" а "так уж оно работает хотя для этого не предназначено".

>А вообще эта фраза - тавтология. "Парадигма - прадигменная".

Эта фраза - не тавтология. Определяется не значение слова "парадигма" а значение словосочетание "парадигма программирования".

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

>да, или программисты изобрели собственный омоним ?

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

>ООП - парадигма software engineering - вас такое устраивает ?

Конечно - тем более что я сам это сказал. Но это не значит что C++ мультипарадигменный с точки зрения программирования - его объекты императивны (процедурны).

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

> Но это не значит что C++ мультипарадигменный с точки зрения программирования - его объекты императивны (процедурны).

какие объекты ???
структура в памяти императивна ? он компилируется в императивный файл ? в c++ можно создать функцию ?
разберитесь ка с кашей в своей голове ....

кстати, в свое время -процедурный и функциональный стили - это были синонимы .....

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

>просто чудненько, молодой человек ну ка дайте определение алгоритма ....

А может всю БСЭ процитировать? Свяжите сначала с темой дискуссии.

>чудненько, молодой человек, продемонстрируйте пожалуста ваше идиотское утверждение

Вы хоть раз, молодой человек, видели как выглядят условия в smalltalk чтобы называть мое утверждение "идиотским"?

>всегда более удобных, более компактных ? именно описывать ? а трансформировать ни-ни ?

А что вы делаете когда пишете программу? "Трансформируете?"

>ну наконец-то вы отгазались от ваших глупых утверждений

Факториал константы шаблонами считать не надо - его надо считать калькулятором:)

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

>структура в памяти императивна ?

работа с этой структурой памяти - императивна. Последовательность шагов модифицирующих состояние.

>кстати, в свое время -процедурный и функциональный стили - это были синонимы .....

Ага. А сейчас дожились до того что параметрический полиморфизм называют парадигмой программирования. Куда катится мир...

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

>>просто чудненько, молодой человек ну ка дайте определение алгоритма ....
>А может всю БСЭ процитировать? Свяжите сначала с темой дискуссии.

:) просто смешные вещи говорите

>> чудненько, молодой человек, продемонстрируйте пожалуста ваше идиотское утверждение

> Вы хоть раз, молодой человек, видели как выглядят условия в smalltalk чтобы называть мое утверждение "идиотским"?

а вы "не молодой" человек выдили как оно исполняется ?

>> всегда более удобных, более компактных ? именно описывать ? а трансформировать ни-ни ?
> А что вы делаете когда пишете программу? "Трансформируете?"

занчит компилятор или интерпретатор ни в коем случае нельза нызывать
мета[языками, программами] ? чудненько

>> ну наконец-то вы отгазались от ваших глупых утверждений
> Факториал константы шаблонами считать не надо - его надо считать калькулятором:)

спор ради того что-бы доказать что вы знаете какую-то великую истину ......
а ну вас .....

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

>>Именно _programming_ paradigm, не execution.

>Ну попробуй писать на прологе не учитывая как оно будет exceution.

Вообще-то речь шла о противоречиях в твоих словах - о том, что есть парадигма.

(Кстати, ты не поверишь, но я знаю людей, которые на Прологе умудрялись писать в императивном стиле :D)

>>"более удобных, более компактных" - по сравнению с чем?

>например в одном моем проекте:

Хороший пример, но это - DSL, не метапрограммирование? (или это одно и то же? я запутался в твоих терминах). И опять же - речь шла, что под твое определение "метапрограммирования" пожно притянуть ВСЁ - и DSL, и библиотеки, и языки очень высокого уровня вроде Prolog. И эта общность делает такое определение бессмысленным.

> Только выглядит страшно. ... Выглядит не "так задумывалось" а "так уж оно работает хотя для этого не предназначено".

Ага :). Но спрячь это в макросе или функции - и всё нормально.

Насчет "не так задумывалось" - на память приходят слова Дуга Макилроя: "Успешный программный инструмент - это тот, который применяют (в том числе и) так, как его создатель и мечтать не мог".

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

> дожились до того что параметрический полиморфизм называют парадигмой программирования.

В этом треде? Ссылку, пожалуйста.

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

>а вы "не молодой" человек выдили как оно исполняется ?

Может вот так? (GNU Smalltalk):

Object class: #Boolean

Boolean comment:
'I have two instances in the Smalltalk system: true and false. I provide methods that are conditional on boolean values, such as conditional execution and loops, and conditional testing, such as conditional and and conditional or. I should say that I appear to provide those operations; my subclasses True and False actually provide those operations.' !

!Boolean methodsFor: 'basic'!

ifTrue: trueBlock ifFalse: falseBlock
self subclassResponsibility
!

ifFalse: falseBlock ifTrue: trueBlock
self subclassResponsibility
!

ifTrue: trueBlock
self subclassResponsibility
!

ifFalse: falseBlock
self subclassResponsibility
!

Boolean subclass: #False
False comment:
'I always tell lies. I have a single instance in the system, which represents the value false.' !

!False methodsFor: 'basic'!

ifTrue: trueBlock ifFalse: falseBlock
"We are false -- evaluate the falseBlock"
^falseBlock value
!

ifFalse: falseBlock ifTrue: trueBlock
"We are false -- evaluate the falseBlock"
^falseBlock value
!

ifTrue: trueBlock
"We are false -- answer nil"
^nil
!

ifFalse: falseBlock
"We are false -- evaluate the falseBlock"
^falseBlock value
!

>занчит компилятор или интерпретатор ни в коем случае нельза нызывать
мета[языками, программами] ?

А вы работаете компилятором? Сочувствую.

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

>И эта общность делает такое определение бессмысленным.

Оно было дано по отношению к языку. Но я всегда готов слышать альтернативное определение:)

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

>В этом треде? Ссылку, пожалуйста.

Вот тут http://www.linux.org.ru/jump-message.jsp?msgid=1692780#1693234 мне предложили пойти почитать книжку в которой в частности написано:

C++ supports multiple paradigms well. C++ has templates, overloaded functions, inheritance, and virtual functions - a rich collection of facilities to express a broad spectrum of patterns of commonality and variability. In C++, we can write a single List template - one set of source - that can maintain lists of any kinds of objects.

Или вот:

C++ is a programming language that supports multiple paradigms: classes, overloaded functions, templates, modules, ordinary procedural programming, and others.

Как я понял перегрузка функций - тоже парадигма.

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

>А вкниге есть и много полезного, я так думаю.

Есть. Но по сабжу книги лучше читать Generative Programming.

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

> Берём предложения по зарплате для Delphi-программиста и для MSVC-программиста. Ставим абсолютно одинаковое ТЗ (допустим, написать небольшую складскую программку или web-магазин). Сколько денег потребует Delphi-писатель и С++-писатель? Сколько времени займёт выполнение проекта в каждом случае?

Вопрос поставлен некорректно. Скажем так, Delphi-программисту даём писать, например, движок видеокодека, с возможностью запуска оного на оффтопике, linux, solaris. *BSD и т.п., а С++-нику, таки да, веб-магазин под IIS.

Вот и посмотрим, кто кого...

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

> Программы на TC / TP летали а проги на TC++ ползали как черепахи даже на 486). И нет этому никаких оправданий.

хм... а как насчёт кривизны компилятора?

> А Java это не только язык.

а мы тут как раз языки обсуждаем, кажется.

> J2me программы отлично бегают на сотовых.

да ну, а вы пробовали писать нативные проги под те же сотовые? И не стоит сбрасывать со счетов поддержку байткода java процессорами этих самых сотовых. (http://en.wikipedia.org/wiki/ARM_architecture - обратите внимание на модели с буковкой J и где они применяются)

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