C++

fixxxer

К.О.
Партнер клуба
Да не. Проприетарные разработки, специализированные сервисы. Я то чисто ради интереса смотрел, пишут знающие люди. Просто вот посмотрел и понял, насколько мои знания в этой области устарели :)

nginx я бы, кстати, лапшой не назвал. Вполне себе с элементами ООП даже, несмотря на чистый C.
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Boost - правильно, не имеет.
А вот STL - часть C++. Если не веришь - открой спеки.
"Часть команды, часть корабля,..."
от того что она описана в спеке, не стала его частью в моем понимании, для использования в любом случае надо подключить include <vector>, если я в теории объявлю неймспейс std со своей реализацией vector (что понятно, я делать небуду ), компилятор же-не начнет ругать, что я использую нелицензированную (не описанную в спеке) версию std::vector и C++ как язык позволит мне это сделать.

Боюсь что расхождения у нас лишь в том как относится к STL. Для вас принципиальная жизненная позиция, в которую вы свято верите, STL часть C++, для меня include, такой-же как include билиотеки mfc, qt и т.д.

"На заборе, много чего написано, а за ним всего-лишь стройка".
 

whirlwind

TDD infected, paranoid
Ирокез не корми тролля. Человек явно дал понять, что vector != CArray. То что и то и то коллекции из разных библиотек его не волнует, ему чисто поспорить.
 

AnToXa

prodigy-одаренный ребенок
чуваки, а вот функция strlen() - это часть языка? :) а ведь для ее использования надо подключить <cstring>
 

Absinthe

жожо
AnToXa лучше бы про malloc спросил :)

Ирокез не корми тролля.
Трольь - это в твоем понимании человек, не разделяющий твои взгляды? Учитывая, что взгляды этого "тролля" являются фактами(прописаны в первоисточнике языка)
 

whirlwind

TDD infected, paranoid
AnToXa strlen это часть стандартной библиотеки языка C. Прям сходу недумая есть минимум два способа как определить длину строки в C/C++ без всяких библиотек: _asm и цикл по char указателю до \0. Не надо сравнивать с PHP. В PHP де факто array это высокоуровневый массив скаляров, а не последовательность элементарного типа. Это не позволяет работать с оперативной памятью компьютера из PHP так же как из C/C++. По этому strlen в PHP и strlen в C/C++ - это совершенно разные вещи и работают они как минимум с большими отличиями. strlen в PHP это часть языка (детерминированная функция - нет иного способа достичь результата), а strlen в С/C++ - это библиотечная функция (то же самое, что обязательно напишет каждый разработчик 100500 раз). Это и есть разница между языком высокого и языком низкого уровня. Чем выше уровень языка, тем больше абстрагированность от аппаратной платформы, на которой программа будет исполняться.

> Учитывая, что взгляды этого "тролля" являются фактами(прописаны в первоисточнике языка)

Факт - это то что есть в реальности, а не чьи-то взгляды, подпертые официальными документами (спецификациями). Например, демократия - это спецификация, а путен наш президент - это факт. Чуешь, о чем я? malloc - и вообще stdlib это C, а не C++. В C++ используются аналоги malloc/free которые new/delete (это не функции - это конструкция языка C++ такая же как if/else etc). Absinthe в C++ ты шаришь слабо - это тоже факт.
 

AnToXa

prodigy-одаренный ребенок
strlen это часть стандартной библиотеки языка C
уговорил :) пусть будет std::strlen() - функция стандартной библиотеки языка C++, часть языка, по-твоему получается что нет, т.к. можно тот же самый функционал написать самому.

Пример из php некорректен, потому что в C++ char* - это не строка, это указатель на char, ты можешь в пхп точно также назвать строкой массив из символов с нулем на конце, и спокойно написать цикл, который по нему пройдется этот нолик найдет. В C++ строка - это как раз std::string, а не char*. Также есть мнение, что понятие "строка" - вообще строго не определено в контексте C++ и каждый выдумывает сам.

Непрактично считать частью языка только его синтаксис и семантику, поэтому "окружение" и "стандартную" библиотеку впихивают в описание языка, в стандарт в данном случае, это какбе удобно. Если какой-то умный человек решает сделать "C++ implementation", которая не содержит standard library, то эта реализация просто неполна.

