Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 18:25   #111
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
C# тоже четкий в этом плане.
никто не спорит, вот только .NET сразу отталкивает.

Цитата:
Сообщение от Utkin Посмотреть сообщение
Тот же Паскаль, то же делает только те вещи которые в нем заявлены.
объектный паскаль (тот который Delphi) тоже переполнен пережитками древнего паскаля, он просто кишит ими. Но модель ООП в нём очень удобная.
rpy3uH вне форума Ответить с цитированием
Старый 07.12.2011, 18:25   #112
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Отсюда не плохо бы избавиться явных манипуляций с указателями и прочие срамные вещи тоже убрать. даже если они прочно живут в С++.
все операции с указателями будут делаться строго самим компилятором.
как часть импорта внешних функций.

rpy3uH, ЯП в принципе подразумевается как довольно высокоуровневый.
Цитата:
а вот хорошего низкоуровневого языка нет.
лучше асма и не будет ничего.
Цитата:
да, но суть не в этом.
это действительно иная ниша.
Цитата:
Разработка своего выскоуровневого языка с блекджеком и шлюхами никому не нужна за исключением 2,5 упоротых программистов. Таких масса.
пост 94, цитата 3.

с одной стороны хотелось бы добавить это в ЯП. но помоему это выйдет каша тогда.
либо же делать что-то вроде отключаемого сборщика к примеру.

хотя вообще то что говорит Грузин, по сути в С++ идет так:
Код:
Class* obj;//обьявили где захотели.
...
obj=new Class;//создали.
...
delete Class;//удалили, когда захотели.
но тогда в ЯП(компиляторе) для такого режима надо все равно следить за памятью, но тогда уж не дописывать авто-освобождение памяти, а лишь вывести предупреждение.
Цитата:
Нужна "чёткость" языка, он должен должен делать, то что я хочу и ничего более.
четкость ЯП есть, он делает все как должен/как заявленно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2011, 18:34   #113
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
хотя вообще то что говорит Грузин, по сути в С++ идет так:
Код:
Class* obj;//обьявили где захотели.
...
obj=new Class;//создали.
...
delete Class;//удалили, когда захотели.
опять сначала.
а если вот так
Код:
obj= (Class*)HeapAlloc(*,*,sizeof(Class));//создали
Как теперь вызвать конструктор????

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
четкость ЯП есть, он делает все как должен/как заявленно.
C++ он использует свой менеджер кучи, в то время как этот менеджер уже есть и он предоставляется самой системой функциями Heapxxx
Мне не нужны функции new и delete!!! зачем мне этот функционал если таковой уже предоставляется системой через API
rpy3uH вне форума Ответить с цитированием
Старый 07.12.2011, 18:38   #114
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Приведу пару примеров: операторы new и delete, они выделяют/освобождают память и если указан класс вызывают его деструктор/конструктор.
Достаточно знать того, что они выделяют/очищают память и вызывают конструктор/деструктор. Завязываться на реализацию функции не есть труъ.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Ключевой вопрос: а как они выделляют память? для это не должно быть чёрным ящиком, я должен точно знать какие функции используются при выделении памяти. Основная проблема, я не знаю как они работают, а если и узнаю, то всё равно в следующей версии принцип их работы изменится. Я должен точно знать как они выделяют память. А сейчас их работа напоминает кота в мешке.
Зачем? Это нарушает принцип инкапсуляции и всё такое. Каждая функция должна быть чёрным ящиком для пользовательского кода. За исключением результата и исключений.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Напрмиер, new выделяет память и вызывает конструктор, а если я выделю память под объект другой функцией? как мне вызывать конструктор? НИКАК! это МЕГА ляп языка программирования.
Это достаточно редкая вещь, которая мало кому нужна. Делается запиливанием своих new/delete, а там заодно и будет определённость с выделением памяти.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
В этих случаях приходится выносить код конструктора в отдельный метод и после выделения памяти под объект вызывать этот метод.
Это в любом случае частенько приходится делать, т.к. писать инициализацию для всех 10 конструкторов с разными параметрами долго и чревато дублированием.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Вот почему нальзя было сделать специальную диррективу, которая помечала бы некоторый метод как конструктор? Нет блин, они сделали через жопу!
Всё там нормально сделано в этом плане. Не надо никаких директив пихать, а то делфи получится.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Итог: операторы new и delete ФТОПКУ! со всеми вытекающими. они не нужны, это пережиток древних компиляторов.
И что взамен? На один класс из миллиона, которому будет вся эта фигня критична, все объекты так создавать:
Код:
myclass *obj; // описываем переменную
malloc(obj);  // выделяем память
obj->myclass(); // вызов конструктора
...
obj->~myclass(); // вызов деструктора
realloc(obj); // очистка памяти
и это вместо вот этого:
Код:
myclass *obj = new myclass();
...
delete obj;
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Аналогично при объявлении переменных классов, в С++ всегда при объявлении переменной класса сразу вызывается её конструктор. Почему нельзя было сделать так:
Потому что объекты имеют состояние. Их состояние определяется значением членов. До вызова конструктора члены не инициализированы, а следовательно объект имеет неопределённое состояние. Что делать при вызове каких-то функций до вызова конструктора? Как определять, что собственно объект не инициализирован. Что это даёт? Чем отличается от пустого конструктора + метод init.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
суть в том что .NET и C# фтопку!!! Мне эти высокроуровневые штучки-плюшки не нужны. я считаю что такая вещь как сборщик мусора сделана для быдлокодеров.
Ага. Ловить все возможные исключения в каждой строке кода - это наше всё. Иначе - нет уверенности в том, что утечки не будет. Сборщик мусора - это достаточно полезная штука. Я вообще склонен считать, что процессоры сейчас имеют столько встроенных фишек, ОС такие продвинутые, а у компиляторов опупительные оптимизаторы, что мне не стоит лезть в низкоуровневые вещи, а иначе только хуже сделаю в плане производительности и стабильности.
.NET должна быть
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Мне нужно что-то промежуточное между C++ и ассемблером, чтобы написав какой-либо оператор/функцию я знал что она вызовет и что она будет делать.
Си
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Ну например, диррективы .386 .486 .586 они для кого и для чего? Не надо мне объяснять, я знаю для чего, при этом я знаю что эти диррективы не нужны, и не актуальны.
При этом предлагаешь ввести в язык то, что не нужно большинству, но интересно тебе. Получится та же шляпа, что и с этими директивами. Кому-то когда-то (а может и сейчас) они нужны, но большинство матерится и ругает за это язык.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Мне не нужны функции new и delete!!! зачем мне этот функционал если таковой уже предоставляется системой через API
Если в new выделять память посредством этих самых API, то проблема исчезнет?

Последний раз редактировалось pu4koff; 07.12.2011 в 18:42.
pu4koff вне форума Ответить с цитированием
Старый 07.12.2011, 18:49   #115
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

pu4koff, да да ты меня затроллил, но мы говорим о разных вещах. Мне нужен хороший язык для низкоуровневой разработки, С++ подходит, но в нём очень много рака, который мешает и просто напросто не нужен. Всякие сборщики мусора и прочие плюшки, они хороши, да, не отрицаю, но только не в системной разработке, где важна скорость и компактность кода

Последний раз редактировалось rpy3uH; 07.12.2011 в 18:51.
rpy3uH вне форума Ответить с цитированием
Старый 07.12.2011, 18:57   #116
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Всякие сборщики мусора и прочие плюшки, они хороши, да, не отрицаю, но только не в системной разработке, где важна скорость и компактность кода
а собственно чем отличается то что я написал delete, от того что компилятор вместо меня это сделал, как только видит что переменная 100% не нужна?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.12.2011, 19:02   #117
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
С++ подходит, но в нём очень много рака, который мешает и просто напросто не нужен.
Он под все области подходит вроде бы, но многих обилие костылей отпугивает
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Всякие сборщики мусора и прочие плюшки, они хороши, да, не отрицаю, но только не в системной разработке, где важна скорость и компактность кода
Тут всё субъективно. Классы тоже вносят излишки в код. "Умные" указатели - шаг в сторону сборщика мусора, но оверхед там минимален, по сравнению с обычными. Может кто-то когда-то замутит сборщик, который будет по прожорливости на уровне "умных" указателей...
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а собственно чем отличается то что я написал delete, от того что компилятор вместо меня это сделал, как только видит что переменная 100% не нужна?
Это кажется простым в случае с локальным объектом. В случае иерархии объектов (хуже, если там есть 2 объекта, которые ссылаются друг на друга) это уже не так легко и требует достаточного объема вычислительных ресурсов, чтобы со всем этим разобраться. Нет чёткой границы, куда можно воткнуть проверку на ненужность объекта.

Последний раз редактировалось pu4koff; 07.12.2011 в 19:05.
pu4koff вне форума Ответить с цитированием
Старый 07.12.2011, 19:10   #118
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а собственно чем отличается то что я написал delete, от того что компилятор вместо меня это сделал, как только видит что переменная 100% не нужна?
ты можешь себе представить сборщик мусора в драйвере? в котором любое неверное движение заставляет систему уйти в BSOD.
rpy3uH вне форума Ответить с цитированием
Старый 08.12.2011, 02:51   #119
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
Мне нужен хороший язык для низкоуровневой разработки. Всякие сборщики мусора и прочие плюшки, они хороши, да, не отрицаю, но только не в системной разработке, где важна скорость и компактность кода
Может чего-то я пропустил, но чем вам не подходит чистый Си для таких целей? Изначальное предназначение C++ - это высокоуровневая разработка с использованием старых Си-библиотек.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 08.12.2011, 03:47   #120
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
опять сначала.
а если вот так
Код:
obj= (Class*)HeapAlloc(*,*,sizeof(Class));//создали
Как теперь вызвать конструктор????
Код:
obj = (Class*)HeapAlloc(*,*,sizeof(Class));//создали
new (obj) Class(params); // инициализировали (вызвали конструктор)
Выделять конструктор/деструктор в отдельный метод и потом самому ему вызывать - бред, теряется весь смысл RAII.
Цитата:
Сообщение от rpy3uH Посмотреть сообщение
C++ он использует свой менеджер кучи, в то время как этот менеджер уже есть и он предоставляется самой системой функциями Heapxxx
Мне не нужны функции new и delete!!! зачем мне этот функционал если таковой уже предоставляется системой через API
C++ не использует свой менеджер кучи. Он использует те самые Heap*** Virtual***, Free*** и т.д., просто скрывает их за операторами new/delete, что вполне логично, и даже необходимо для платформонезависимой разработки.

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

Ну а если хочется что-то между C и C++, можете глянуть новый язык Clay
#clay на freenode
https://github.com/jckarter/clay
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55