Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как появились команды языков программирования?
 
 автор: Чайчайвыручай   (29.07.2011 в 20:58)   письмо автору
 
 

Компьютер думает только вкл и выкл. Не могу понять, как внесли команды, например, if, else и т.д.? Скиньте ссылку кто может

  Ответить  
 
 автор: Valick   (29.07.2011 в 21:04)   письмо автору
 
   для: Чайчайвыручай   (29.07.2011 в 20:58)
 

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

  Ответить  
 
 автор: Чайчайвыручай   (29.07.2011 в 21:16)   письмо автору
 
   для: Valick   (29.07.2011 в 21:04)
 

С высоким и низким уровнем языков более-менее понятно. А как машинные коды понимают операции? Т.е. как появляется управление машинным кодом? ? Может, я не правильно изъясняюсь, как появилось управление вкылом и выкылом?

  Ответить  
 
 автор: Valick   (29.07.2011 в 21:29)   письмо автору
 
   для: Чайчайвыручай   (29.07.2011 в 21:16)
 

ну вот например пхп... это интерпретатор (блин тяжко такие сложные слова выписывать в моем положении.. ик...)
этот "дядя вася" интерпретатор который написан на си (и оттранслирован в кучу нулей и единиц), берет строчку кода и заменяет ее кучей единиц и ноликов и пихает в процессор (несколько упрощенно но примерно так)

  Ответить  
 
 автор: Чайчайвыручай   (29.07.2011 в 21:43)   письмо автору
 
   для: Valick   (29.07.2011 в 21:29)
 

берет строчку кода и заменяет ее кучей единиц и ноликов и пихает в процессор

Как с помощью единиц и нулей дать понять компьютеру, что это команда?

  Ответить  
 
 автор: Valick   (29.07.2011 в 21:54)   письмо автору
 
   для: Чайчайвыручай   (29.07.2011 в 21:43)
 

ой.. бля)) лучше не спрашивайте, процесстор компьютера - это несколько сотен миллионов транзисторов... оно вам надо?

  Ответить  
 
 автор: cheops   (29.07.2011 в 22:37)   письмо автору
 
   для: Чайчайвыручай   (29.07.2011 в 21:43)
 

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

PS Я начинал отвечать с первого сообщения, поэтому это последний ответ, первый - в конце темы :)

  Ответить  
 
 автор: cheops   (29.07.2011 в 22:28)   письмо автору
 
   для: Чайчайвыручай   (29.07.2011 в 21:16)
 

>С высоким и низким уровнем языков более-менее понятно. А как машинные коды понимают
>операции? Т.е. как появляется управление машинным кодом? ? Может, я не правильно
>изъясняюсь, как появилось управление вкылом и выкылом?
Машинный код - это номер команды процессора, которую он должен выполнить, например один код отвечает за помещение значения в регистр (ячейка памяти процессора), другой номер отвечает за сложение значений двух ячеек и помещения результат в третий. Т.е. когда процессор встречает в потоке номер операции - он выполняет операцию с таким номером. Понятно, что в ячейках хранятся только целые числа, для сложения чисел с плавающей точкой нужен уже довольно сложный алгоритм (он реализован в железе в сопроцессоре), а по алгоритмам вычисления синуса раньше защищали диссертации, это сейчас мы вызываем его из библиотеки или сопроцессора, а вообще над его реализацией билось довольно много людей и у нас в стране и за рубежом.

PS Если хотите досконально разобраться, изучите ассемблер - это тяжело, но очень полезно, просто другими глазами будете смотреть на языки программирования и программы. Денег он, конечно, не принесет и с первого раза может не получиться его освоить на приличном уровне, но с точки зрения программирования понимание ассемблера дает очень много (никто еще не пожалел, что изучил ассемблер, даже не смотря на то, что им практически никто не пользуется).

  Ответить  
 
 автор: Valick   (29.07.2011 в 23:16)   письмо автору
 
   для: cheops   (29.07.2011 в 22:28)
 

Игорь, гляжу за живое задела вас тема)) в некоторой степени я вас понимаю, это сродни новогодней елки в возрасте пяти лет)) "когда деревья были большими" и ассемблер казался вершиной программирования))
хотя мое общение с ассемблером было на уровне баловства... выдирал из игры (типа саботера) алгоритм бегущей строки, и еще пару тройку приблуд, но то время вспоминается с удовольствием)

  Ответить  
 
 автор: cheops   (29.07.2011 в 23:31)   письмо автору
 
   для: Valick   (29.07.2011 в 23:16)
 

Ну я себя великим системным программистом никогда не считал, да и ассемблер своей вотчиной пожалуй тоже. Я все-таки считаю ассемблер вымершей тенологией, из которой ушли все деньги, он нужен, но я бы на него не ставил. На ассемблере я программировал довольно поздно, и мои программы на нем - это набор вызовов библиотечных функций, т.е. вирусописатель из меня очень так себейный - тренироваться нужно будет, если такая задача встанет... но меня в свое время тоже интересовали схожие вопросы (да и сейчас интересуют, если честно) - откуда, что пошло и почему так, а не иначе. Это хорошие вопросы, ответы на них позволяют довольно далеко видеть вперед, ну или по крайней мере дают почти 100% ответы на вопросы, о том перспективна технология или лучше на неё не тратить времени.

PS Это важная технология, можно сказать истоки, но романтических чувств, как скажем C, ассемблер во мне не будит - не мое.

  Ответить  
 
 автор: Кузнецов М.В.   (30.07.2011 в 09:15)   письмо автору
 
   для: cheops   (29.07.2011 в 23:31)
 

>PS Это важная технология, можно сказать истоки, но романтических чувств, как скажем C, ассемблер во мне не будит - не мое.

У нас с тобой с точностью до наоборот :) Он эти чувства будет во мне. В отличие от С.

  Ответить  
 
 автор: Кузнецов М.В.   (30.07.2011 в 09:35)   письмо автору
 
   для: cheops   (29.07.2011 в 23:31)
 

>т.е. вирусописатель из меня очень так себейный - тренироваться нужно будет, если такая задача встанет...


Model Tiny
CodeSeg
Org 100h
Start:
jmp Init
Mess db ‘Время пришло!!!’,10,13,’$’
S_Time dw 1020h
Init:
mov ah,2Ch
int 21h
cmp cx,S_Time
jne Init
mov ah,9h
lea dx,Mess
int 21h
mov ah,4Ch
int 21h
end Start


:)))

  Ответить  
 
 автор: cheops   (30.07.2011 в 09:50)   письмо автору
 
   для: Кузнецов М.В.   (30.07.2011 в 09:35)
 

>Model Tiny
>CodeSeg
Я только во flat и 32-битном режиме пишу... это еще при желании можно в деньги превратить... Все эти 16-битные режимы были актуальны 20 лет назад, сейчас 64-битные процессоры в этот режим даже не переключишь.

  Ответить  
 
 автор: Кузнецов М.В.   (30.07.2011 в 10:03)   письмо автору
 
   для: cheops   (30.07.2011 в 09:50)
 

Ну ты ж знаешь, я "семидесятник" :) (дитя семидесятых годов того века)
А деньги мы зарабатываем совсем иным способом.

  Ответить  
 
 автор: cheops   (29.07.2011 в 22:22)   письмо автору
 
   для: Чайчайвыручай   (29.07.2011 в 20:58)
 

Ну по большому счету нужно скидывать ссылку на несколько книг, так как и с вкл и выкл тоже не все гладко и просто. Изначально были машинные коды, т.е. адреса ячеек памяти и номера команд, которые оперировали содержимым ячейки. Т.е. создали программу и её без компиляции и интерпретации процессор сразу понимает. Затем создали ассемблер, заменив машинные коды мнемониками, стало проще, но все-равно для каждого из процессоров нужно было переписывать программу, так как команды у разных процессоров отличаются. В связи с этим стали появляться компиляторы, т.е. программы, которые преобразовывали текст языка высокого уровня в машинные коды или ассемблер. Т.е. программы стало возможным откомпилировать для разных процессоров, в том числе которые появятся в будущем. Компьютеры главным образом нужны были ученым, поэтому одним из первых языков высокого уровня был FORTRAN, который был заточен для программирования мат.формул. Это был первый язык, похожий на английский и не требовавший для программирования знания осообенностей данной конкретной машины. Вообще говоря, влияние процессора и ассемблера оставалось очень высоким, поэтому языки высокого уровня повторяли логику команд распространенных процессоров. If, goto, циклы, ветвление – это все навеяно ассемблером. Языки высокого уровня прижились, достаточно было разработать компилятор и груда ПО становилась доступна для новой платформы. В районе 1970 года этот прием был применен для создания операционной системы UNIX, а языком высокого уровня был С – первый язык высокого уровня для системного программирования. То что вы видите в современных языках – шлифовалось десятилетиями, удачные конструкции развивались, неудачные отбрасывались. Первые языки были тем еще зоопарком. Годы спустя языки вышли на еще более абстрактный уровень – ООП, понятно, что круто разработать язык для определенной проблемы, который бы оперировал понятиями данной проблемной области. Однако это очень дорого. Поэтому ввели ООП-языки, которые позволяли для каждой проблемной области разработать свой мини-язык программирования, оперирующий понятиями этой области. Сейчас мы находимся в такой точке, что время программистов стоит дороже времени машин и самих машин. Поэтому большое распространение получили интерпретаторы и языки пятого поколения (внедряющие в синтаксис довольно продвинутые алгоритмы, которые раньше нужно было реализовывать самостоятельно).

PS Если что-то не понятно, уточняйте период, который интересует – в него можно еще более углубиться. Пощупать руками можно почти любой, с машинными кодами будет труднее, но на ассемблере можно и сейчас создавать программы, в том числе и Windows (это дорого и не выгодно, но можно).
PPS Если кратко - сначала команды определялись архитектурой компьютера (if, for), затем потребностями разработчиков (class, try).

  Ответить  
 
 автор: Чайчайвыручай   (30.07.2011 в 21:27)   письмо автору
 
   для: cheops   (29.07.2011 в 22:22)
 

Спасибо большое!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования