Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

С++ — самый красивый язык програмирования

Автор GaLL, февраля 10, 2009, 11:37

0 Пользователи и 1 гость просматривают эту тему.

GaLL

Цитата: Artemon от февраля  9, 2009, 13:17
"Некрасиво", "суржик", "мне не нравится", "уродский пиджин" - а С++ красиво смотрится? А звучит? Но функции свои при этом выполняет вполне.

Имхо, С++ - самый красивый язык программирования.

Алексей Гринь

Цитата: GaLL от февраля 10, 2009, 11:37
Цитата: Artemon от февраля  9, 2009, 13:17
"Некрасиво", "суржик", "мне не нравится", "уродский пиджин" - а С++ красиво смотрится? А звучит? Но функции свои при этом выполняет вполне.

Имхо, С++ - самый красивый язык программирования.

А как же функциональные?
肏! Τίς πέπορδε;

GaLL


Алексей Гринь

Если не писали, не поймёте. Логика приложения пишется проще и быстрее в разы. Ясно, что с вводом/выводом не ахти, но не всю же жизнь формошлёпством заниматься.
肏! Τίς πέπορδε;

Алексей Гринь

肏! Τίς πέπορδε;

okruzhor

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

Алексей Гринь

肏! Τίς πέπορδε;

GaLL

Цитата: "Алексей Гринь" от
Если не писали, не поймёте. Логика приложения пишется проще и быстрее в разы.

Οὐ πιστεύω. Если бы разработка на них велась быстрее, то они, соотвественно, сейчас были бы куда популярнее, чем есть на самом деле. Ну а если касаться проблем, где нужны лишь вычисления, то тут на передний план часто выступает производительность, а с ней функциональные ЯП не дружат, по понятным причинам.
А вообще, я ошибся. По крайней мере одно преимущество у них есть: неизменяемость переменных (простите за ὀξύμωρον, тут, конечно, слово "переменная" не очень подходит) помогает избежать многих типичных багов.

Алексей Гринь

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

Не в этом дело. Большая часть программистов - быдло, и для них последовательные операции чисто житейского плана "взять денег в банкомате > пойти до магазина > купить молока" на несколько страниц понять легче, нежели описать μαθηματικὴν модель в две строчки.

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

По производительности уступают совсем чуть-чуть (не более 10%, в некоторых случаях может быть даже быстрее; είπω только за компилируемый Хаскель, про остальные не οῖδα). Поделки на императивных языках μάλιστα часто теряют производительность и падают из-за утечек памяти (дружно вспоминаем русские игры вроде как с κακῇ γραφικῇ, но с жуткими тормозами) и прочих издержек работы с памятью напрямую. Некоторые хорошие комплияторы способны делать такие оптимизации, которые ни один С++ компилятор сделать не сможет никогда (в силу архитектуры языка).
肏! Τίς πέπορδε;

okruzhor

> Большая часть программистов - быдло, и для них последовательные операции чисто житейского плана "взять денег в банкомате > пойти до магазина > купить молока" на несколько страниц понять легче, нежели описать μαθηματικὴν модель в две строчки.

Ругань разочаровывает в собеседнике , но один вопрос всё-таки задам : как в принципе можно описать что-либо в 100 раз короче и с той же детализацией ?

GaLL

Цитата: "Алексей Гринь" от
Некоторые хорошие комплияторы способны делать такие оптимизации, которые ни один С++ компилятор сделать не сможет никогда (в силу архитектуры языка).

О, а тут уже хотелось бы τὰ δείγματα (примеры), т. е. какой код и как оптимизируется. Σ++ обладает относительно большой близостью к распространенным машинным языкам, не понимаю, как функциональные ЯП могут его сделать. К тому же в них часто применяется рекурсия, а это не есть εὖ для любого проца.

myst

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

myst

Цитата: "GaLL" от
Σ++ обладает относительно большой близостью к распространенным машинным языкам
Несмотря на это и очень качественные трансляторы на нём умудряются создавать таких чудовищ, что диву даёшься. 7-я ветка Оперы прославилась падучестью на ровном месте. Мощь C++ во всей красе. :)
Кстати, в этом году грозятся родить новый стандарт С++. Давайте делать ставки, через сколько лет появится транслятор, полностью его поддерживающий. ;)

Алексей Гринь

Цитироватьне понимаю, как функциональные ЯП могут его сделать

Уровень абстракции позволяет. Σ++ напрямую работает со всем, что можно, и ежели компилятор вмешается в его работу, то может всё загубить.
Я про Хаскель конкретных примеров сказать не могу, но вот как пример того, что более высокий уровень позволяет оптимизировать приложения: JIT-компилируемые языки, например, способны в райнтаме девиртуализировать виртуальные методы в обычные, и поиск метода по vtbl не будет оверхедом за ненадобностью (особенно в циклах). В С++ такого сделать нельзя. В Хаскелле подобного вида оптимизации по спискам, заменам рекурсий на итерации и всякой шляпе, не относящейся к этому форуму и этой теме никак.
肏! Τίς πέπορδε;

Алексей Гринь

ЦитироватьРугань разочаровывает в собеседнике , но один вопрос всё-таки задам : как в принципе можно описать что-либо в 100 раз короче и с той же детализацией ?

Классический пример по сортировке (алгоритмы ещё фигня, в функциональных языках типизация много высшего порядка, нежели в С++, и работать с нею одно удовольствие):

Цитата: C/C++void qsort(int a[], int lo, int hi) {
{
  int h, l, p, t;

  if (lo < hi) {
    l = lo;
    h = hi;
    p = a[hi];

    do {
      while ((l < h) && (a[l] <= p))
          l = l+1;
      while ((h > l) && (a[h] >= p))
          h = h-1;
      if (l < h) {
          t = a[l];
          a[l] = a[h];
          a[h] = t;
      }
    } while (l < h);

    t = a[l];
    a[l] = a[hi];
    a[hi] = t;

    qsort( a, lo, l-1 );
    qsort( a, l+1, hi );
  }
}

Цитата: Haskell
qsort []     = []
qsort (y:ys) = qsort (filter (< y) ys) ++ [y] ++ qsort (filter (>= y) ys)

А теперь вернёмся к обсуждению международного языка.
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от февраля 10, 2009, 16:26
Цитата: Haskell
qsort []     = []
qsort (y:ys) = qsort (filter (< y) ys) ++ [y] ++ qsort (filter (>= y) ys)
Справедливости ради сюда надо добавить определения «filter» и «++», а возможно и «<» с «>=».

nihao

Трое наскочат — первого заколи, второго застрели, третьему штыком карачун.
Суворов

Алексей Гринь

Цитата: myst от февраля 10, 2009, 17:00
Цитата: Алексей Гринь от февраля 10, 2009, 16:26
Цитата: Haskell
qsort []     = []
qsort (y:ys) = qsort (filter (< y) ys) ++ [y] ++ qsort (filter (>= y) ys)
Справедливости ради сюда надо добавить определения «filter» и «++», а возможно и «<» с «>=».

Пожалуйста.

Цитата: filter
filter :: (a -> Bool) -> [a] -> [a]
filter _ []                 = []
filter p (x:xs) | p x       = x : filter p xs
               | otherwise = filter p xs
Стандартная для любого ФП функция высшего порядка. Она стандартна и используется так же часто, как, скажем, цикл for в сиплюсе.

++ - стандартный оператор склейки нескольких списков в один. А вот реализация:
Цитировать(++) :: [a] -> [a] -> [a]
[]     ++ ys = ys
(x:xs) ++ ys = x : (xs ++ ys)
То же самое. Стандартней не бывает.
Это всё т.н. функции высшего порядка, вокруг них строится бóльшая часть философии ФП.

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

+ в примере стек сиплюса загнётся на больших списках, а хаскелевский нет (скомпилируется в итерацию).

А теперь всё же вернёмся к обсуждению международного языка, ребята. Я просто хотел сказать, что С++ - игры детишек в песочек.
肏! Τίς πέπορδε;

Rōmānus

Надежда - мать дураков (с) Литовская пословица


злой

Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

myst

Цитата: "Алексей Гринь" от
Стандартная для любого ФП функция высшего порядка.
Вот здесь-то и засада. В STL уже есть сортировка и не одна. Часть функций сравнения в Хаскеле может быть вынесена в библиотеку. Я к тому, что для честного сравнения надо либо в обоих языках использовать стандартную библиотеку, либо в обоих не использовать. Хаскелл в любом случае должен выиграть, но не столь эффектно.

myst

Цитата: "злой" от
Труъ ойтишнеги пишут на Оссемблере.
На каком оссемблере для какова працесара? :eat:
Ваще оссемблер не Ъ. Опкоды наше всё!

Алексей Гринь

ЦитироватьВот здесь-то и засада. В STL уже есть сортировка и не одна. Часть функций сравнения в Хаскеле может быть вынесена в библиотеку. Я к тому, что для честного сравнения надо либо в обоих языках использовать стандартную библиотеку, либо в обоих не использовать. Хаскелл в любом случае должен выиграть, но не столь эффектно.

Поспорил бы, оффтопа не хочу.
肏! Τίς πέπορδε;

Алексей Гринь

ЦитироватьЧасть функций сравнения в Хаскеле может быть вынесена в библиотеку.

Вы не поняли. Функции > и <= никуда не выносятся. Вот пример на Си - готов к употреблению, но он работает только с целыми числами. Пример на Хаскелле тоже готов к употреблению, но он принимает на вход любые сравниваемые объекты, не только целые. Это могут быть как float, так и списки, так и любые другие пользовательские типы, у которых определены операторы > <=. Примеры абсолютно идентичны в плане работы и не требуют каких-либо сторонних либ.

ЦитироватьЯ к тому, что для честного сравнения надо либо в обоих языках использовать стандартную библиотеку, либо в обоих не использовать.

Без функций filter, map и т.д. ФЯ не может существовать. Рассматривайте это как аналог императивным for, while (которых в ФЯ нет) и т.д., с той лишь разницей, что for и while зашиты глубоко в недрах компилятора, а filter и map описаны на самом языке. Вас, видимо, это смутило.
肏! Τίς πέπορδε;

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр