Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 15.08.2017
Сообщений: 1

Нужен ли пробел после main?

15.08.2017, 09:57. Показов 6258. Ответов 97
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужен ли пробел?
Code
1
main ()
или
Code
1
main()
P.S. Глупый вопрос, но как всё-таки правильно писать?
Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2017, 09:57
Ответы с готовыми решениями:

Вставить пробел в строку после каждого символа «.» «,» «!» или «?», если за этими символами не следует пробел
Вставить пробел после каждого символа «.» «,» «!» или «?», если за этими символами не следует пробел (т. е. следует любой символ, ...

Ошибка no main class (заголовок com/javafx/main/Main) на другом компьютере
У меня возникла такая проблема. Если я создаю пример JavaFX приложения в Netbeans и компилирую его как устанавливаемый exe (Installing...

Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела.
Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела. Как сделать так, чтоб между точкой и...

97
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
05.10.2017, 19:20
Студворк — интернет-сервис помощи студентам
То есть практические и эстетические соображения не интересны? В таком случае вопрос, полагаю, исчерпан.
0
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
05.10.2017, 20:09
Практические и эстетические соображения интересны. Только представления о красоте и творчестве у разных людей разные. Мне, допустим, нравятся однобуквенные обозначения для переменных, потому что так принято в математике и я на этом вырос. Снижает это понятность и читаемость программы? Безусловно, да. Зато мне с такими переменными работать намного приятнее. Мне нравится преданный "анафеме" в программистском сообществе оператор goto. Почему нравится? Во-первых, чтобы ни говорили адепты структурного программирования, он несёт немалую практическую пользу и иногда удобен. Во-вторых, в существовании этого оператора я вижу глубокий философский смысл. Он основа основ в программировании. В нём одном выражена вся логическая сущность программирования, через него программа управляет сама собой. Педантики из компьютерного мира призывают меня отказаться от этого оператора. А по поводу отступов и табуляций... Не всегда их хочется делать так, как того требуют общепринятые правила хорошего тона. Иногда это просто отвлекает и мешает сосредоточиться на задаче, а подобная разметка кажется надуманной и навязчивой. И таких примеров много.

Вообще, попытка загнать всех в единые правила и рамки, как это делается в современном компьютерном мире, ущербна изначально. И это вовсе не означает, что я против хороших, качественных и умных программ.
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
05.10.2017, 20:41
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Снижает это понятность и читаемость программы? Безусловно, да.
Ну так может стоит постепенно менять привычки?
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Мне нравится преданный "анафеме" в программистском сообществе оператор goto. Почему нравится? Во-первых, чтобы ни говорили адепты структурного программирования, он несёт немалую практическую пользу и иногда удобен.
Иногда он действительно повышает читаемость программы, но такие случаи можно по пальцам пересчитать. Анафеме он предан за то что поощряет спагетти-код и хуже отражает замысел, чем циклы.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
через него программа управляет сама собой.
можно поподробнее?
Цитата Сообщение от JohnyWalker Посмотреть сообщение
А по поводу отступов и табуляций... Не всегда их хочется делать так, как того требуют общепринятые правила хорошего тона. Иногда это просто отвлекает и мешает сосредоточиться на задаче, а подобная разметка кажется надуманной и навязчивой.
Еще бы эти общепринятые правила существовали...
Сейчас даже текстовые редакторы, не говоря уж об IDE, могут расставлять отступы автоматически. В чем же вы пишете программы?
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Вообще, попытка загнать всех в единые правила и рамки
о "единых рамках" речи не идет. Хоть какое-то форматирование кода лучше чем "все в одну строку". Его ведь не от хорошей жизни придумали, а именно для того чтобы сделать программу понятной. В первую очередь для себя, потом - для других.
Не знаю как вам, а мне доводилось читать собственный код, написанный даже год назад. Не всегда поймешь что он должен делать, не говоря уж об алгоритме. Впрочем, тут больше вина комментариев чем отступов.
1
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
05.10.2017, 21:30
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну так может стоит постепенно менять привычки?
Не-а, я с ужасом представляю себе математика и физика, который в своих формулах использует многобуквенные обозначения для переменных. Это как?

https://www.cyberforum.ru/cgi-bin/latex.cgi?Energy = \frac{Mass\ light\_velocity^2}{\sqrt{1 - \frac{velocity^2}{light\_velocity^2}}}

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

Иногда он действительно повышает читаемость программы, но такие случаи можно по пальцам пересчитать. Анафеме он предан за то что поощряет спагетти-код и хуже отражает замысел, чем циклы.
Тогда анафеме следует предать и сишные указатели. Те же goto, только для данных. И код делают сложным для понимания, надо сказать. А по поводу кода, похожего на спагетти, я же не призываю совсем отказаться от циклов или конструкцию ветвления заменить на фортрановский арифметический IF. Кстати, когда-то с этим арифметическим IF программисты жили, листинг ветвлений был почти как в ассемблере. И ничего, справлялись. Я, конечно, к такому не призываю, это крайность и абсурд, но и отказ от goto считаю тоже глупостью. Он может прекрасно уживаться с циклами и ветвлениями, и даже образовывать с ними гибриды. Программист, который не любит и не понимает goto, это вовсе и не программист. Он не понимает, что все эти циклы и ветвления это и есть тот самый goto, просто красиво принаряженный.

Еще бы эти общепринятые правила существовали...
Сейчас даже текстовые редакторы, не говоря уж об IDE, могут расставлять отступы автоматически. В чем же вы пишете программы?
о "единых рамках" речи не идет. Хоть какое-то форматирование кода лучше чем "все в одну строку". Его ведь не от хорошей жизни придумали, а именно для того чтобы сделать программу понятной. В первую очередь для себя, потом - для других.
Не знаю как вам, а мне доводилось читать собственный код, написанный даже год назад. Не всегда поймешь что он должен делать, не говоря уж об алгоритме. Впрочем, тут больше вина комментариев чем отступов.
Да вот в том-то и дело, что эти правила форматирования, навязываемые IDE и текстовыми редакторами, мне зачастую не нужны и меня лишь раздражают. Они мне навязывают тот стиль мышления, которого я не хочу, который мне неприятен. Поэтому я их сразу отключаю.

А по поводу старых собственных программ... Через некоторое время они забываются, и чтобы с ними опять начать работать, приходится заново в них въезжать. Ничего, день - два поразбираешь своё старое "творчество", и опять начинаешь в ней плавать, как рыба в воде. Это нормально.
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
05.10.2017, 22:15
То есть вас всякие Aij, LAB не смущают. Ну и не надо путать единственную формулу, которая задает однозначное соответствие результата входным данным и законченный алгоритм со всеми вводами-выводами, проверками на корректность и прочим. Математические переменные обычно обозначаются в начале или конце формулы и не меняются в середине.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Когда в программе все переменные изображены в виде слов и словосочетаний и её приходится читать, это воспринимается как какая-то гуманитарщина. Словно программирование не относится к точным техническим дисциплинам, а программистам нужна такая жеванина. И с этим порой просто неприятно работать.
Примерно это я чувствовал когда довелось столкнуться с WinAPI. Жуткая штука... Вообще, в длинных именах (если это не глобальные переменные, конечно) смысла тоже немного - печатать дольше, а читаемость только снижают.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Тогда анафеме следует предать и сишные указатели
Так и делают в более высокоуровневых языках. Чем выше абстракция, тем труднее получить чистый указатель.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Да вот в том-то и дело, что эти правила форматирования, навязываемые IDE и текстовыми редакторами, мне зачастую не нужны и меня лишь раздражают. Они мне навязывают тот стиль мышления, которого я не хочу, который мне неприятен. Поэтому я их сразу отключаю.
как форматирование может навязывать стиль мышления? Достаточно было настроить и отключить как удобно...
0
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
05.10.2017, 23:11
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То есть вас всякие Aij, LAB не смущают. Ну и не надо путать единственную формулу, которая задает однозначное соответствие результата входным данным и законченный алгоритм со всеми вводами-выводами, проверками на корректность и прочим. Математические переменные обычно обозначаются в начале или конце формулы и не меняются в середине.
Нет, конечно, такие обозначения меня не смущают. Потом это всё-таки математические, а не программистские обозначения. Aij — это какой-то тензор, скорее всего, с ковариантным и контравариантным индексом. В программировании ему бы соответствовало, скорее всего, A[i][j]. А что такое LAB, я не знаю. Но меня такие однобуквенные обозначения не смутили бы и в программировании, главное знать, что за ними стоит.

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

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

Microsoft всё так делает, это давно известно.

Так и делают в более высокоуровневых языках. Чем выше абстракция, тем труднее получить чистый указатель.
Так за это мы C и любим, что он так близок к машине и обладает силой, гибкостью и выразительностью самого компьютера, и за это прощаем ему все его недостатки. А на счёт указателя — думаю, он в каком-то виде должен присутствовать и в хороших высокоуровневых языках. Только толковаться в них он должен уже не как адрес памяти, а как упоминатель переменной по имени, т. е. толковаться уже на более высоком человеческом уровне. Но остаться он или какая-то его замена должна в языке. И если указатель — это конструкция гибкого доступа к переменным, затрудняющая понимание программы, но зато позволяющая создавать более умные и интеллектуальные программы, то тоже самое по сути можно сказать и про оператор goto. Это оператор, позволяющий добиться абсолютной гибкости в управлении программой, дающий такое же богатство возможностей, как и указатель, только в другой области. Он не противоречит циклам и ветвлениям, а прекрасно их дополняет и обогащает. Пора преодолеть глупые догмы о якобы существующем мнимом вреде, который приносит этот оператор.

как форматирование может навязывать стиль мышления? Достаточно было настроить и отключить как удобно...
Как ни странно, может. Если я не хочу думать о программе в том строго структурном стиле, который подчёркивает это форматирование, мне проще его отключить и отказаться от него, чем мириться с той разметкой, которую оно мне навязывает.
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
05.10.2017, 23:47
Цитата Сообщение от JohnyWalker Посмотреть сообщение
А на счёт указателя — думаю, он в каком-то виде должен присутствовать и в хороших высокоуровневых языках.
bash, высокоуровневый скриптовый язык - обходится без указателей. Разнообразные языки для веба тоже. Даже в java и С# указатели объявлены нежелательными. Да что там - в ближайшем родственнике, С++ от указателей избавляются - оборачивают в объекты, передают в функции по ссылке (внутри-то тоже самое, но в коде выглядит по-другому).
Указатель это хороший способ оптимизации, но еще лучший - выстрелить себе в ногу. К тому же это привязывает к архитектуре конкретной машины, заставляет думать о выделении памяти, освобождении, слежением за ссылками и прочих низкоуровневых вещах.
Отдельно можно было бы упомянуть не-процедурные языки, вроде Lisp, но их я не знаю и толком сказать ничего не могу.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
оператор goto
Что же это за хаки такие, что без goto ну вот никак не обойтись? Я знаю только пару применений: выход из вложенных циклов, обработка ошибок (переход в самый конец функции) и, изредка, вход в цикл с середины. На практике пока ничего из этого не пригождалось.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Если я не хочу думать о программе в том строго структурном стиле, который подчёркивает это форматирование
Форматирование не навязывает структурный стиль, оно выделяет логические блоки. Какой структурный стиль может нарушить тот же пробел между функцией и ее скобками? Или наличие отступов, без которых код выглядит как кирпич.
1
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
06.10.2017, 00:05
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
bash, высокоуровневый скриптовый язык - обходится без указателей. Разнообразные языки для веба тоже. Даже в java и С# указатели объявлены нежелательными. Да что там - в ближайшем родственнике, С++ от указателей избавляются - оборачивают в объекты, передают в функции по ссылке (внутри-то тоже самое, но в коде выглядит по-другому).
Указатель это хороший способ оптимизации, но еще лучший - выстрелить себе в ногу. К тому же это привязывает к архитектуре конкретной машины, заставляет думать о выделении памяти, освобождении, слежением за ссылками и прочих низкоуровневых вещах.
В bash (и других скриптовых языках) возможна конструкция $$a, которая вполне подобна указателю и его в полной мере заменяет.

В C++, насколько знаю, указатели используются в полной мере. А то что их инкапсулируют в объекты и скрывают при конечном использовании, используя всякие механизмы, такие как методы, перегруженные операторы и т. д., ничего по сути не меняет. Всё равно на уровне реализации класса и его методов они используются ВОВСЮ. Скрыть их и избавиться от них в C++ можно лишь на уровне интерфейсов, что сути не меняет.

Что же это за хаки такие, что без goto ну вот никак не обойтись? Я знаю только пару применений: выход из вложенных циклов, обработка ошибок (переход в самый конец функции) и, изредка, вход в цикл с середины. На практике пока ничего из этого не пригождалось.
Правильные и жизненные примеры. Иногда, пусть и не часто, такое бывает полезным. К ним еще можно добавить выход из вложенного if.

Форматирование не навязывает структурный стиль, оно выделяет логические блоки. Какой структурный стиль может нарушить тот же пробел между функцией и ее скобками? Или наличие отступов, без которых код выглядит как кирпич.
И не всегда им в таком виде хочется пользоваться. Вопрос вкус и личного выбора, не более того.
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
06.10.2017, 09:18
Цитата Сообщение от JohnyWalker Посмотреть сообщение
В bash (и других скриптовых языках) возможна конструкция $$a, которая вполне подобна указателю и его в полной мере заменяет.
Что-то не нашел как она работает. Есть конструкция $$ - получение PID, но это совсем не указатель.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
В C++, насколько знаю, указатели используются в полной мере. А то что их инкапсулируют в объекты и скрывают при конечном использовании, используя всякие механизмы, такие как методы, перегруженные операторы и т. д., ничего по сути не меняет.
Напротив, раз скрывают. На том уровне абстракции, который предоставляют объекты, ручная работа с памятью уже выглядит не к месту. Однако С++ слишком близок к Си и полностью избавиться невозможно.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Правильные и жизненные примеры.
Естественно, их же не я придумал Насколько я понял, ненависть к goto восходит к временам раннего basic и assebmler, где других способов перехода не было. Программисты привыкли к реализации циклов на goto и метках, хитрым прыжкам между процедурами и прочим хакам, позволяющим иногда сэкономить пару байт или тактов. Еще можно вспомнить знаменитые бейсиковые метки в виде цифр в начале каждой строки (не знаю как было в ассемблере). Они перенесли такой стиль программирования и на Си, и он там выглядел совершенно чужеродно. Одно дело читать ассемблерный код с прыжками по коду - всем понятно что это вынужденная мера. И другое - вместо простого и очевидного while() использовать метки и прыжки по ним. Кроме того, Си скрывает подробности реализации и нельзя заранее сказать, какие инструкции перепрыгнет goto - а там может быть инициализация, работа со стеком, да мало ли. Ну и использование стандартных структур вынуждает использовать стандартные подходы вместо изобретения своих. И это очень хорошо, потому что их проще оптимизировать и читать.
1
06.10.2017, 10:27

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
С++ слишком близок к Си и полностью избавиться невозможно.
Hе надо изучать C++, надо изучать Java. :D

0
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
06.10.2017, 15:20
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Что-то не нашел как она работает. Есть конструкция $$ - получение PID, но это совсем не указатель.
Да, я немножко попутал тут синтаксис shell'а с синтаксисом PHP. Тем не менее, в bash косвенное обращение к переменной возможно. В новых версиях bash появилась конструкция ${!var} косвенного обращения к одной переменной через другую. В старых версиях Bourne Shell и bash специальной конструкции косвенной ссылки не было, тем не менее, её несложно было организовать через eval. Я bash совсем не знаю, не доводилось программировать на нём, тем не менее немножко времени, потраченного на Гугл, позволило мне составить вот такой вот демонстрационный пример. Если что, пример мой, я его ни откуда не копипастил.

Сценарий выводит три раза "Hello, World", используя разный доступ к переменным. Вот посмотри, как это всё работает.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/sh
 
a=Hello
b=World
 
 
#Прямое обращение к переменным
echo Implementation \#1
echo -n "$a, "
echo $b!
echo
 
#Косвенное обращение к переменным - старый синтаксис
echo Implementation \#2
c=a
eval echo -n "\$$c, "
c=b
eval echo \$$c!
echo
 
#Косвенное обращение к переменным - новый синтаксис
echo Implementation \#3
c=a
echo -n "${!c}, "
c=b
echo ${!c}!
echo
И теперь попробуй сказать мне, что это не аналог указателей. Да, указателя как адреса переменной в памяти здесь нет, ибо bash — интерпретируемый язык. Но здесь есть хранение одной переменной имени другой переменной. Имя переменной в таких сценарных языках может выполнять ту же роль, что адрес ячейки памяти в C.

Напротив, раз скрывают. На том уровне абстракции, который предоставляют объекты, ручная работа с памятью уже выглядит не к месту. Однако С++ слишком близок к Си и полностью избавиться невозможно.
Ты путаешь внешнюю оболочку и обёртку с внутренним содержанием. Мы можем спрятать указатели в C++ на уровне интерфейсов, но вся реализация объектов будет всё равно кишеть этими указателями. А значит, в C++ они никуда не делись и меньше их по сравнению с C в общем-то не стало. Сказать, что в C++ стало меньше указателей — это всё равно, что сказать, что что iPad — это такая серенькая дюралевая коробочка и ещё у неё есть снаружи такой плексиглазовый горящий экранчик, не понимая, что все возможности этого устройства определяются не его оболочкой, а тем, что у него находится внутри

Естественно, их же не я придумал Насколько я понял, ненависть к goto восходит к временам раннего basic и assebmler, где других способов перехода не было. Программисты привыкли к реализации циклов на goto и метках, хитрым прыжкам между процедурами и прочим хакам, позволяющим иногда сэкономить пару байт или тактов. Еще можно вспомнить знаменитые бейсиковые метки в виде цифр в начале каждой строки (не знаю как было в ассемблере).
Тогда самым массовым языком программирования был не Basic, а Fortran. И да, в старых версиях Фортрана, в т. ч. ещё в 70-ые годы, в период наибольшего его расцвета, использовался арифметический и логический IF, содержавший метки переходов. Выход из ветви IF делался вроде через GO TO (он писался на Фортране раздельно, в два слова). Для цикла существовал оператор DO, но в нём вроде также указывалась метка места выхода из цикла. И метки, если не ошибаюсь, задавались цифрами, а не буквенными идентификаторами, как это делается в современных языках, хотя каждая строка, как в GW Basic, в Фортране не нумеровалась. Это для тебя немножко истории программирования, о которой полезно иметь хотя бы общее представление.

Они перенесли такой стиль программирования и на Си, и он там выглядел совершенно чужеродно.
Впервые о таком слышу. По-моему, ты сам это придумал

Одно дело читать ассемблерный код с прыжками по коду - всем понятно что это вынужденная мера.
Это и есть истинное лицо вычислительной машины и любого алгоритма. Высокоуровневые операторы управления лишь удобная надстройка и оболочка над всем этим. Кто не любит и боится этой истинной формы, тот плохой алгоритмизатор. Вот объясни мне, почему умный Дональд Кнут в своей книжке выбрал именно ассемблер для представления алгоритмов со всеми этими прыжками по коду вместо того, чтобы записать все свои программы на каком-то языке высокого уровня?

Кроме того, Си скрывает подробности реализации и нельзя заранее сказать, какие инструкции перепрыгнет goto - а там может быть инициализация, работа со стеком, да мало ли. Ну и использование стандартных структур вынуждает использовать стандартные подходы вместо изобретения своих.
Всё это там можно делать, и об этом в книжках и стандарте написано — почитай и разберись Нельзя входить внутрь блока, обойдя объявления переменных этого блока. Но если ты это сделаешь, компилятор выдаст тебе ошибку и не пропустит твой листинг.

В общем, разбирайся, как делается косвенная ссылка в bash на моём примере (ты был уверен, что их там нет), а потом поговорим про goto.
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
06.10.2017, 16:06
Цитата Сообщение от JohnyWalker Посмотреть сообщение
И теперь попробуй сказать мне, что это не аналог указателей.
В приведенном примере? А что там вообще от указателя? В переменной с хранится строка. Как она будет интерпретирована - забота вызываемых программ.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Ты путаешь внешнюю оболочку и обёртку с внутренним содержанием. Мы можем спрятать указатели в C++ на уровне интерфейсов, но вся реализация объектов будет всё равно кишеть этими указателями.
Это ты путаешь, потому что речь идет именно о внешней оболочке. Программист старательно прячет указатели с глаз долой, чтобы при использовании объекта не приходилось их использовать. А на счет "низкого уровня" так на уровне машинных кодов все сплошь goto да указатели. Но речь-то шла о том, что чем выше абстракция, тем менее желательны указатели.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Впервые о таком слышу. По-моему, ты сам это придумал
Возможно. Я лишь пересказал по памяти то что когда-то давно слышал и как это понял. А как по-твоему объясняется ненависть к goto?
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Это и есть истинное лицо вычислительной машины и любого алгоритма.
Это чушь. Прыжки по коду это конкретная реализация алгоритма, внутренности, но уж точно не лицо. Лицо это потоки данных, структуры для их хранения, применяемые математические формулы. И именно для этого придуманы ЯВУ - чтобы скрыть несущественные подробности и дать сосредоточиться на алгоритме, пусть даже ценой снижения эффективности.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Всё это там можно делать, и об этом в книжках и стандарте написано — почитай и разберись
Ты не поверишь, я программировал и на ассемблере, в том числе использовал фокусы со стеком - сохранение адреса возврата, а потом возврат в другое место, несколько непересекающихся стеков и еще что-то. Писал модель операционной системы с вытесняющей многозадачностью, если точнее. А ограничения goto в Си тоже возможно обойти, но это лишь значит что писавший такое ССЗБ.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
В общем, разбирайся, как делается косвенная ссылка в bash на моём примере (ты был уверен, что их там нет), а потом поговорим про goto.
И ты так и не продемонстрировал их наличия там. Или ты и объявления вроде
Bash
1
2
3
a=ls
a=cat
a=echo
будешь называть указателями на функции?
0
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 41
06.10.2017, 16:23
Когда проект большой, самому удобнее и приятнее в нем ориентироваться. А когда отступы не соблюдены, имена переменных непонятно какие, то всегда хочется отложить свое возвращение в написание такого кода, не говоря уже о том, что кому-то придется это читать.
1
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
06.10.2017, 17:57
Цитата Сообщение от JohnyWalker Посмотреть сообщение
который в своих формулах использует многобуквенные обозначения
А мне норм было бы, это гораздо удобней, пойми что в одну букву и когда у тебя формул > 100 все не запомнишь.

Добавлено через 13 минут
Цитата Сообщение от JohnyWalker Посмотреть сообщение
а программистам нужна такая жеванина
Как по мне лучше такая жеванина чем это
0)это
Java
1
2
3
4
for(int u : arrU){
  System.out.println(u.name);
  // и тут куча куча логики где ты можешь получать и другие сущности
}
1)жеванина
Java
1
2
3
4
for(int user : Users){
  System.out.println(user.name);
  // и тут куча куча логики где ты можешь получать и другие сущности
}
Особенно напрягает это у некоторых наших форумных лисперов, когда там сплошная однобуквица
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
(defun tired-tourist (m n i)
  (loop repeat i collect (if (plusp m) m 0) into w
        when (plusp m) sum m into s
        do (setf m (- m n))
        finally (return (values w s))))
 
> (tired-tourist 30 3 11)
(30 27 24 21 18 15 12 9 6 3 0)
165
> (tired-tourist 30 3 12)
(30 27 24 21 18 15 12 9 6 3 0 0)
165
Добавлено через 1 минуту
Это нужно либо документировать перед функцией, либо объявлять нормальным именем.
1
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
06.10.2017, 18:46
Цитата Сообщение от ntlinuxnt Посмотреть сообщение
Как по мне лучше такая жеванина чем это
Спокойней, спокойней JohnyWalker, сам признал что его стиль плохо читаем.
Пока что у меня складывается впечатление что он писал на каких-то древних языках и с тех пор привык к экономии байтов и тактов, если не комментариев и имен переменных (я о таких языках только читал).
0
$ su
 Аватар для ntlinuxnt
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
07.10.2017, 14:22
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
привык к экономии байтов
А смысл? Если в том же асме в итоге оно приводится к бинарю и называть там особо нечего(а все что можно в итоге собирается в адреса(метки etc.)). А общение происходит в основном с программным представлением железки.
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
07.10.2017, 14:38
В некоторых языках программирования были встроенные ограничения на размер имен переменных - чтобы поместились в память во время компиляции. А ведь есть еще интерпретируемые языки.
0
200 / 87 / 9
Регистрация: 15.11.2010
Сообщений: 472
07.10.2017, 14:42
COKPOWEHEU, ты написал столько глупостей. Даже не знаю, как эти авгиевы конюшни разгрести, тем более, что и я не Геракл. Но я попробую

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В приведенном примере? А что там вообще от указателя? В переменной с хранится строка. Как она будет интерпретирована - забота вызываемых программ.
COKPOWEHEU, я и не писал, что в приведённом примере описан указатель в буквальном смысле слова. Указателей как таковых, как отдельной синтаксической конструкции, в shell действительно нет. Но приведённый пример — это реализация идеологии указателя и логики работы с ним в bash в полной мере. Действительно, в этом примере производится двойное разыменование переменной и доступ к данным, хранящимся в другой переменной. Такое двойное разыменование и есть логика работы косвенной адресации. В C и ассемблере для этого используются адреса переменных, в bash'е мы вынуждены использовать их имена. Причём в старых версиях shell'а, чтобы сделать такую двойную подстановку нужно было выкручиваться через eval, что было неудобно, выглядело некрасиво и получалось не очень понятно, в новых версиях bash для этого ввели специальную синтаксическую конструкцию косвенной ссылки ${!var}. Говоря, что всё это не имеет никакого отношения к идеологии указателя, ты демонстрируешь неспособность к обобщению или делаешь вид, что не способен обобщать.

