Языковая политика

Общие обсуждения => Компьютеры и интернет => Topic started by: Euskaldun on 31 May 2023, 23:05:04

Title: Глупые вопросы по С++
Post by: Euskaldun on 31 May 2023, 23:05:04
Если вы не против, я поспрашиваю немного.

Вот есть в туториале такой код:
Quote
#include <iostream>
int main () {
std::cout<<"Hello";
return 0;
}

Вопросы:

1. STL используется в педагогических целях или в С реально нет нативной функции для простейшего вывода на экран? После бейсиковского Print это выглядит странно.

2. что именно делает функция cout? она вызывает заданную выше функцию из библиотеки?

3. Почему аргумент оформляется <<, а не <>?

Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 08:37:49
бумп :)
Title: Re: Глупые вопросы по С++
Post by: DarkMax on 01 June 2023, 09:28:12
Это поток вывода. << - оператор вставки. Довольно наглядно вы откидываете текст В поток вывода на экран.
Quote
поток вывода (или «выходной поток») используется для хранения данных, предоставляемых конкретному потребителю данных: монитору, файлу, принтеру и т.д. При записи данных на устройство вывода, это устройство может быть не готовым принять данные немедленно. Например, принтер все еще может прогреваться, когда программа уже записывает данные в выходной поток. Таким образом, данные будут находиться в потоке вывода до тех пор, пока принтер не начнет их использовать.
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 09:54:33
Если это функция потока, зачем нужна стандартная библиотека? Я не понимаю, что конкретно делает iostream и что cout :-\ ???
Title: Re: Глупые вопросы по С++
Post by: Upliner on 01 June 2023, 10:05:36
1. STL используется в педагогических целях или в С реально нет нативной функции для простейшего вывода на экран? После бейсиковского Print это выглядит странно.
В С/C++ нет такого понятия как "нативная" функция. Все функции нужно объявлять или импортировать. С++ унаследовал это свойство от С, который расчитан на написание ядер операционной системы, где действительно простейшие вещи нужно реализовывать самому. Но для "обычных" программ для этого есть стандартная библиотека.
2. что именно делает функция cout?
cout -- это не функция, это специальный объект, с которым можно производить разные операции. Одна из этих операций -- "<<" -- послать данные в поток.
Угловыми скобками указываются аргументы для include и аргументы для шаблонов, к cout это не относится.
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 18:55:50
короче, подсмотрел, что Питоне то, что выше - print (“Hello”)  :lol:

начну-ка я с Питона, попроще будет
Title: Re: Глупые вопросы по С++
Post by: Bhudh on 01 June 2023, 19:13:19
короче, подсмотрел, что Питоне то, что выше - print (“Hello”)  :lol:
А в Lua: print "Hello".
(При передаче одного аргумента скобки необязательны.)
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 19:23:36
мне только кажется, или Питон очень похож на Бейсик? :o
Title: Re: Глупые вопросы по С++
Post by: Bhudh on 01 June 2023, 19:27:03
В Basic табы не синтагматичны.
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 19:50:56
В Basic табы не синтагматичны.
вы о деталях, а я о принципах. интерпретатор, а не компилятор, построчное исполнение, конец строки - конец высказывания, при ошибке - стоп на строке с ощибкой и т.д. Пока что бейсик - бейсиком ??? :-\
Title: Re: Глупые вопросы по С++
Post by: Bhudh on 01 June 2023, 20:15:59
В JavaScript (и вообще в интерпретируемых языках) то же самое.

Off-Topic: ShowHide
Не "тоже самое", блджад, а "то же самое"! >:(


И вообще программы на Python вполне себе компилируются в exeшник.
Title: Re: Глупые вопросы по С++
Post by: Upliner on 01 June 2023, 21:36:38
вы о деталях, а я о принципах. интерпретатор, а не компилятор, построчное исполнение, конец строки - конец высказывания, при ошибке - стоп на строке с ощибкой и т.д. Пока что бейсик - бейсиком ??? :-\
Исполнение там не построчное, но в принципе да, похож.
И вообще программы на Python вполне себе компилируются в exeшник.
Этот exeшник -- просто байткод и интерпретатор байткода.
Title: Re: Глупые вопросы по С++
Post by: Upliner on 01 June 2023, 21:57:22
конец строки - конец высказывания
Нет, в Питоне существует куча способов разбить высказывание на несколько строк
Code: [Select]
    return {
        "structural": {k: (v + 1) / 2 for k, v in data.get("morphs", {}).items()},
        "metaproperties": {
            k: v
            for sublist, v in (
                ([("character_" + k), ("last_character_" + k)], v)
                for k, v in data.get("meta", {}).items()
            ) for k in sublist
        },
        "materialproperties": data.get("materials"),
        "type": data.get("type", ()),
    }

при ошибке - стоп на строке с ощибкой и т.д.
Бейсик мог выполняться даже с синтаксической ошибкой, пока не натолкнётся на это самое место, а Питон сразу пишет Invalid syntax и отказывается выполнять файл вообще. Ну и хорошо, что в Питоне нет этих диких End Sub, Next, и самое главное -- нормальный try-except вместо On Error Goto X.
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 22:00:28
вы опять о деталях, которые в данном случае несущественны. Вот давайте сравним Питон и С++ с Бейсиком попарно и попробуем угадать: какой язык проще зайдет бейсикисту со стажем? Где есть переносимые навыки, а где учиться с нуля? А то, что строчки можно \ разбивать - мишура, мелочь которая мало (или вообще никак) не влияет на сложность изучения языка
Title: Re: Глупые вопросы по С++
Post by: Upliner on 01 June 2023, 22:04:33
С этим не спорю, меня просто покоробили некоторые детали высказывания, но общий смысл высказывания верный.
Title: Re: Глупые вопросы по С++
Post by: Upliner on 01 June 2023, 22:10:18
А в Lua: print "Hello".
Писал об этом на ютубе, здесь ещё раз напишу: в Lua бесит отсутствие нормальной поддержки 64-битных целых чисел, в то время как Питон с лёгкостью посчитает факториал тысячи и выдаст результат с точностью до последней цифры.
https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Int64.html
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 01 June 2023, 22:15:16
С этим не спорю, меня просто покоробили некоторые детали высказывания, но общий смысл высказывания верный.
давайте я заранее 100500 раз извинюсь за профанство, некомпетенцию и т.д., но как бы посмотрите на название темы? У нас уже есть граммар-наци на сайте, зачем ещё кодинг-нацизм разводить? :) Неужели вы на секунду подумали, что я не понимаю, что ни один язык не будет 100% копией другого, иначе они не были бы разными языками? Но это всё - обязательная нумерация строк или использование табуляции для создания блоков - это всё важно для безукоризненного выполнения, да, но это вроде занавесок в горошек для меня.

Намного больше разницу я вижу в том, что в Питон вывод организуется простейшей командой (что для меня более привычно и интутивно), чем в С++, где для этого же надо вызывать библиотеку и сбрасывать выводимый текст в поток, где он маринуется, пока поток не выводится по пока мне мало понятным принципам. Это всё для меня непривычно, странно и (пока) малопонятно. Я понимаю, что полно туториалов в стиле: копируй как обезьянка и будет тебе профит, но я ни живые, ни языки программирования так изучать не умею. Мне надо понять как оно работает и самое главное: ПОЧЕМУ так? есть ли альтернативы? Вот тогда у меня будет ощущение, что я «выучил»
Title: Re: Глупые вопросы по С++
Post by: Upliner on 01 June 2023, 22:44:06
Ну вы уж извините, я не всегда могу разобраться, что для вас занавеска в горошек, а что действительно важная часть языка. Можем начать с азов. Языки бывают статически типизированные и динамически типизированные. Python и Basic -- динамически типизированные, поэтому действительно похожи друг на друга. А вообще как правило в Питоне функции тоже нужно импортировать из библиотек, но для print сделали исключение, не в последнюю очередь для простоты изучения. А так, на питоне можно и чуть ближе к С++ написать:
Code: [Select]
import sys

if __name__ == "__main__":
    sys.stdout.write("Hello")
Title: Re: Глупые вопросы по С++
Post by: Toman on 13 June 2023, 03:31:54
вы опять о деталях, которые в данном случае несущественны. Вот давайте сравним Питон и С++ с Бейсиком попарно и попробуем угадать: какой язык проще зайдет бейсикисту со стажем? Где есть переносимые навыки, а где учиться с нуля? А то, что строчки можно \ разбивать - мишура, мелочь которая мало (или вообще никак) не влияет на сложность изучения языка
Расскажу о себе. Начинал в детстве с Бейсика (исключительно классического, другие варианты оного не пробовал). Потом в школе учили Си (с использованием вот этого "плюсового" ввода-вывода, ну, тогда он писался чуть по-другому, но в целом в том же стиле), зашло отлично, потом ещё сам подучил Си и немножечко плюсов (правда, в архаичном варианте - ну т.е. современных полноценных плюсов со всеми позднейшими фишками особо не знаю, но, думаю, если надо будет покодить некий алгоритм на практике, смогу покодить, не влезая в эти дебри или по минимуму освоив использование тех из фишек, которые задействуются в применяемых библиотеках).

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

А вот Питон... Уж сколько лет он в дикой популярности, уж сколько лет я умом понимаю, что надо его освоить, потому что ну все же на нём умеют, аж школьников всех в школах учат, типа, и только я, лох, строчки написать не могу. Но нет. Вот все эти много лет просто не могу себя заставить это учить по доброй воле. Вот как открываю учебник, на первых же страницах плохеет.

Попробую объяснить, почему. Классический Бейсик - это хоть и интерпретируемый язык, но по логике работы это ж аналог ассемблера/программирования в машинных кодах. Просто машиной является не железный процессор, а очень нехитрый (в случае именно классического Бейсика) софтовый интерпретатор. И когда мы пишем на Бейсике, мы пишем так, как будто пишем на ассемблере, только с кучей упрощений жизни - как по части относительно сложных типов данных, так и по синтаксису. Но построение программы вот то самое.

Дальше - когда переходим к Си или Паскалю - мы хотя бы приблизительно представляем себе, как устроена программа в машинных кодах (а если не писали на реальном ассемблере - как вот я, например, классический Бейсик как раз помогает в облегчённом виде понимать "дух" ассемблерного программирования, скажем так), какие там нативные типы данных, и их - Си или Паскаля - синтаксис оказывается совершенно логичным с точки зрения облегчения/упорядочения низкоуровневого программирования - организации производных типов данных, вызовов функций и т.д.

А вот тот же Питон - это выглядит со стороны как что-то совершенно само по себе, во-первых - оно и на ассемблер не похоже (в отличие от классического Бейсика), и не является прозрачной очевидной процедурной обёрткой для реального машинного ассемблера/машинных кодов, а является языком самого что ни на есть высокого уровня (что само по себе сложно для начала, как бы ни казалось странным). Во-вторых, некоторые особенности его синтаксиса настолько выносят мозг, что пугают с порога. Вот именно меня пугают - как раз с бэкграундом в лице классического Бейсика, Си и нескольких языков с си-подобным синтаксисом (Java, JavaScript, Perl, PHP - хотя последние три уже несколько стремноваты в смысле количества некоего субъективного "синтаксического бардака" - но там он по крайней мере факультативен для программиста, т.е. на них я хотя бы могу писать так, чтобы код выглядел визуально похоже на сишный, и потом я сам смог это прочитать, если понадобится) и Паскаля.

Вот, грубо говоря, синтаксис какого-нибудь Лиспа в этом плане не пугает, или там PostScript'а (хотя на них я никогда не писал, и предметно не знаю). Но там всё визуально чётко. А вот Питон - пугает, в смысле, просто внешний вид кода на нём меня пугает почему-то.
Title: Re: Глупые вопросы по С++
Post by: Bhudh on 13 June 2023, 04:27:10
Интересно, каково Вам от Haskellʼа?
Title: Re: Глупые вопросы по С++
Post by: Upliner on 13 June 2023, 07:00:46
Очень странно, что в школе был С++. Продвинутая школа оказалась.
Title: Re: Глупые вопросы по С++
Post by: Toman on 13 June 2023, 14:55:24
Очень странно, что в школе был С++. Продвинутая школа оказалась.
Более правильно было бы сказать, что там был Си. От плюсов использовали по сути вот только этот "потоковый ввод-вывод", для удобства. Но что это такое, что такое классы, ООП - этого у нас тогда не было, просто потоковый ввод-вывод показали как некую данность. А так, учили процедурному языку фактически, и только на самом простейшем уровне. Так-то можно было бы, конечно, блюсти чистоту жанра и использовать строго классические сишные библиотеки ввода-вывода - но это потребовало бы сразу же учить язык более серьёзно - с указателями, управлением памятью и всё такое - а на это, видимо, не было времени или уверенности в готовности всех школьников к такому.

Причём, что самое прикольное, в нашей половине класса учитель перед началом курса именно по программированию устроил голосование для выбора между Си и Паскалем. Точно не помню, кажется, голосование потребовало чуть ли не два тура. И в итоге победил Си, чему я был рад (я его тогда не знал, но вполне осознанно голосовал за него, т.к. знал о некоторых его особенностях и "экологической нише").
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 13 June 2023, 14:56:54
надо было детям питон преподавать и не засирать мозги :negozhe:
Title: Re: Глупые вопросы по С++
Post by: Toman on 13 June 2023, 14:57:07
Интересно, каково Вам от Haskellʼа?
Не пробовал и даже не смотрел на него, совсем не знаю этого зверя даже приблизительно.
Title: Re: Глупые вопросы по С++
Post by: Toman on 13 June 2023, 15:09:35
надо было детям питон преподавать и не засирать мозги :negozhe:
То, что синтаксис питона на порядок (а то и более чем на порядок) сложнее синтаксиса Си (по крайней мере, без плюсов) - имхо, бесспорный факт. Сложный синтаксис может быть оправдан для программистов-практиков в частных областях деятельности, где это радикально сокращает физически объём набираемого и читаемого текста (например, в тех же Перле и Питоне ради работы со строками), когда речь идёт о реально больших программах и модулях. То же самое ООП со всеми причитающимися штуками - тоже только для практиков-профессионалов с большими программами.

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

Хорошо подходит для начального обучения как раз процедурный язык типа Си или Паскаля, с предельно простым синтаксисом, полное (почти полное, практически достаточное для учёбы) описание которого можно прочитать и усвоить до начала какой-либо практики.

Ну и да, в то время, когда мы учились в школе, о питоне ещё очень мало кто слышал, он не был мейнстримом тогда. Те, кому нужно было много фигачить со строками, напр. биоинформатики, ещё через несколько лет после того по большей части фигачили на Перле (как и веб-программисты тех времён, разумеется).
Title: Re: Глупые вопросы по С++
Post by: Квас on 13 June 2023, 15:22:57
надо было детям питон преподавать и не засирать мозги :negozhe:

Я не пробовал, но, по-моему, питон для детей - сомнительная идея. Там же невозможно обойтись без продвинутых вещей: итераторы, ООП. Например, в учебниках информатики Кушниренко первый вид цикла - это повторить N раз. На питоне это
Code: [Select]
for _ in range(5):
    ...
Использование подчёркивания неочевидно. А если попытаться объяснить смысл первой строки? "Чтобы повторить 5 раз, мы переменной, которая нам не нужна, проходим по некой коллекции длины 5, получится как раз 5 раз; эта коллекция - похоже на список, но не список". Мудрёно.

Имхо, паскаль для школьников - совершенно гениальный язык. Хотя бы за самостоятельный булев тип.
Title: Re: Глупые вопросы по С++
Post by: Квас on 13 June 2023, 15:26:14
То, что синтаксис питона на порядок (а то и более чем на порядок) сложнее синтаксиса Си (по крайней мере, без плюсов) - имхо, бесспорный факт.

А можно пример? Мне кажется, у всех нелисповых языков синтаксис примерно одинаково запутанный.
Title: Re: Глупые вопросы по С++
Post by: Upliner on 13 June 2023, 15:44:14
Из современных языков пожалуй у Go самый простой синтаксис. Как ни крути, а препроцессор у C ещё менее интуитивен, чем питоновские циклы.
Хотя бы за самостоятельный булев тип.
Это же вроде в C99 уже исправили, а может даже и раньше.
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 13 June 2023, 16:20:32
То, что синтаксис питона на порядок (а то и более чем на порядок) сложнее синтаксиса Си (по крайней мере, без плюсов) - имхо, бесспорный факт.
”бесспорный» для вас? потому что мировое сообщество думает наоборот :negozhe:
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 13 June 2023, 16:25:54

Code: [Select]
for _ in range(5):
    ...
Использование подчёркивания неочевидно.
может потому что не надо делать через задницу? Что сложного в while?
Code: [Select]
i = 1
n = 5

# while loop from i = 1 to 5
while i <= n:
    print(i)
    i = i + 1 
Title: Re: Глупые вопросы по С++
Post by: Квас on 13 June 2023, 16:41:53
может потому что не надо делать через задницу? Что сложного в while?
Code: [Select]
i = 1
n = 5

# while loop from i = 1 to 5
while i <= n:
    print(i)
    i = i + 1 

for _ in range(n) - идиоматичный питон, почему через задницу. Но вообще, while вместо for - это как-то фе, в любом языке. For на то и существует, чтобы вручую счётчик не менять в теле цикла. А питон со своими вездесущими итераторами сознательно сделал ставку на for.

У Кушниренко while - следующая тема.
Title: Re: Глупые вопросы по С++
Post by: Квас on 13 June 2023, 16:47:33
Из современных языков пожалуй у Go самый простой синтаксис. Как ни крути, а препроцессор у C ещё менее интуитивен, чем питоновские циклы.
Это же вроде в C99 уже исправили, а может даже и раньше.

А тайпчекер не разрешает складывать bool и int?
Title: Re: Глупые вопросы по С++
Post by: Euskaldun on 13 June 2023, 17:00:30

for _ in range(n) - идиоматичный питон, почему через задницу. Но вообще, while вместо for - это как-то фе, в любом языке. For на то и существует, чтобы вручую счётчик не менять в теле цикла. А питон со своими вездесущими итераторами сознательно сделал ставку на for.

У Кушниренко while - следующая тема.
так вопрос в чем: показать детям, что такое программирование или давать малозначительные детали, которые могут поменяться в следующей версии? С точки зрения педагогики while куда более понятнее и интуитивнее. Да и универсальнее