В C++ используются аналоги malloc/free которые new/delete (это не функции - это конструкция языка C++ такая же как if/else etc).
вот эта "конструкция языка" может быть переопределена как глобально так и для определенных типов, т.е. можно сделать свою и многие делают, удивительно, но это же противоречит тому определению, что ты дал выше.

Факт - это то что есть в реальности, а не чьи-то взгляды.
Во, факт в том, что есть стандарт, который описывает язык C++, часть этого стандарта посвящена описанию standard library (заметь, нет слова template там никакого).
И еще факт в том, что у тебя есть мнение и согласно этому мнению, библиотека частью языка не является.
Вывод?

Кстати, я тут почитать стандарт собсна решил на эту тему :)
и там написано, что может быть два вида реализаций
hosted: есть все, что описано в стандарте, предполагается, что программа будет исполняться внутри некоей operating system.
freestanding: когда ос может не быть, но реализация все равно обязана предоставить некий минимальный набор заголовокв и функций (ну и перечислены они, с десяток наверное).
 

whirlwind

TDD infected, paranoid
Пример из php некорректен, потому что в C++ char* - это не строка, это указатель на char, ты можешь в пхп точно также назвать строкой массив из символов с нулем на конце, и спокойно написать цикл, который по нему пройдется этот нолик найдет.
Никто не может гарантировать что элемент X такого массива не будет изменен по ходу работы на данные другого типа. Ты не можешь получить низкоуровневый доступ к скаляру PHP.

вот эта "конструкция языка" может быть переопределена как глобально так и для определенных типов, т.е. можно сделать свою и многие делают, удивительно, но это же противоречит тому определению, что ты дал выше.
Ниче не понял. Полиморфизм противоречит ООП? new является единственным верным способом выделения памяти - то есть в данном случае детерменированной функцией языка C++. Что чему противоречит?
 

tz-lom

Продвинутый новичок
whirlwind
хватит маяться дурью и доказывать что стандартная библиотека не часть С++ , с таким же успехом можно доказывать что и new это не часть языка, т.к. может быть реализованна через malloc и вызов конструкторов, в свою очередь malloc можно реализовать на асме для конкретной ОС просто вызвав её API напрямую.
Да, стандартная библиотека написана на С++ , полностью. Факта того что она описана в стандарте это не отменяет. А значит если ты напишешь компилятор который компилирует С++ код но не предлагает стандартную билиотеку, такое поделие может носить название Cwhirlwind но не C++.
P.S.
очень наглядно это показывает GCC

g++ helloworld.cpp
gcc helloworld.cpp -lstdc++
 

cDLEON

Онанист РНРСlub
AnToXa
В ПХП strlen - функция, вкомпилленная в ядро. Вместе со строками.
В СИ,СИ++ это библиотека, которую нужно подключить.
tz-lom
От части - соглашусь. Например, что делать без print, cin, cout, если нужен вывод на экран :)
 

AnToXa

prodigy-одаренный ребенок
пойдем по порядку.
Никто не может гарантировать что элемент X такого массива не будет изменен по ходу работы на данные другого типа. Ты не можешь получить низкоуровневый доступ к скаляру PHP.
вообще каким местом это относится к теме-то? ты программист - гарантируй, кто за тебя программу пишет?

Ниче не понял. Полиморфизм противоречит ООП? new является единственным верным способом выделения памяти - то есть в данном случае детерменированной функцией языка C++. Что чему противоречит?
тут кто-то недавно указывал другим, что они C++ не знаю, а сам теперь.
ни полиморфизм, ни ооп никаким боком сюдя не относятся, я говорил о перегрузке operator new() и его вариантов.
противоречие я вижу вот в чем: ты говоришь что "new - конструкции языка", но выше говорил, что критерий "часть языка или нет" - это "можно ли написать свое", так вот для new - можно.

cDLEON
нету никаких "строк" в C/C++, есть конвенция, что бывают массивчики char-ов с ноликом на конце, для них есть некие функции, но это совсем не аналог строк в php.
 

fixxxer

К.О.
Партнер клуба
strlen в PHP это часть языка (детерминированная функция - нет иного способа достичь результата)
PHP:
function my_strlen($s) {
    $s = (string)$s;
    for ($i=0; isset($s[$i]); ++$i) ;
    return $i;
}
 

cDLEON

Онанист РНРСlub
AnToXa
Да что вы говорите! А где я сказал, что в СИ есть строки?
tz-lom
Вот и я об этом ;)
 
Сверху