И ты так и не продемонстрировал их наличия там. Или ты и объявления вроде
Bash
1
2
3
a=ls
a=cat
a=echo
будешь называть указателями на функции?
Конечно! Если их в дальнейшем предполагается использовать в таком качестве и исполнять как код, пусть даже через тот же eval, они будут играть роль указателей на функции. Правда, тут вернее говорить об "указателях" на команды shell'а, внутренние и внешние, чем об "указателях" на функции, но это уже детали. И конечно, слово "указатель" я взял в кавычки, потому что указателей как таковых в bash'е нет, но такие примеры полностью реализуют логику их работы.

А потом, не забывай, что Unix Shell — довольно примитивный язык программирования, отсюда и такая ограниченность в выборе средств, в том числе и отсутствие удобных средств косвенной адресации. В том же Perl'е, насколько я знаю, ссылки есть, и это действительно полноценно реализованная ссылка, что разрушает твой миф о том, что в подлинно высокоуровневых языках указатели якобы не нужны и бесполезны.

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

Возможно. Я лишь пересказал по памяти то что когда-то давно слышал и как это понял. А как по-твоему объясняется ненависть к goto?
Крайностью и формализмом. Введение высокоуровневых операторов и конструкций в языки программирования — вещь оправданная и разумная. Отказ от низкоуровневых и элементарных вещей — глупость.

Это чушь. Прыжки по коду это конкретная реализация алгоритма, внутренности, но уж точно не лицо. Лицо это потоки данных, структуры для их хранения, применяемые математические формулы. И именно для этого придуманы ЯВУ - чтобы скрыть несущественные подробности и дать сосредоточиться на алгоритме, пусть даже ценой снижения эффективности.
Ох, если рассуждать на уровне идей Платона, то да, ты прав. Циклы, их тела, блочные операторы, исключения — это самостоятельные и самодостаточные сущности, а прыжки по коду — это лишь бледное отражение этих высоких идей в материальном мире Но если отойти от эйдосов Платона и спуститься с того умного места, где они обитают, на грешную землю, то придётся признать, что любой фон-неймановский компьютер — это машина последовательного действия и все эти замечательные единицы структурных языков программирования на последовательном компьютере могут быть реализованы только через переходы, те самые прыжки по коду, другого пути тут просто нет. И если даже подсунуть текст программы на языке высокого уровня безо всяких столь тобой ненавидимых goto человеку, умеющему читать код на этом языке, и заставить его исполнить эту программу (именно человека заставить исполнить программу), он тоже для того чтобы выполнить программу, будет вынужден прыгать по коду, по листингу. Видя перед собой цикл, оператор ветвления if—else он, чтобы реализовать вычисление, записанное в программе, будет постоянно совершать скачки по листингу. Так вынужден будет поступать даже человек, который гораздо умнее процессора компьютера. Так что видишь, твои рассуждения о структурных единицах программы как о самостоятельных отвлечённых сущностях, стоящих вне прыжков и переходов, особой ценности не имеют и смысла не несут.

