Общие вопросы по программированию
Не нашли темы по нужному языку, но не рискуете создавать новую тему в силу каких-то причин? Ну что ж, эта тема для вас. Спрашивайте ваши вопросы, а обитатели раздела в силу возможностей и развитости комплекса альтруизма постараются вам помочь.
Однако не забывайте, что здесь также действуют правила форума и раздела Soft & OS, флуд и оффтоп — наказуемы. Также следует помнить, что писать вам программы целиком никто не будет, однако мы всегда рады помочь вам понять, что же именно не так, и как это можно сделать. Существующие темы по языкам: Желаем вам приятного общения и компилируемости ваших программ :) |
Вроде сюда: как через батник вывести в буфер обмена список всех файлов в папке и подпапках? Только имя файла и расширение.
|
Через dir такое можно сделать?
|
|
[CCCP] Monster, мне надо получить ТОЛЬКО имена файлов. Тут надо как-то по-другому делать. Нет у dir такого атрибута.
|
Цитата:
|
Мой вопрос относится к вещам очевидным и фундаментальным, но я все никак не могу этого понять - ведь все как будто по умолчанию это знают, и даже не написано об этом нигде. Где вообще проходит грань между различными языками программирования? На мой примитивный взгляд, php - это то, что запускается в браузере, всякие там "c" - это то, что запускается через exeшники. Но насколько я знаю, и php-скрипт можно запустить через exe при желании. В какой момент времени написанный в блокноте текст со скриптом превращается в паскальный, phpшный или c-шный? Ведь общая знаково-логическая система там с виду одинаковая.
Далее. Чем вообще языки программирования отличаются с точки зрения компьютера? Вот есть, допустим, программа, написанная на C, и есть - написанная на паскале. Оба запускаются через exe. Видимо, в самих скриптах указано, на каком языке они написаны. То есть, в самом компьютере (в ОС) уже предустановлены эти языки, и он ориентируется на то, к какой логической базе данных обращаться при запуске приложения? Если, например, скрипт, написанный на современном языке программирования, запустить на старой ОС - он не будет работать (даже если это какой-то совсем простой скрипт)? А если не указать в скрипте, какой это язык - как компьютер будет его воспринимать? Короче, чем для компьютера будут отличаться эти два exeшника, если компьютер не понимает, что такое паскаль, а что такое С, и для него обе программы просто разными путями обращаются к его ресурсам и разными командами запускают обработку данных? То есть, если в современных операционных системах уже предустановлена какая-то логическая система восприятия данных (или же она содержится сразу в компьютерах?) - то зачем вообще нужны разные языки? Почему не объединить все те языки, которые используются, в один общий, через который уже будут при необходимости обрабатываться необходимые данные? В общем, мне нужна фундаментальная информация о том, как из средства для обработки нулей и единиц возникает система, которая способна отличать паскаль от яваскрипта. Буду благодарен за подробный ответ. |
Цитата:
Если говорить про грань между языками программирования, то она проходит там же, где грань между Пушкиным и Пелевиным. Вроде, буквы одни и те же, но вот результат - разный. :Grin: Как минимум, у разных языков программирования разный синтаксис (что это такое - должны учить в школе на уроках русского языка). Кроме того, есть понятие парадигмы программирования: сейчас самые известные и часто используемые яызки объектно-ориентированные, но это не значит, что других не существует. Дальнейший вопрос показывает, что Вы и не пытались запустить программу на C, написанную в блокноте. :rolleyes: Попробуйте переименовать txt-файл в exe, и ясно увидите, что никакое волшебство тех в программу не превратит :Grin: Ах, Вы написали "скрипт" - но это в корне неверно, ведь скрипт - это (обычно) то, что выполняется неким интерпретатором, а C и Паскаль всё-таки компилируемые языки. Итак, Вы написали в блокноте программу на C++. Как уже говорилось, простое переименование в экзешник ее не запустит - как раз потому, что в системе нет никаких предустановленных языков программирования (впрочем, в современных оперционках - есть, но пока речь о базовых принципах). Компьютер сам по себе работает только с программами, написаными только на одном языке - в машинных кодах (т.н. native-код). Чтобы превратить программу из текста в этот код, и существуют компиляторы. Вы берете компилятор C++ или Паскаля, даете ему на вход программу на соответствующем языке - и на выходе получаете тот самый экзешник с native-кодом. Естественно, компилятор C++ кода на Паскале не поймёт, как и наоборот - в этом этапе и заключается волшебный момент перехода от текстового файла с одинаковыми символами к программе на определенном языке программирования. Надеюсь, понятно, что говорить о том, что программы на разных языках запускаются через один exe - не верно. Хотя в современном мире всё не так просто. Помимо компилируемых в native-код, существуют ещё интерпретируемые языки программирования, в частности - как раз для написания скриптов (впрочем, грань между "скриптом" и "полноценной программой" размыта. В этом случае - да, в системе должен быть установлена программа под названием "интерпретатор", которая и будет выполнять код "на лету", без компиляции. Так работает, например, JavaScript, исполняемый (обычно) браузерами. Это не значит, что интерпретируемый язык нельзя скомпилировать в exe, но обычно полученный таким образом код будет содержать ссылку на интерпретатор и без его установки всё равно запуститься не сможет. Впрочем, и компилируемые программы сейчас зависят от тонн библиотек, без которых они работать не смогут. Вот так всё сложно. Наконец, есть и промежуточный класс - языки, которые компилируются не в native-код, а в байт-код. Самые известные - Java все языки платформы .NET. В таком случае обычно говорят не о конкретных языках, а именно о платформе, поскольку языки компилируются в некий более простой - но всё равно не машинный - код, который при исполнении интерпретируется. Преимущества и недостатки всех подходов предлагаю гуглить или смотреть википедию. Вопрос "зачем нужны все языки" похож на вопрос "зачем нужны разные операционные системы", да и вообще "зачем нужно разное что-то там". Разные языки предназначены для разных целей, на одних удобнее и эффективнее выполнять одни задачи, на других - другие. Плюс никто не отменял эволюции, языки эволюционируют от простых "приятностей" над машинным кодом (ассемблер) до мощнейших платформ, которые делают за программиста 99% рутинной работы. Цитата:
Надеюсь, общая схема понятна, дальше - гугл. |
pokibor, ясно, то есть, язык программирования имеет значение только до компиляции, а после нее для компьютера нет никакой разницы между калькулятором, написанном на паскале и на c++, если их стремились сделать максимально одинаковыми, потому как они будут обращаться примерно к одним и тем же процессам и ресурсам.
Цитата:
|
Kиpa,
Цитата:
По сути единственный принцип языка высокого уровня - это снять с программиста задачу управления ресурсами. То есть дать ему возможность описать что делать, но не как делать Программирование - это такая штука, которую изучать следует с самых азов. Двоичное исчисление, двоичная логика, простые алгоритмы обработрки данных. И вот так постепенно переходить к более продвинутым вещам. В общих чертах могу сказать, что ни один из твоих вопросов не является корректным. В том плане, что ни один ответ на этот вопрос не прояснит саму суть процесса |
Цитата:
Это как раз то, что SLS_Cross назвал "снять с программиста задачу управления ресурсами", только он сказал не совсем корректно - реализуется она не языками высокого уровня как таковыми, а библиотеками. Досконально зная C++, но не зная WinAPI (или другого API для построения интерфейса, который, впрочем, всё равно будет на WinAPI базироваться), красивое приложение не напишешь (или напишешь, но поседеешь и тысячу раз изобретёшь велосипед в процессе). Из-за этого сейчас программисту нужно знать не только какой-нибудь язык программирования, но и определенный набор технологий и готовых API (которые, кстати, могут быть вполне универсальными, с интерфейсами под разные языки и даже платформы). Цитата:
Далее, какая разница, как язык работает внутри компьютера? Сейчас почти всё программирования, разве что кроме самых низкоуровневых драйверов, работает по принципу черного ящика: у нас есть определенный интерфейс, и мы знаем, что такой-то вход дает такой-то выход. Каким образом этот выход получается, нас мало интересует, главно что бы работало. Вот когда освоете язык и перед Вами встанут сложные задачи, связанные с оптимизацией, тогда и нужно выяснять, во что же оно там компилируется и как лучше построить код. В-общем, опять см. что написано выше про библиотеки. Цитата:
Цитата:
Кстати, на php можно и самостоятельные графические приложения делать - эту возможность дают специальные пакеты. Цитата:
Операционная система же не обеспечивает трансляции в ассемблер (это задача компилятора), она дает определенный набор библиотек - то бишь сборников функций, обеспечивающих нужный уровень абстракции. То есть, если в компилируемом языке написано "x = 1 + 2", то сложение 1 и 2 в ассемблер (точнее, в машинный код; ассемблер - это всё-таки язык программирования, который тоже нуждается в компиляции, пусть и довольно примитивной) перекодирует всё-таки компилятор, и он же обеспечит передачу результата в область памяти, выделенную под переменную x. Операционка же даст точки входа в готовый код, который обеспечит интерфейс (будь то банальная консоль, окно или ещё что-нибудь), а также при запуске программы выделит ей какую-то область в памяти и позаботится об управлении различными потоками. Но что верно сказано - без операционки современные программы работать в принципе не могут, просто потому что для этого им пришлось бы самим разбиратьтся, какие сигналы послать монитору, чтобы вывести что-то на экран, и как набор двоичных чисел, передаваемый с клавиатуры, превратить в нажатые пользователем клавиши. Поэтому одна из задач современных компиляторов - это подсунуть в нужные места кода вызов соответствующих функций из библиотек целевой операционной системы, а непосредственным общением с клавиатурой и монитором занимаются уже это функции. |
Цитата:
|
pokibor, компилятор же отвечает за "сборку" исходных кодов в готовое ПО. Т.е. в процессе работы приложения компилятор уже не используется.
И если говорить о разгрузке программиста, то я все корректно описал. На С++ тебе не надо думать - в какую ячейку памяти какая переменная будет записана. Ты думаешь только о самом факте существования переменных. Библиотеки же позволяют нам не тратить время на неспецифический функционал, т.е. в общем случае на GUI, способ соединения с базой данных и прочие стандартные вещи |
Цитата:
Чтобы понять это, задайтесь вопросом, почему Wine расшифровывается как "Wine Is Not an Emulator" - именно потому, что Wine является не эмулятором, а альтернативной реализацией WinAPI. Цитата:
Цитата:
Лучше подставьте вместо C++ C#, яву или любой другой язык со сборщиком мусора (хотя, конечно, реализации сборщиков есть и для C, и для C++). |
Для C++ есть RAII и std::shared_ptr, которые полностью решают вопрос контроля за ресурсами, причем не только памяти, но и за любым ресурсом, нуждающимся в освобождении/закрытии (сокеты, файлы, пайпы, что угодно еще). А еще там есть реализации lock-free контейнеров, которые радикально (раз этак в 10) ускоряют некоторые подходы к разделению данных в многопоточных средах. А можно еще и совместить оба подхода и получить указатели, которые можно трогать из нескольких потоков, и который умрет только когда последний поток перестанет с ним работать.
|
pokibor, никогда на С++ не занимался распределением ресурсов. Присутствие возможности не означает, что ты обязан этим заниматься. В подавляющем большинстве случаев, особенно на этапе обучения, это вообще не актуально. Кончились времена, когда у ПК было 640 Кб оперативки и надо было заморачиваться с ее распределением. Откровенно говоря, мне С++ всегда больше джавы нравился. Только вот не очень люблю программировать и занимаюсь этим лишь потому, что нужен рабочий опыт. Да и повсеместное распространение java - это своего рода бич современного программирования. Потому что любой нуб с чего-то решает, что java - "легкий" язык. Он легок для того, чтобы войти, но очень труден в освоении.
Да и сборщик мусора - одна из самых проблемных составляющих java. По умолчанию он туп, если речь идет о более-менее загруженном приложении |
SLS_Cross, хм, а если тебе надо загрузить из файла данные и преобразовать их в некую структуру данных, то как ты получаешь пространство для хранения этих данных?
|
Цитата:
Цитата:
Так что если говорить про C-подобные языки со сборщиком мусора - то C# предпочтительней (опять же, как язык, не надо говорить про кроссплатформенность и .NET). Что же касается сборщика мусора, то это хорошая вещь, если правильно ей пользоваться, пусть в .NET он тоже не особо собразителен. В то же время, любой желающий стать нормальным программистом должен освоить язык без этой приятной примочки, чтобы иметь представление об оптимизации и ручном распределении памяти. В целом, если вести речь об освоении программирования, то уж точно не Яву я бы посоветовал, а C# либо C++. Лучше, конечно, C++, но C# осваивать проще и приятнее. Жаль, что нет его нормальных реализаций за гранью Мелкософта и .NET... |
pokibor, так с new, массивы и списки - это базовые вещи, которые каждый должен знать. Тем не менее, ты просто следишь за состояние объекта, а не "управляешь" памятью, как в асме. Тебе не надо говорить - в какую ячейку и что запихивать. Возможно, я не совсем верно воспринял твои слова.
Я начал с Borland C++, а потом мне как-то Qt по душе пришелся. В последствии пересел на Java и очень сильно пожалел. Иногда подумываю вернуться к С++ и продолжить его изучение. |
помогите нубу. Задали задачку не по специальности. Как поменять надпись выделенную на другую. С помощью Php или java? желательно очень подробно, с меня плюшки. Кто поможет кину на мобильник денежку.
Скрытый текст: |
Часовой пояс GMT +4, время: 02:27. |
Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.