LINUX.ORG.RU

Чувства неполноценности тред: знает ли кто-нибудь свой стандарт и сдк?

 , ,


2

3

Сабж

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

Теперь вопрос на засыпку. Воспользуюсь преимуществом большого и толстого мэйнстрима, вот вам два языка: Java и С++. Хотя борщевиков тоже интересно услышать, у них особая ситуация - неписаные стандарты.

Вопросы:

1) Кто из лоровцев читал и _знает_ свои стандарты? Соответственно, для Java это Java Language Specification и Java Virtual Machine Specificaiton for Java 8 SE Edition, и для С++ это ISO/IEC 14882:2011 C++ International Standard

2) Кто из лоровцев чистал свои сдк, и знает как они работают? Вот так по чесноку, положа ногу на сердце. Соответственно, JDK stable (сейчас JDK8), JDK current (сейчас JDK9) для Java, и STL/Boost/Qt для C++

Я сейчас пытаюсь хотя бы просто по одному разу прочитать JDK9, и это уже чувствуется как титанический труд. Там чуть больше 10 тысяч классов, я успеваю прочитать пару десятков в день, и в памяти остается только самое поверхностное понимание, скорее даже неуловимое послевкусие, как от если на улице случайно пройти мимо восхитительной девушке. Java Language Specification я прочитал раз десять, но все равно находятся места, которые видишь как в первый раз.

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

Но.......

Между тем, я довольно часто встречаю людей, которые выносят мозг знанием детальных подробностей целых кусков SDK.

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

★★★★☆
Ответ на: комментарий от comp00

этому учат в институте
Охлол, ты серьезно?

у нас в НГУ был такой препод, Каменский. Чтобы сдать «программирование на си» на первом курсе мне реально пришлось читать талмуд со стандартом. Иначе прилетит какой-нибудь вопрос типа «расскажите точную последовательность operator precedence», и отправишься на пересдачу. Пересдачу семинарских занятий (с еще одним чуваком) я сдавал раз пять: вначале нас выгнали из помещений универа (в котором начались каникулы), потом из помещений Института Автоматики, а последняя пересдача вообще была у нас в комнате в общаге. Препод глумился на тему, что в нашем архиваторе Хаффмана могут переполниться счетчики, и на шестую пересдачу мы могли бы, например, переписать всё под «длинную арифметику». А еще архиватор бы не заработал на произвольнобитной операционной системе, архивируя бесконечный файл (из сети, например), поэтому нужно еще и алгоритм переделывать. Такие дела, все это правда спрашивают.

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

Чтобы сдать «программирование на си» на первом курсе мне реально пришлось читать талмуд со стандартом.

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

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

Очевидно (в бложиках же это в т.ч. и написано по десять раз). Просто «не меняют из-за обратной совместимости» как бы намекает (?), что это была историческая ошибка — проблем в такой структуре данных нет, есть проблема в том, что она косит под vector и контейнер (bitset же не array и не контейнер) ими не являясь, в итоге является исключительной вещью и среди всех векторов, и среди всех контейнеров вообще, ну то есть о чём тут речь и была изначально, будь оно просто отдельной структурой данных типа bitset — никакой бы необходимости в замене не было.

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

Просто «не меняют из-за обратной совместимости» как бы намекает

Ну с этим, как бы, никто и не спорит.

в итоге является исключительной вещью

И с этим никто не спорит.

косит под vector и контейнер ими не являясь

Ты утомительный идиот. Она вектор и контейнер. Так написано в стандарте в главе 23.3.7. От того, что ты повторяешь свою глупость, стандарт не изменится.

о чём тут речь и была изначально

4.2. Изначально речь была о том, что «не вектор, и не bool», потом формулировка сменилась на «не контейнер». О том, что уникальность создает проблемы, ты ни разу прямо не сказал, а все вермя твердил, как попугай, что «не контейнер». Хотя я тебя несколько раз спрашивал, о чем ты споришь, в надежде, что ты поймешь, что затупил.
Учись внятно формулировать свою позицию, а то так и будешь до конца дней спорить ни о чем, выставляя себя идиотом.

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

Да-да, я понял, что ты медленный и не понял о чём тут говорили. Не контейнер оно в смысле определения контейнера которое было дано ранее в стандарте, была куча ссылок на обсуждение этого факта и связанные проблемы, дальше можно извратиться и считать контейнерами все нормальные контейнеры которые соответствуют определению... и vector<bool> (ну просто так, а чё), но тогда «не контейнер» теряет смысл, так что ясно же, что речь нипрото, а про регулярность концептов и их классов. Т.е. даже тут всё ясно, если понимать про какой концепт речь (пусть про то самое определение контейнера) и понимать, что forward итераторы для класса с proxy под reference (этот самый бит) не взлетят.

А кстати, если в стандарте оно контейнер, допустим, то его итератор forward / random access? Где об этом написано? Или таки нет? Исключительный «контейнер» с исключительным «forward» итератором, получается.

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

и vector<bool> (ну просто так, а чё)

Ты совсем тупой, да? Не «просто так», а потому что в стандарте так написано.

тогда «не контейнер» теряет смысл

О чем я тебе и толкую. Но ты упоролся, похоже, и не понимаешь очевидных вещей.

ясно же, что речь нипрото

Нет, совсем не ясно. Я тебе несколько раз написал, что vector<bool> отличается от других и вообще исключение из правил, но при этом все же является контейнером по стандарту. И когда я тебя в очередной раз переспросил, о чем ты вообще споришь, ты не сказал «ну да, это я и имею ввиду, что он не такой, как все», а продолжил брызгать слюной что «все равно не контейнер!!!111адынадын».
Да и вообще, почему ты говоришь одно, имеешь ввиду другое, а я должен догадываться, что за дерьмо у тебя в голове? Хочешь что-то сказать, скажи это четко и ясно. А если несешь чушь, а тебя понимают буквально и считают идиотом, то не обижайся.

Исключительный «контейнер» с исключительным «forward» итератором, получается.

В стандарте написано, что «Unless described below, all operations have the same requirements and semantics as the primary vector template», а дальше про итераторы ни слова нет. Так что по идее должен «supports random access iterators».

понимать, что forward итераторы для класса с proxy под reference (этот самый бит) не взлетят.

Я не понимаю. Объясни почему.

ddos3
()

е6антяев трэд

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

что тебе непонятно в том, что первичны мысли, а не стандарт?

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

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от ddos3

Да я тоже ХЗ о чём ты споришь.

1. vector<bool> это тип который отличается поведением от остальных векторов, контейнеров, его итератор — соответствующих итераторов, в этом смысле он не является обычным вектором, контейнером, его итератор — соответствующим итератором.

2. Является исключительным по стандарту, хотя и не соответствует концептам? Ты согласился с тем, что вся ситуация неправильна и специализация по-хорошему должна быть deprecated. В этом случае я не вижу смысла ссылаться на неправильную часть стандарта которая должна быть deprecated и упираться в «исключительность по стандарту», если мы говорим про «как оно должно было бы быть».

Это по части «не вектор».

3. value_type контейнера совпадает с value type его итератора, который также должен быть forward итератором, то есть operator* должен возвращать ссылку на value type. Итератор vector<bool> не умеет возвращать ссылку на bool.

4. В этой же связи vector<bool> не хранит (l)значений типа bool — если он хранит такие объекты, то должно быть возможно получить ссылку (указатель, адрес) на них, то есть на bool, но нельзя.

Это по части «не bool».

Уже было — http://www.boost.org/doc/libs/1_55_0/libs/iterator/doc/new-iter-concepts.pdf.

quasimoto ★★★★
()
Последнее исправление: quasimoto (всего исправлений: 1)
Ответ на: комментарий от stevejobs

оправдывать кривую идею

А кто ее оправдывает? Я прекрасно понимаю, как идея внести в библиотеку такую оптимизацию vector<bool> пришла автору в голову, но не считаю, что она себя оправдала. И нигде не говорил, что она была удачной.

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

Да я тоже ХЗ о чём ты споришь

Это ты о чем-то споришь сам с собой. Я же просто в который раз пытаюсь тебе объяснить, что даже если что-то тебе в стандарте не нравится, оно все равно остается стандартом. vector<bool> в стандарте описан как контейнер, который немного не соответствует некоторым общим пожеланиям. И что ты после этого ни говори, контейнером он останется как минимум до следующей версии стандарта. Но, похоже, бесполезное это занятие, пытаться тебе что-то втолковать.

vector<bool> это тип который отличается поведением от остальных векторов

И? Я об этом еще позавчера писал.

Ты согласился с тем, что вся ситуация неправильна и специализация по-хорошему должна быть deprecated.

Никогда с этим и не спорил.

я не вижу смысла ссылаться на неправильную часть стандарта

А вот тут ты уже несешь пургу. Не бывает «правильной» и «неправильной» части стандарта. Стандарт - это и есть правила. Все, что в нем написано, правильно в пределах стандарта.

operator* должен возвращать ссылку на value type.

Для vector<bool> «ссылка на value type» заменена на прокси, которую итератор и возвращает. Не вижу проблемы.

vector<bool> не хранит значений типа bool
если он хранит такие объекты, то должно быть возможно получить ссылку на них.

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

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

что даже если что-то тебе в стандарте не нравится, оно все равно остается стандартом

вообще-то нет. Можно это заигнорить. В том числе, можно внести изменения в компилятор, поклав на стандарт. Или составить конвенции, по которым использовать vector<bool> нельзя, и «считаем, что его нет», тем самым создав другой стандарт. У них свой стандарт, у нас свой - только лучше.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от ddos3

Все, что в нем написано, правильно в пределах стандарта.

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

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Ты можешь либо соблюдать стандарт, либо не соблюдать его. Тут либо да, либо нет, не бывает наполовину.

Если ты решил отказаться от стандарта - ради бога. Но тогда уточняй, что говоря про векторы и контейнеры, ты имеешь ввиду не те «вектор» и «контейнер», которые описаны в стандарте с++, а о каких-то других «векторе» и «контейнере» из своего личного понилэнда. А то получается как с квазимодо, который мне четыре дня втирает, что «вектор не контейнер», и только потом сознается, что он говорит не про с++, а про что-то другое, что сам придумал по мотивам стандарта.

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

Как тогда быть с теми частями стандарта C++ которые есть на бумаге, но не были воплощены ни в одном компиляторе? Если «нельзя частично соответствовать Стандарту», то тогда получается, что C++ - это такой мертвый стандарт, у которого нет ни одной реализации

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от ddos3

У меня-то весь пониленд в 23.2 и 24.2, то что потом какой-то класс называют невзначай контейнером с особым reference и делает его единственной вещью во всём стандарте которую так называют и которая не соответствует исходным определениям. Я предпочту просто забить на такой класс, чем подстраивать под него всю терминологию, да.

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

Я предпочту просто забить на стандарт

fixed
Ну ок, хочешь забить - забей. Но мог бы еще три дня назад сказать, что ты говоришь не про с++, а про какой-то другой язык, который сам придумал.

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

Ты все правильно понял: нет ни одного компилятора, соответствующего стандарту c++. Каждый компилятор реализует какое-то подмножество языка и добавляет всякую отсебятину. Поэтому программистам приходится затачивать программы под конкретный компилятор (или несколько).

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

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

Я предпочту просто забить на стандарт

Вовсе нет

A vector satisfies all of the requirements of a container and of a reversible container (given in two tables in 23.2)

Unless described below, all operations have the same requirements and semantics as the primary vector template

[described below:]

reference is a class that simulates the behavior of references of a single bit in vector<bool>. The conversion operator returns true when the bit is set, and false otherwise. The assignment operator sets the bit when the argument is (convertible to) true and clears it otherwise. flip reverses the state of the bit.

Откуда дедукция — vector<bool> не удовлетворяет требованиям контейнера из 23.2, о чём было сказано четыре дня назад.

Ну развели тупнячка, подумаешь.

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

Я предпочту просто забить на стандарт

Вовсе нет

Вовсе да. Если ты говоришь, что в стандарте что-то не так, поэтому ты сделаешь вид, что одной главы там как будто нет, то это как раз и есть «забить на стандарт».

Откуда дедукция

какая дедукция?! Тебе же прямым текстом сказано: «удовлетворяет всему, кроме...» и дальше список, чему не удовлетворяет.

Ну развели тупнячка, подумаешь.

Да ничего страшного. Но вот чтобы в следующий раз не разводить тупняка, научись четко выражать свои мысли. Если тебе не нравится глава в стандарте, так и скажи, что «мне не нравится глава Х в стандарте, она нинужна», а не начинай что-то доказывать, как будто ее в стандарте уже нет, забыв предупредить об этом допущении оппонента.

ddos3
()
19 августа 2014 г.

я вот JAVA5 читал. считается?

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

В те доисторические времена, когда всей памяти на десктопе было 640К
А теперь не меняют из-за обратной совместимости.

Ещё один игзперд, уверенный что весь мир — PC. И не просто PC, а именно десктоп.

Тебе рассказать, сколько ОЗУ в МК, под который я пишу (да-да, на плюсах)?

16 килобайт. Шестнадцать. Килобайт.

В которые запихнуты: РТОС, обмен инфой с тремя десятками устройств, пересчет этой инфы в нужный формат и интерпретатор байт-кода управляющей программы.

«Put THAT in Pascal's pipe and smoke it» ©

alegz ★★★★
()

По теме — да, читал. Стандарт C++ и какую-то доку по STL от авторов, когда дофига свободного времени было — в студенческие времена и пока работу искал. Не сплошняком, конечно, и наизусть не помню — но, по крайней мере, в тексте ориентируюсь и могу найти нужное место когда возникают вопросы.

alegz ★★★★
()

Читал ECMAScript 5 как художественную литературу. Не уверен, что запомнил всё верно.

border-radius
()
Ответ на: комментарий от loz

Понравилось?

а должно было? единственный стандарт на ЯП, который читать лично мне было эстетически приятно - Haskell Report

Сколько полезного для тебя материала оказалось из того что ты прочитал?

понятия не имею. как определить полезность материала?

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

а должно было?

Не знаю, в плане принятых решений, исключений из общих идей и так называемых trade offs.

понятия не имею. как определить полезность материала?

Например что из того что ты прочитал изменило то как ты пишешь код в каких-то моментах?

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