Ви використовуєте застарілий браузер. Цей та інші сайти можуть відображатися в ньому некоректно. Необхідно оновити браузер або спробувати використовувати https://www.google.com/chrome/
Какой язык программирования наиболее перспективный?
🟡 10:34 Відбій тривоги в Харківська область.Зверніть увагу, тривога ще триває у:- Куп’янський район- Харківський район- Липецька територіальна громада- Вовчанська територіальна громада#Харківська_область
насчет неграммотности я вообще молчу.. так как не приписую себя к самым умным... я всего илшь учусь.. и допускаю, что могу быть в чем-то хуже осведомлем чем другие... но в данном вопросе, я считаю что прав.. а вы по какой-то причини или не желаете меня понять, или просто желаете показать свое красноречие... если вы все такие умные, может напишите собственное ОС на шарпах?
Просто потому, что визуальное восприятие любой информации у человека более развито, чем восприятие вербальной. Скоро выйдет моя статья по этому поводу - там гораздо более техническим языком написаны все соображения по этому вопросу (если вы каким-то образом имеете контакты в ХПИ с преподавателями факультета КИТ - попробуйте выйти на Далеку Валентину Дмитриевну - у нее есть информация, в каком именно журнале будет напечатана статья (авторы - Далека В. Д., Творковский Д. Ф.), я пока ничего в инете не нашла). В понедельник смогу выложить ее в этой теме. Да, и еще - выложу пре-релиз самой среды разработки с компилятором. Реально облегчит жизнь, если надо разрабатывать программу с множеством переходов - ее проще представить в виде автоматной схемы этой программы.
PS: to Don Corleone - приношу свои извинения, мне показалось, что вы в первой цитате приводите доводы исключительно в пользу самых низкоуровневых языков, а во второй - в пользу более абстрактных. Произошла "очитка" (что также подтверждает вышесказанное про трудности восприятия вербальных представлений)
контролеры - да..
например микропроцессор x51 я программирую на си...
но непосреднствено 32 битный процессоры.. к ним в значительной степени нужен асм... компиляторы си, и других языков высокого уровня.
в конечный исполняемый файл все равно записывают лишнюю информацию...[/QOUTE]
Начинала разработку РТОС для AT92AP7000 (семейство AVR-32, они у "Атымела" 32-разрядные - знаете, лучше на асме туда не лезть! С другой стороны - кривой IAR Embedded Workbench - он не понимает оператора new();, если я его пытаюсь применить к созданию динамической структуры. То есть - пока без вариантов...
Tempory Mea, ты написала что моя первая часть противоречит второй? не знаю как ты, но я совершенно не вижу связи между программированием напосредственно железа, и создания альтернативы Word... это что-то из разряда неоспоримая женская логика?
согласен.. но все же считаю что для работы с железом нужен асм..да и вообще, если бы разрабатывалсиь все программы на асме, тогда бы вычеслительная мощность того уровня что сейчас - не понадобилась бы вообще!!!
Сорсы вин2к в начале 2000-х можно была скачать спокойно, они как-то просочились в сеть. Ну там не все конечно, shell в основном, уже не помню.
согласен.. но все же считаю что для работы с железом нужен асм..да и вообще, если бы разрабатывалсиь все программы на асме, тогда бы вычеслительная мощность того уровня что сейчас - не понадобилась бы вообще!!!
согласен.. но все же считаю что для работы с железом нужен асм..да и вообще, если бы разрабатывалсиь все программы на асме, тогда бы вычеслительная мощность того уровня что сейчас - не понадобилась бы вообще!!!
Нет. Думаю, что речь идёт о десятичной позиционной системе.
Если бы разговор шёл среди простых обывателей, я бы сразу понял, что в "десять" раз. А так, спорят программисты (как я предполагаю). Может быть числа записывают исключительно в ноликах и единичках. Или в шестнадцатеричной системе.
И как бы я понял, что b-признак бинарной системы, а не "цифра одиннадцать" в шестнадцатеричной системе?
P.S.
Не относитесь серьёзно. Я пошутил. Больно уж спор заумный идёт.
P.P.S.
Не пишите, что в шестнадцатеричной системе использовали бы что-то типа: 10h, 0x10, $10, 10(16)
Скажите лучше, стОит ли изучать С/С++ (с тем, чтобы через пару лет чем-то серьезным заняться), или это уже бесперспективно?
Только не говорите, что я свалил С и С++ в одну кучу Просто хочу сейчас почитать книжку по С (синтаксис и всякие заморочки), а потом - по С++, ну а там уже надо будет серьезно учить ООП(в обоих смыслах аббревиатуры), паттерны и т.д...
Если вы хотите получить от работы деньги - изучайте такие стандарты, которые позволют разрабатывать крупные проекты (и в команде разработчиков). Если вы хотите получить удовольствие от своего творчества и "ковырять" мир логики - учите то, что не имеет особо крупных надстроек вида pattern, STL и иже с ними.
PS: Ориентируйтесь на первое, но для того, чтобы знать первое - вам придется осмыслить второе.
Резюме: Конечно, стоит изучать, потому, что фундамент есть у всего и незнание принципа фундамента не даст вам никакой возможности построить "стены", а тем более - "крышу".
Спасибо за ответ. Конечно, хочется зарабатывать деньги (хоть какие-нибудь). Интересовала именно перспектива С++.
А то сейчас сел крестики-нолики на С++ писать, набросал UML-диаграмму... А там от ООП - одно название. Каких-то классов напридумывал, а что с ними делать - непонятно Так и тянет все члены-данные в public написать. Буду учиться...
И это при том, что генеральный директор Харьковского офиса Aldec целый семестр меня, болвана, ООП учил. Аж стыдно
Говоря кратко, можно абстрагироваться так: Представьте себе структуру (ну, например такую (буду использовать особенности синтаксиса VC6)):
Код:
#typedef struct tagKE_OBJECT:
{
DWORD KeObjectType; //Тип объекта ядра (семафор, мьютекс, процесс....)
DWORD KeObjectNumber; //Номер (ID) объекта
DWORD KeObjectState; //Состояние объекта (захвачен, свободен, ждет....)
WORD KeObjectPriority; //Приоритет (для объектов типа "процесс")
tagKE_OBJECT KeObjNext; //Указатель на следующий объект в списке
tagKE_OBJECT KeObjPrv; //-"- на предыдущий объект
tagKE_OBJECT KeFirstChild; //-"- на первого потомка (список дочерних объектов)
void* KeObjectBody; //Указатель на тело объекта
DWORD KeObjBodyLenght; //Длина тела объекта (пусть будет в байтах)
}KE_OBJECT, FAR* lpKE_OBJECT, NEAR* pKE_OBJECT;
Теперь представим себе, что у нас есть некоторые функции, оформленные в виде процедур, которые работают со структурами данного типа:
Код:
DWORD CreateKeObject(lpKE_OBJECT lpKeRoot,DWORD KeChild,WORD KeObjPriority,DWORD KeObjBodyLenght,void* KeObjBodyStart)
//Этим я создаю новый объект в списке.
//lpKeRoot - указатель на начало дерева-списка объектов,
//KeChild - чей потомок будет (то есть, ID родителя),
//KeObjPriority - приоритет объекта при создании,
//KeObjBodyLenght - длина тела объекта,
//KeObjBodyStart - указатель на тело объекта.
{
DWORD CntrObjects=0;
lpKE_OBJECT tmpKeObjStruct=lpKeRoot;
while(CntrObjects<_MAX_KE_OBJECTS||tmpKeObjStruct->KeObjNext||tmpKeObjStruct->KeObjectNumber!=KeChild)
{
CntrObjects++; //Будущий ID нового объекта++
tmpKeObjStruct=tmpKeObjStruct->KeObjNext; //Ищу последний в списке
}
//Нашла последний:
if(tmpKeObjStruct->KeFirstChild) return ERROR_CHILD_EXIST;
//(на самом деле, в моей оси допускается сколь угодно ветвистое дерево-список объектов, но проверка конца по координате X займет уйму текса. Я же хочу просто объяснить на максимально живом примере отличия ООП от процедурного языка)
tmpKeObjStruct->KeFirstChild=new(KE_OBJECT);
tmpKeObjectStruct=tmpKeObjStruct->KeFirstChild; //Перешла на дочерний;
tmpKeObjStruct->KeObjectNumber=CntrObjects; //Присвоила ID
tmpKeObjStruct->KeObjPriority=KeObjPriority;
tmpKeObjStruct->KeObjBodyLenght=KeObjBodyLenght;
tmpKeObjStruct->KeObjBody=(char*)malloc(KeObjBodyLenght);
KeObjBodyStart=tmpKeObjStruct->KeObjBody;
return (DWORD)tmpKeObjStruct; и вернула указатель на созданный объект.
}
Займемся "разбором полетов". Я здесь умышленно допустила несколько "скользких" моментов. Ну, например - указатель на первый элемент списка объектов передается в виде lpKE_OBJECT lpKeRoot, что в принципе очень опасно, поскольку не дай бог эта функция вздумает в него полезть - то навсегда потеряется указатель на корневой элемент дерева.
В общем вы видите, что программа в итоге состоит из двух компонентов - структур данных (отнесу сюда и простые переменные) и функций (процедур), которые выполняют некие действия над структурами (данными). Поскольку функция компилятором воспринимается как указатель на функцию, то какая-то гениальная зараза (Бъярн Страуструп) придумал размещать указатели на функции... в самих же структурах данных. Естественно, это потребовало доработки стандарта синтаксиса языка, но зато далеко не радикальной (в частности, части private и public). Теперь представим ту же структуру в свете ООП:
Код:
class KeObject
{
private:
DWORD KeObjectType; //Тип объекта ядра (семафор, мьютекс, процесс....)
DWORD KeObjectNumber; //Номер (ID) объекта
DWORD KeObjectState; //Состояние объекта (захвачен, свободен, ждет....)
WORD KeObjectPriority; //Приоритет (для объектов типа "процесс")
tagKE_OBJECT KeObjNext; //Указатель на следующий объект в списке
tagKE_OBJECT KeObjPrv; //-"- на предыдущий объект
tagKE_OBJECT KeFirstChild; //-"- на первого потомка (список дочерних объектов)
void* KeObjectBody; //Указатель на тело объекта
DWORD KeObjBodyLenght; //Длина тела объекта (пусть будет в байтах)
[B]//А теперь внимание:[/B] Отсюда начинается та часть класса, которая будет единственно доступна в его объектах. Это собственно конструктор класса, его функция (в моем примере - единственная, но их может быть неограниченное количество) и деструктор класса (я не буду приводить его код - длинно:
public:
KeObject(); //Конструктор. Он нужен в основном для первой инициализации внутренних переменных данного класса.
DWORD CreateKeObject(lpKE_OBJECT lpKeRoot,DWORD KeChild,WORD KeObjPriority,DWORD KeObjBodyLenght,void* KeObjBodyStart);
~KeObject(); //Деструктор.
}
//[B]Важный момент:[/B] Все функции [B]этого[/B] класса имеют доступ [B]ко всем членам структур данных и простым данным этого класса[/B]
PS: Пока осмыслите это, извините что может непонятно - я не люблю писать, я люблю рассказывать и показывать на "живой" машине. Как только будет время - я обязательно постараюсь выложить здесь наиболее доступную для понимания (типа)статью...
public:
KeObject(); //Конструктор. Он нужен в основном для первой инициализации внутренних переменных данного класса.
DWORD CreateKeObject(lpKE_OBJECT lpKeRoot,DWORD KeChild,WORD KeObjPriority,DWORD KeObjBodyLenght,void* KeObjBodyStart);
~KeObject(); //Деструктор.
}
//Важный момент: Все функции этого класса имеют доступ ко всем членам структур данных и простым данным этого класса
а можно в функцию CreateKeObject ничего не передавать ?