
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Страницы: (7) 1 2 [3] 4 5 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Ээээ... Боюсь, что это невозможно. Достаточно индекс сделать неконстантным, и вся эта проверка накроется медным тазом. Т. е. от выхода за границы это тебя все равно не застрахует. Цитата prografix @ А ещё у вектора нежелательно брать адрес элемента. Конечно, если не менять размер, то будет всё нормально, а вдруг кто-то поменяет? Конечно, нежедательно. В общем случае и у массива (переданного по указателю) нежелательно брать адрес элемента - ведь его тоже могут элементарно удалить или отресайзить. ![]() |
Сообщ.
#32
,
|
|
|
а может C#
![]() |
Сообщ.
#33
,
|
|
|
Тьфу! Совсем запутался. Ты вроде Язык Дейкстра создавал? Ну... а что, бросил чтоли? Или как? Сначала бы его доделал, а потом уже и Алмаз
![]() Так можно подумать что пройдет еще пол годика и у нас еще какой язык будет появляться? Да и (хотя вопрос уже задавали) как ты хочешь Си++ улучшить? Ты говоришь в общих чертах: уберу то, добавлю это, прикручу еще кое-что и...будет все Ок. Ты в чем то сравниваешь себя с Страуструпом, но я не думаю что он писал Си++ как ты..."Давайте напишем язык! Си слишком плох, пишем сразу транслятор, так быстрее!". Я думаю, что сначала нужно создать проект языка так сказать. Описать конструкции, принципы...хотя бы основываясь на уже готовом стандарте Си++. Потому следовало бы определить...нужно ли все это? Может быть твои навороты нужны в 1 из 1000 случаев? А ты не знаю еще чего из себя будет представлять язык хочешь писать транслятор... ну не глупо ли? Потом может быть и правда Си++ лучше изучить? Не думаю что ты его знаешь на отлично... хотя я могу ошибаться. Потом часть того что ты говоришь можно реализовать опять же на Си++ сделав нужные классы...которые уже реализовали. Если тебе хочется сделать проверку на выход из границ массива на этапе компиляции, то сделай просто прогу которая бы это проверяла...останется тот же Си++. Хотя как тебе уже сказали, что стоит быть неконстантному индексу...как все бессмысленно. Например Delphi делает таку проверку. Если я сделаю массив в 10 элементов и обращусь к 11 написав прямо array[11] то он меня обматерит, а если я сделаю так: a := 11; array[a]; То все пройдет... ИМХО чтобы сделать проверку такую для неконстантных идексов нужно проработать все ситуации в программе компилятору самостоятельно....а это уже трудновато. Да и потом может быть стоит писать код так чтобы не было этих ошибок? Ведь в таких случаях кроме программера никто не виноват... |
Сообщ.
#34
,
|
|
|
Цитата p_kolya @ Тьфу! Совсем запутался. Ты вроде Язык Дейкстра создавал? Ну... а что, бросил чтоли? Или как? Сначала бы его доделал, а потом уже и Алмаз ![]() Давай обо всём по порядку. Да, я действительно собирался делать Дейкстру, но при этом понимал, что он изначально не годится для практики. А делать собирался для того, чтобы набраться опыта для следующего языка, который отвечал бы требованиям сегодняшнего дня. А потом решил не тратить время, которого у меня мало и сразу перейти к новому языку. Если будут желающие сделать Дейкстру - я буду рад. Цитата p_kolya @ Так можно подумать что пройдет еще пол годика и у нас еще какой язык будет появляться? Не думаю. Алмаз ещё проектируется и может развиваться в любую сторону. Цитата p_kolya @ Да и (хотя вопрос уже задавали) как ты хочешь Си++ улучшить? Ты говоришь в общих чертах: уберу то, добавлю это, прикручу еще кое-что и...будет все Ок. Ты в чем то сравниваешь себя с Страуструпом, но я не думаю что он писал Си++ как ты..."Давайте напишем язык! Си слишком плох, пишем сразу транслятор, так быстрее!". Я думаю, что сначала нужно создать проект языка так сказать. Описать конструкции, принципы...хотя бы основываясь на уже готовом стандарте Си++. Потому следовало бы определить...нужно ли все это? Может быть твои навороты нужны в 1 из 1000 случаев? А ты не знаю еще чего из себя будет представлять язык хочешь писать транслятор... ну не глупо ли? Да, я не представил подробного плана, потому-что его у меня нет. Есть некоторые мысли, которые я тоже не представил. Я собираюсь потихоньку делать реализацию, показывать её и получать реакцию. Я раньше этим делом не занимался. Лексический анализ ещё представляю как можно сделать, а что дальше - надо учиться. Цитата p_kolya @ Потом может быть и правда Си++ лучше изучить? Не думаю что ты его знаешь на отлично... хотя я могу ошибаться. По поводу моего знания С++. Я пишу на нём программы начиная с 90-го года. А до этого писал на С. А до этого на Фортране, ... Цитата p_kolya @ Потом часть того что ты говоришь можно реализовать опять же на Си++ сделав нужные классы...которые уже реализовали. Если тебе хочется сделать проверку на выход из границ массива на этапе компиляции, то сделай просто прогу которая бы это проверяла...останется тот же Си++. Хотя как тебе уже сказали, что стоит быть неконстантному индексу...как все бессмысленно. Например Delphi делает таку проверку. Если я сделаю массив в 10 элементов и обращусь к 11 написав прямо array[11] то он меня обматерит, а если я сделаю так: a := 11; array[a]; То все пройдет... ИМХО чтобы сделать проверку такую для неконстантных идексов нужно проработать все ситуации в программе компилятору самостоятельно....а это уже трудновато. Да и потом может быть стоит писать код так чтобы не было этих ошибок? Ведь в таких случаях кроме программера никто не виноват... Человеку свойственно ошибаться и если машина может это обнаружить, то надо этим воспользоваться. |
Сообщ.
#35
,
|
|
|
Цитата prografix @ Может следует абстрагироваться от реально существующего ЯВУ? А реализовывать >>>транслятор из мета-языка в реальные ЯВУ<<<? А потом решил не тратить время, которого у меня мало и сразу перейти к новому языку. |
Сообщ.
#36
,
|
|
|
Думаю, не стоит. Универсальность имеет как плюсы, так и минусы ( эффективность ).
|
Сообщ.
#37
,
|
|
|
Насколько я помню (из какой-то его книги), Страуструп разработал язык C++ не потому, что ему не нравился язык С, а для того, чтобы расширить круг решаемых задач. Сам Страуструп тогда занимался имитационным программированием, и ему приходилось работать с большим количеством объектов, каждый из которых обладал какими-то свойствами. Язык C хорошо подходит для целей системного программирования, но в таких приложениях код получается тяжеловесным. Понятие ООП программирования уже существовало и существовали объектно-ориентированные языки программирования (в частности упоминались языки Smalltalk и Simula). Первый интерпретируемый, второй не подошёл по каким-то другим причинам. Понятие класса введено именно в Simula. Первоначально был разработан язык «C с классами» и был разработан препроцессор, транслирующий его в стандартный C (работал после обработки потока стандартным препроцессором). Его основная работа заключалась в замене классов на структуры, добавлении к этим структурам таблицы виртуальных функций, замене (декорировании) имён методов и функций (для обеспечения перегрузки имён), вставке ссылки на объект класса для которого вызван метод и т.п. Позднее, с развитием языка, поменялось название и был создан полноценный компилятор.
|
Сообщ.
#38
,
|
|
|
amk
Всё верно, только я писал, что "С его не устраивал", а не "ему не нравился язык С". |
Сообщ.
#39
,
|
|
|
В настоящее время я пишу лекситический анализатор и размышляю о синтаксисе. Сейчас думаю, что все объявления будут префексными. Например:
![]() ![]() int[5] arr; // массив double ( int ) func; // функция int * () * [9] * ptr; // указатель на массив указателей на функции вовращающие указатель на int Вариант с массивами используется в С#. А такого объявления функций ещё не встречал. Это делается для того, чтобы облегчить объявление такого сложного типа, как в третьем примере. |
Сообщ.
#40
,
|
|
|
Цитата prografix @ int[5] arr; Т. е. несколько объявлений переменных в одной строке будет запрещено? Как, например, тут: ![]() ![]() int arr5[5], arr10[10]; Ты считаешь, что это: Цитата prografix @ int * () * [9] * ptr; очевиднее чем ![]() ![]() int* (*ptr[9])(); |
![]() |
Сообщ.
#41
,
|
|
ИМХО, вам, уважаемый автор, делать нечего
![]() Можете показать проекты, которые вы пишите с 90-х годов прошлого века, которые принесли лично вам доход превышающий $1K/проект? |
Сообщ.
#42
,
|
|
|
Цитата Flex Ferrum @ Цитата prografix @ int[5] arr; Т. е. несколько объявлений переменных в одной строке будет запрещено? Как, например, тут: ![]() ![]() int arr5[5], arr10[10]; Вопрос пока открыт, но скорее всего да. Цитата Flex Ferrum @ Ты считаешь, что это: Цитата prografix @ int * () * [9] * ptr; очевиднее чем ![]() ![]() int* (*ptr[9])(); Да. Считаю. И так считаю не только я, но и Страуструп. Только он предлагал постфиксную запись. -юсртыхэю Цитата RaD @ ИМХО, вам, уважаемый автор, делать нечего ![]() Ошибаетесь. Времени как раз не хватает. Приходится выделять на этот проект по несколько минут в день. Цитата RaD @ Можете показать проекты, которые вы пишите с 90-х годов прошлого века, которые принесли лично вам доход превышающий $1K/проект? Не могу - это секрет. Вообще-то я уже 15 лет работаю над одним проектом, который мне приносит 1К в месяц. Если интересует моё творчество смотрите мой сайт. |
Сообщ.
#43
,
|
|
|
Цитата prografix @ Да. Считаю. И так считаю не только я, но и Страуструп. Только он предлагал постфиксную запись. А по-подробнее и со ссылками? |
Сообщ.
#44
,
|
|
|
Цитата Flex Ferrum @ Цитата prografix @ Да. Считаю. И так считаю не только я, но и Страуструп. Только он предлагал постфиксную запись. А по-подробнее и со ссылками? Книга "Дизайн и эволюция языка С++". Там он пишет, что ему не нравится стиль объявлений С, потому-что там используется и префексная и постфиксная запись. Он хотел сделать только постфиксную. Пример: ![]() ![]() ptr: ->int; // указатель на int Но совместимость с С оказалась важнее. Кстати, ты ошибся повторяя мой пример ( что не удивительно, там сам чёрт ногу сломит ). У тебя ptr массив, а не указатель. |
Сообщ.
#45
,
|
|
|
Цитата prografix @ что не удивительно, там сам чёрт ногу сломит Хм... Слушай, а оно надо, коль так? К "привычной" записи все уже привыкли и кое-как ее понимают. А ты хочешь еще непоняток подкинуть? ![]() |