Ты не поверишь, я программировал и на ассемблере, в том числе использовал фокусы со стеком - сохранение адреса возврата, а потом возврат в другое место, несколько непересекающихся стеков и еще что-то. Писал модель операционной системы с вытесняющей многозадачностью, если точнее. А ограничения goto в Си тоже возможно обойти, но это лишь значит что писавший такое ССЗБ.
Замечательно, ты программировал на ассемблере и делал такие низкоуровневые штуки! А рассуждаешь так, словно ничего кроме Джавы и Питона не видел за всю свою жизнь
0
 Аватар для CoderHuligan
1753 / 1019 / 257
Регистрация: 30.06.2015
Сообщений: 5,132
Записей в блоге: 56
07.10.2017, 15:19
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А ограничения goto в Си тоже возможно обойти
Только ценой эффективности, да и просто красоты чистого алгоритма..
0
 Аватар для COKPOWEHEU
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
07.10.2017, 16:31
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Говоря, что всё это не имеет никакого отношения к идеологии указателя, ты демонстрируешь неспособность к обобщению или делаешь вид, что не способен обобщать.
Речь шла именно об указателях на область памяти, как и о goto - то есть о двух самых низкоуровневых вещах, от которых в ЯВУ стараются избавиться или хотя бы скрыть.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Отказ от низкоуровневых и элементарных вещей — глупость.
Ассемблерные вставки никто не отменял. Хочется терять переносимость и привязываться к конкретному железу - пожалуйста. А ЯВУ (язык высокого уровня, а не java если что) на то и ЯВУ что максимально абстрагирован от конкретного железа. Тот же bash вообще оперирует только строками и файлами. В нем даже арифметики нет. Или java / .net, которые выполняются на специфичных виртуальных машинах и не имеют прямого доступа к реальному железу. Именно поэтому "элементарная" вещь для ассемблера может оказаться довольно сложной в реализации хотя бы для того же Си (пример - флаг переноса). И наоборот, простые для ЯВУ вещи разворачиваются в жуткий листинг на ассемблере (пример - работа со строками).
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Вот я и говорю, что ты путаешь внешнюю сторону, поверхность, и внутреннее наполнение.
Это ты путаешь. Внутренность у всех программ примерно одинаковая, и там встречаются goto и указатели - без них никак. Но языки отличаются в основном именно уровнем абстракции. Какая-нибудь java "мыслит" категориями "все - объект", а bash - "все - строка", и к реальному железу ни то ни другое отношения не имеет.
Более того, появление все более и более высокоуровневых языков как раз и вызвано нежеланием программистов каждый раз держать в голове все уровни абстракции - вплоть до регистров. Скажем, на bash я могу написать cat log.txt | grep error и не задумываться над тем, как именно будет реализован FIFO канал между двумя сторонними программами. Представь описывать такое хотя бы на Си.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
любой фон-неймановский компьютер — это машина последовательного действия и все эти замечательные единицы структурных языков программирования на последовательном компьютере могут быть реализованы только через переходы, те самые прыжки по коду, другого пути тут просто нет
На то и существуют абстракции. Для практических задач совершенно безразлично каким именно образом организован цикл или вызов процедуры - да хоть в отдельный поток пускай выносят, или разворачивают в линейную программу, или вообще оптимизируют до одной формулы, лишь бы результат соответствовал спецификации.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
столь тобой ненавидимых goto
Вот не надо мне приписывать всякие гадости Я уже привел пару примеров где goto уместен.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
человеку, умеющему читать код на этом языке, и заставить его исполнить эту программу (именно человека заставить исполнить программу), он тоже для того чтобы выполнить программу, будет вынужден прыгать по коду, по листингу.
Человек как раз распознает цикл и переведет во что-то подобное "для каждого элемента массива сделать то-то и то-то" или "найти в списке такое-то" - а в ручную разворачивать циклы будет только в самом крайнем случае.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
А рассуждаешь так, словно ничего кроме Джавы и Питона не видел за всю свою жизнь
Собственно, все совсем наоборот. Я неплохо знаю ассемблер для AVR (что позволяет не пугаться других ассемблеров) и Си / С++ (в стиле "Си с классами); Когда-то давно, еще в школе, учил паскаль. Так что низкий уровень мне все-таки ближе.
И все-таки мне интересно, почему, по-твоему, так ненавидят goto?
И почему указатели, goto, даже работу с железом стремятся спрятать как можно глубже, так чтобы конечный программист ее по возможности не видел?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2017, 16:31

Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел
Вставить пробел после каждого символа "." "," "!" или "?", если за этими символами не следует пробел (т. е. следует любой символ, кроме...

Преобразовать строку, чтобы после каждой точки был пробел, и следующая буква после точки были заглавная
Задание: Ввести с клавиатуры строку, содержащую несколько точек. Преобразовать строку, чтобы после каждой точки был пробел, и следующая...

Нужен дамп на мать Asus F3JM MAIN BOARD Rev:2.2
День добрый нужен дамп биос на сей модель, с оф сайта 2 биоса брал после установки инициализация проходит но изо на монитор не выдает,...

Exception in thread "main" java.lang.NullPointerException at Main.main
Извините, перемещю в нужный раздел как только найду как это сделать Задание: Создать масив объектов класса, определить значение полей...

Main.cpp: In function ‘int main()’: main.cpp:10:1: error: ‘then’ was not declared in this scope
Написал программу и выдает ошибку. #include <iostream> #include <math.h> using namespace std; int main() {double a, b, x; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru