LINUX.ORG.RU

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


0

0

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

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

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

★★★★★

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

> И Ви таки уже полагаете, что те, кто пишет на заказ (http://en.wikipedia.org/wiki/Code_monkey) и те, кто "cool_па_жизне", придут к общему мнению?

Я так полагаю, что мы _все_ пишем на заказ, так что это противопоставление - мимо кассы.

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

> В С++ вообще много чего нет в СТАНДАРТЕ. Например, ничего не сказано о том, как должна выглядеть _реализация_ fprintf. И ничего, никого этого не смущает.

Плевать на реализацию. Указан интерфейс, указана функциональная спецификация. Для загрузчика классов и рефлекшена нет ни того, ни другого. Реализовать можно, не вопрос - но реализация такой фишки без поддержки компилятора будет в лучшем случае сильно ограниченной.

Вот мы имеем уже 3 разнык способа _только загрузки_ класса, довольно простой операции. Теперь представь, что тебе нужно не просто загрузить его, а и выяснить точный интерфейс - методы и их параметры, поля, базовые классы и т.д. Сколькими способами это можно сделать? Сколько велосипедов будет изобретено и у скольких из них будут квадратные колеса?

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

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

Imho кроме как при сериализации/десериализации такое практически никогда не нужно. Чтобы использовать объект в любом случае нужно, чтобы он реализовывал какой-то интерфейс, а скорее даже концепцию(интерфейс + семантика).

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

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

>Imho кроме как при сериализации/десериализации такое практически никогда не нужно.

Для сериализации методы и их аргументы не нужны тоже, но дело не в этом - например, где стандартный GUI toolkit? Средства доступа к БД? Разбора XML? Межмашинного взаимодействия? Си++ - это именно язык, и те, кому нужна _платформа_, имеют все основания быть недовольными. К сожалению, споры Java vs Си++ обычно скатываются именно к "А у нас есть платформа!" vs "А нам нах ненада!" (потому, что как _язык_ Java сливает :))

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

> потому, что как _язык_ Java сливает :)

А обосновать? Или нам таки принять на веру Ваши слова?

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

> И много ли Ви "на заказ" "фар гелт" ПРИКЛАДНЫХ прог напейсали?

А ты меня на работу нанять хочешь? Тебе и только тебе признаюсь - я не "напейсал" ни одной программы. Я даже не знаю, что это такое - "пейсать", что-то связанное с пейсами? А "фар гелт" что такое? Не все знают идиш, сюрприз, да?

>> потому, что как _язык_ Java сливает :)

>А обосновать? Или нам таки принять на веру Ваши слова?

Вам вернуться к заветам св. Проф. Луговского и заняться самообразованием. Например, почитать Александреску - и потом сказать, как такое сделать в Java.

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

> а ты не знаешь, что такое метапрограммирование :) Вы квиты ;)

не совсем так. Есть Метапрограммирование и есть Метаязыки
Метаязыки чаще всего предоставляют возможности метапрограммирования,
но обратное не верно. С++ позволяет метапрограммирование, но он не метаязык

PS.
лисперы, задолбали уже, хороший язык лисп, очень хороший
попейте водички, не нервничайте

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

>Еще раз: Прочитайте про фабрики объектов.

Как только закончу читать книгу по Ruby, так сразу :)

Меня спросили зачем нужен reflection - я ответил =) Мне не надо никаких альтернатив (про factories я в курсе - правда пока не знаю в деталях как они работают).

Factories есть как в С++ так и Java. Правда писать вышеупомянутую тулзу мне удобнее на Java т.к.
а) нет заморочек с указателями
б) тулза должна быть платформо-независимая
в) под C++ нет нужного API
г) eclipse в качестве IDE, опять же, рулит (когда я последний раз смотрел C/C++ plugin, Ctrl+click наподобие джавы оно не имело)
д) скорость работы важна не столько, сколько читаемость кода (львиную долю времени занимает screenscraping на мэйнфрейме)
е) в моём случае, на Java кодить получается быстрее нежели чем было бы на C++ - опять же за счёт пунктов а) и г)

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

>К сожалению, споры Java vs Си++ обычно скатываются именно к "А у нас есть платформа!" vs "А нам нах ненада!

>(потому, что как _язык_ Java сливает :))

А мужики-то не знают!

Даёшь цитаты из Александреску! Хотя осмелюсь предположить что то, что "нельзя реализовать на Java" реализуется на ней, но по-другому нежели на С++ (опять же, за счёт того, что С++ - язык, а Java - язык+платформа)

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

>>(потому, что как _язык_ Java сливает :))

>А мужики-то не знают!

Кому надо - тот знает :D

> Даёшь цитаты из Александреску!

Это сложно. Проще тебе книгу прочитать.

> осмелюсь предположить что то, что "нельзя реализовать на Java" реализуется на ней, но по-другому

Ну, от этого недалеко до утверждения о Тьюринговской полноте обоих языков... А я и в самом деле хотел бы увидеть списки типов на Java. Если есть ссылка - буду признателен.

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

>С++ позволяет метапрограммирование, но он не метаязык

это не метапрограммирование, а банальные макросы =)

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

geek, видать авторы boost.mpl тоже не знают, что такое метапрограммирование.

С++ таки мультипарадигменный язык, если не знаете какие парадигмы бывают, то идите учится

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

>С++ таки мультипарадигменный язык, если не знаете какие парадигмы бывают, то идите учится

мальшик, если авторы boost считают макросы метапрограммированием - то они могут идти на йух.

И перечисли-ка что там такого мультипарадигменного.

И что ты понимаешь под парадигмой

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

>С++ таки мультипарадигменный язык, если не знаете какие парадигмы бывают, то идите учится

Geek и CrackedMind, не ссорьтесь ;)

http://en.wikipedia.org/wiki/Multi-paradigm - про С++ написано: generic (template metaprogramming), imperative, object-oriented (class-based)

В таком случае Java тоже мультипарадигменна, т.к. в ней тоже самое есть (если не ошибаюсь, templates появились в 5.0).

С другой стороны, object-oriented подразумевает imperative (чаще всего?), и спорно, насколько template programming является парадигмой (опять же, в С++ зависит от imperative/OO)

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

> В таком случае Java тоже мультипарадигменна, т.к. в ней тоже самое есть (если не ошибаюсь, templates появились в 5.0).

Вот только в ней нельзя написать "просто процедуру" (только методы), в отличие от. А шаблоны Си++ куда мощнее generic'ов Java. А формально, пожалуй, да - Java мультипарадигменный язык.

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

geek, ты boost.mpl хотя бы видел? Это template metaprogramming library.

Императив, ООП, структурное программирование, обобщенное программирование

Если это не парадигмы поддерживаемые С++, то что тогда такое парадигмы? Если генерация кода на стадии компиляции не метапрограммирование (шаблоны и препроцессор), то опять же, что ТЫ под этим понимаешь, ты так и не поделился с нами своими знаниями) Просвети сирых и убогих )

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

>>Компиляторы C++ разрабатывались ГОДАМИ, в них вложено столько трудов и идей, что транслятор C++ оказался поистине бриллиантовым.

>gcc - один из лучших (соответствие стандарту) компиляторов - раздают даром. мс вс - похуже, но тоже даром. комо - самый лучший - 20$. бриллианты нынче дешевы. (дешевле чем мегабайты и даже чем гигагерцы)

Intel CC тоже даром для OS-проектов. Я говорил о себестоимости разработки, а не конечной стоимости компиляторов. Сколько лет "точили" GCC до приемлемого уровня качества трансляции исходного кода? Лет десять-пятнадцать?

>>Себестоимость системного и тем более прикладного ПО на C++ в РАЗЫ выше, чем для типобезопасных языков

>она конечно выше (т.к. нормальных программистов на С++ меньше и поэтому стоят они дороже. <<по крайней мере в штатах>> ), но не уж конечно не в разы.

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

>>Конечно, можно развить модульность как в Си

>от мля! это какая же в С есть модульность какой нет в С++?

ПЛОСКИЙ API!

>приведите пример ооп интерфейса на жаба, который нельзя былобы записать на С++ также просто и понятно.

Web Services API. J2EE API (EJB и JSP с JSF).

>>Поэтому большие системы, особенно распределённые пишутся на java, так как проще обозреть и понять архитектуру.

>дурь и маразм.

Tomcat и JBoss хорошо кластеризуются, знаете ли. :)

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

>А шаблоны Си++ куда мощнее generic'ов Java.

Чем мощнее? Шаблоны Си++ типобезопасны? На этапе компиляции компилятор может проверить легальность приведения типов?

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

>Кстати, кто там высказывал версию о том что JVM написана на C++ и у кого откуда такая трава? На С она написана, на С...

НА CPP она написана, на CPP. Во всяком случае при сборке Sun JVM 1.5.0 HotSpot из исходников на FreeBSD наблюдаются файлики *.cpp. :))

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

>Если генерация кода на стадии компиляции не метапрограммирование (шаблоны и препроцессор), то опять же, что ТЫ под этим понимаешь, ты так и не поделился с нами своими знаниями) Просвети сирых и убогих )

ну ты клоун. Для тупых KRoN73 даже пример привел, что такое _мета_программирование.

http://www.linux.org.ru/jump-message.jsp?msgid=1692780#1695380

шаблоны - это НЕ МЕТАПРОГРАММИРОВАНИЕ. Точка. Как бы этого не хотелось нескольким недоумкам.

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

>KRoN73 даже пример привел, что такое _мета_программирование.

>http://www.linux.org.ru/jump-message.jsp?msgid=1692780#1695380

>шаблоны - это НЕ МЕТАПРОГРАММИРОВАНИЕ.

Запишем: метапрограммирование - это интерпретатор с настраиваемым синтаксисом. Это истина, ибо это сказал geek c LOR'а.

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

>Запишем: метапрограммирование - это интерпретатор с настраиваемым синтаксисом.

это может быть и компилятор, кстати. И настраиваемый синтаксис - это только часть айсберга, не самая главная, кстати. Только приплюснутые эту мысль никак ниасилят =). А то у вас и ассемблер и Си - всё получается метаязыки. В общем, проследуйте к проф. Луговскому на лечение. Вдруг ещё не поздно.

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

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

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

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

как угодно. Советую отдохнуть от ЛОРа и подучить матчасть

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

>НА CPP она написана, на CPP. Во всяком случае при сборке Sun JVM 1.5.0 HotSpot из исходников на FreeBSD наблюдаются файлики *.cpp. :))

Аффтар читай тему дальше. У IBM с 5 версии джавы (под некоторые платформы с 1.4) полностью свой код.

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

>Сам ты бесполезная примочечка. Найди мне Symbian, Винду (кстати, с каких пор там ME? O_0) и Linux под Nokia 6230i

А зачем там нужна полноценная ОС? И что там на Джаве написано?

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

> Оно конечно да... Но сравнение моста и, например, тетриса не совсем корректно...

Сравнение моста и компьютерной игры с бюджетом в миллион долларов США вас устроит? :)

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

>С такой штукой как object factory, Вы, видимо, не знакомы?

Это такой паттерн который и есть тот самый свитч?

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

>Так вот, если я могу на С++ реализовать описание любого другого языка

Не описание ептеть. Метаязык в применени к программировунию обозначает что на этом языке моджно написать программу которая породит другую программу которая сделает целевую задачу. В это смысле C++ нихрена не метаязык - самое мета там - это препроцессор котрый нихрена не C++. Вот препроцессор там - вполне метаязык. А C++ ниразу.

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

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

Ну пиши все для void *.

>Пространства имен -- затем, чтобы разрабатывать код с ограниченной областью видимости сущностей.

Это вообще проще простого. Будет выглядеть приблизительно так же странно как boost::lambda.

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

>http://www.solarix.ru/for_developers/cpp/cpp-metaprogramming.shtml >А когда C++ программа генерирует скрипт на SQL для внесения данных в реляционную базу данных - это как раз метапрограммирование.

Этому определению соответсвует даже визуал бейсик! Тогда все языки - метаязыки.

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

> Каким образом dlopen тебе позволит создать нужный класс?

Можно. Если там будет зашит интерфейс который там ты точно знаешь есть у которого можно спросить что там за класс надо инстанциировать. В жабке этот интерфейс называется Class.

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

> С++ таки мультипарадигменный язык, если не знаете какие парадигмы бывают, то идите учится

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

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

> Вот только в ней нельзя написать "просто процедуру" (только методы), в отличие от. А шаблоны Си++ куда мощнее generic'ов Java. А формально, пожалуй, да - Java мультипарадигменный язык.

Тогда назовите хоть один немультипарадигменный язык.

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

>шаблоны - это НЕ МЕТАПРОГРАММИРОВАНИЕ.

Немного там есть. Правда это весьма слабо используемо. НАпример факториал шаблонами - это метапрограммирование. Другое дело что это так себе фейк не из реальной жизни, а просто чтобы выпендриться. Так что там можно лабораторными крысами пометапрограммировать, но выглядит это убого обычно.

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

C++ники почему то называют метапрограммированием чисто техническую возможноть вывернуться и уродским синтакисом таки заставить компилятор чего-то нагенерить на стадии компиляции - хотя это убивает саму основную идею метапрограмминга.

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

> Не описание ептеть. Метаязык в применени к программировунию обозначает что на этом языке моджно написать программу которая породит другую программу которая сделает целевую задачу.

1. на любом тьюринг полном языке можно написать тьюринг полный язык
2. любой язык кодегенератора - это метаязык ?

> В это смысле C++ нихрена не метаязык - самое мета там - это препроцессор котрый нихрена не C++. Вот препроцессор там - вполне метаязык. А C++ ниразу

препроцессор не тьюринг полный язык, поэтому не может быть мета
учи матчасть

>> Шаблоны - затем, чтобы не писать один и тот же алгоритм для разных типов данных.
> Ну пиши все для void *.

РЮ, ты дурак ?

> Этому определению соответсвует даже визуал бейсик! Тогда все языки - метаязыки.

на любом тьюринг полном языке можно написать тьюринг полный язык :)
правда не помню, кажись эту теорему еще не доказали

> Можно. Если там будет зашит интерфейс который там ты точно знаешь есть у которого можно спросить что там за класс надо инстанциировать. В жабке этот интерфейс называется Class.

ты сам понял то, что сказал ?

> Назовите хотя бы 2 фундаментальные парадигмы существующие в C++, и укажите согласно каким критериям они являются парадигмами программирования.

структурное и оо

> Тогда назовите хоть один немультипарадигменный язык.

паскаль, с, algol, fortran, lisp
мало ?

РЮ, не спорь, поучи матчасть лучше
а то зае..ло меня уже, дуракам одни и те-же примитивные вещи повторять

PS
lisp - как бы это сказать "не совсем" метаязык, его в отдельную группу выделяют, так как он у нас один такой :)

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

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

>2. любой язык кодегенератора - это метаязык ?

Это ж тут некоторые утверждают

>препроцессор не тьюринг полный язык, поэтому не может быть мета

Да ну! Кинь мне ссылку где написано что матаязык должен быть тьюринг-полный.

>РЮ, ты дурак ?

А что не так? Где горит?

>на любом тьюринг полном языке можно написать тьюринг полный язык :)

При чем тут полнота по тьюрингу к метаязыку?

>структурное и оо

А вторую часть вопроса? Согласно каким критериям например OO - это парадигма программирования? А то если взятся за википедию так там парадигмами такое названо - что глаза не могут читать.

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

>А зачем там нужна полноценная ОС? И что там на Джаве написано?

Я не утверждал что там нужна полноценная ОС. Но вот Jav'ы там как раз-таки хватает, и в принципе она "бесполезной примочечкой" не является.

(Кстати на смартфонах может CE а не ME винда? :))

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

> Советую отдохнуть от ЛОРа и подучить матчасть

Советую тебе последовать своему совету.

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

> А то у вас и ассемблер и Си - всё получается метаязыки.

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

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

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

>Ну пиши все для void *.

Ты попробуй, а потом сравни с шаблонами.

>> А формально, пожалуй, да - Java мультипарадигменный язык.

> Тогда назовите хоть один немультипарадигменный язык.

Да мне всё равно: пусть все существующие языки - мультипарадигменные (слово-то какое корявое). Мне хочется иеть определенные возможности: например, нормальные объекты, а не таблицы функций с ручным кастингом; мощную систему шаблонов, а не макросы с void *; минимальную и предсказуемую исполняющую систему, а не JVM. И из распространенных языков - это есть только в Си++.

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

>Ты попробуй, а потом сравни с шаблонами.

Ну будешь касты делать. И что дальше? Где тут метастость и мультипарадигменность? Это просто параметрический полиморфизм, который ни разу не мета и уж тем более не парадигма. А то намешали в котлеты уже таких мух, что от котлет ничего не осталось.

>И из распространенных языков - это есть только в Си++.

Дык это - с этим никто и не спорил. Однако все перечисленные фичи не делают C++ "метаязыком" или "мультипарадигменным".

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

> Ну будешь касты делать. И что дальше?

Дальше говорить бессмысленно.

> Это просто параметрический полиморфизм

Это _в том числе и_ параметрический полиморфизм. Но шаблоны позволяют сделать гораздо больше.

> ни разу не мета и уж тем более не парадигма.

Определние "мета" и "парадигма", которыми пользуешься ты - в студию!

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

>> 2. любой язык кодегенератора - это метаязык ?
> Это ж тут некоторые утверждают

это ты утверждаешь

>> препроцессор не тьюринг полный язык, поэтому не может быть мета
> Да ну! Кинь мне ссылку где написано что матаязык должен быть тьюринг-полный.

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

>> РЮ, ты дурак ?
> А что не так? Где горит?

на воре шапка

>> на любом тьюринг полном языке можно написать тьюринг полный язык :)
> При чем тут полнота по тьюрингу к метаязыку?

тем что любой язык может быть метаязыком, но это не имеет отношение к метапрограммированию

>> структурное и оо
> А вторую часть вопроса? Согласно каким критериям например OO - это парадигма программирования? А то если взятся за википедию так там парадигмами такое названо - что глаза не могут читать.

ПАРАДИГМА (греч. paradeigma - пример, образец),
1) образец, тип, модель (например, общественных отношений). 2) В философии, социологии - исходная концептуальная схема, меняющаяся со временем и характерная для определённого этапа в развитии науки модель постановки проблем и их решения. 3) В риторике - пример, взятый из истории для доказательства, сравнения. 4) В грамматике - система форм изменяющегося слова, конструкции, например имени, глагола.

если вам не нравиться, замените слово парадигма на слдово МЕТОД/МЕТОДИКА

и в общем - безграмотный вы человек, если с вами даже определения и термины надо прояснять


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

>Дальше говорить бессмысленно.

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

>Определние "мета" и "парадигма", которыми пользуешься ты - в студию!

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

Тот же ООП тут перпендикулярен - он в базовой своей концепции говорит о том что объекты инкапсулированы, могут наследоваться, и единственный метод общения - сообщения. Но подобная концепция может быть реализована и в императивной и в функциональной фундаментальной парадигме.

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

ООП - это технология а не парадигма (особенно применительно к C++). Если к смолтолку оно хоть как-то больше похоже на парадигму то в C++ нет. Само наличие структурных конструкций убивает основную идею - message passing как единственное средство. Цикл в смолтолке - это сообщение коллекции. Цикл в C++ - это управляющая структура. Например можно задолбать image смолтолка и выкосить понятие логического типа - и все хана - не будет никаких ifов. (если оно подметется гарбадж коллектором - для этого много усилий приложить надо).

Мета - дает возможность описывать что-ли бо в други терминах, более удобных, более компактных. Один раз я видел как человек вместо написания XSL промапил несколько макросов на препроцессоре cpp и описывал трансформации этим языком - получалось достаточно прикольно (правда отладка этого была адом) - но это именно метапрограммирование. Тот же фактораил C++-шаблонами - это тоже пример метапрограмминга, но это уродство ибо само кривенное описание ничего не дает с точки зрения улучшения качества программы, вид то у него уродский - напоминает костыль, да и возможности ограничены константными значениями.

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

>это ты утверждаешь

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

>тем что любой язык может быть метаязыком, но это не имеет отношение к метапрограммированию

что-то я сомневаюсь что тут употреблялось именно в этом смысле - ибо любой универсальный язык программирования - метаязык в этом смысле. Даже VB.

>ПАРАДИГМА (греч. 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.

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

А тебе не кажется, что фраза

> Парадигма говорит о том каким образом происходит выполнение программы

противоречит

> ФП - это programming paradigm.

a? Именно _programming_ paradigm, не execution. А выполнение - оно всегда происходит в императивном стиле, (традиционный) компьютер по-другому не умеет. Парадигма - это то, как пишутся программы.

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

Это настолько общее определение, что оно просто бессмыленно - под него можно подогнать вообще ВСЁ. "более удобных, более компактных" - по сравнению с чем? Си - метаязык по сравнению с ассемблером, SQL - по отношению к dBASE, а "язык и хорошая библиотека" - по отношению к "тот же язык, но без хорошей библиотеки".

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

То есть хоть на что-то он способен. Кстати, он способен и на большее.

> В 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).

Вообще-то, на мой здравый смысл, Computer Science и Programming - вот "две конкретные разницы". А вообще эта фраза - тавтология. "Парадигма - прадигменная".

В общем, определения терминов, которые ты используешь, по смыслу как-то расходятся с теми, что используют все остальные. Может, именно ты и прав, а все остальные нет, но... ну ты понял :)

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