Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Обсуждаем новые идеи > Язык программирования Алмаз


Автор: prografix 20.05.05, 07:45
Собираюсь разработать новый язык программирования Алмаз и реализовать транслятор для него на С++ и в С++. Основная причина сделать более надёжный язык по сравнению с С++, т.е. такой чтобы в одних случаях не давал ошибаться, а в других позволял быстро обнаружить ошибку. Буду выдавать информацию небольшими порциями.
Смешанной арифметики в этом языке не будет. Все приведения типа только явные.

Автор: Alex221 20.05.05, 08:45
Цитата prografix @
Собираюсь разработать новый язык программирования Алмаз и реализовать транслятор для него на С++ и в С++. Основная причина сделать более надёжный язык по сравнению с С++, т.е. такой чтобы в одних случаях не давал ошибаться, а в других позволял быстро обнаружить ошибку. Буду выдавать информацию небольшими порциями.
Смешанной арифметики в этом языке не будет. Все приведения типа только явные.

Подобный язык уже есть, он называется - Java... ;)

Автор: prografix 20.05.05, 11:40
Alex221
Не знал, что там всё так строго.
В языке А будут следующие арифметические типы:
знаковые целые - int8, int16, int32, int64,
беззнаковые целые - uint8, uint16, uint32, uint64,
с плавающей точкой - float32, float64, float80.
Для преобразования типов предназначены встроенные функции названия которых состоит из символа подчёркивания и имени типа. Например,
int64 a;
int32 b;
a = _int64 ( b );
В случае если приведение некорректно будет бросаться исключение.

Автор: maxim84_ 20.05.05, 12:09
Так-с! Visual C++ 6.0 это хорошо!

Цитата
Для преобразования типов предназначены встроенные функции названия которых состоит из символа подчёркивания и имени типа. Например,
int64 a;
int32 b;
a = _int64 ( b );
В случае если приведение некорректно будет бросаться исключение.


А как насчет сивольных типов? и их преобразования?

Автор: prografix 20.05.05, 13:34
Цитата maxim84_ @

А как насчет сивольных типов? и их преобразования?

Основная идея, что символьный тип эквивалентен одному из беззнаковых целых.
Например, 'a' имеет тип uint8. Но если поддерживать unicode, то тогда будет uint16.
Над деталями пока размышляю.

Автор: maxim84_ 20.05.05, 14:46
так секунду... ты хоть примерчик покажи как с ними работать! а то что я не совсем пойму...

Автор: prografix 21.05.05, 07:54
maxim84_
Давай этот вопрос разберём позже, а сейчас вот что. Я представляю работу с транслятором так. Будет некоторое приложение в Windows, окно которого состоит из двух частей. При загрузке файла ( исходника ) он появляется в левом окне, а при нажатие на заданную кнопку ( или пункт в меню ) этот исходник транслируется в текст на другом языке, который появляется в правом окне. В нашем случае это будет: язык А -> С++. Сообщения об ошибках появляются тоже в правом окне. Причём это приложение можно будет использовать для разных пар языков. Возмёшься его сделать? ( Только основу, без трансляции ). Я в это время сделаю сайт, куда буду выкладывать документацию.

Автор: maxim84_ 21.05.05, 09:45
в смысле основу? т.е. сам редактор?

а дебугер будет?

слушай а почему в С++ модет лучше а asm? так код можно оптимизировать на любой прцессор. :)

Добавлено
а еще вопрос! как делать с поддрежко MFC или все ручками писать?? :) я пока начну на MFC

Добавлено
а вот че еще забыл! делать поддержку проектов или по только открывать по одному файлу. т.е. сделать как VB или что то типа старых языков типа QBasic -где возможность работать только с одним фалом?

Автор: prografix 21.05.05, 10:52
Цитата maxim84_ @
в смысле основу? т.е. сам редактор?

Да.
Цитата maxim84_ @
а дебугер будет?

Пока нет. Всё равно на выходе будет С++, а не исполняемый код.

Цитата maxim84_ @
слушай а почему в С++ модет лучше а asm? так код можно оптимизировать на любой прцессор. :)

Потому-что 1) так проше 2) С++ универсальнее, чем ассемблер ( не завязан на железо ) 3) оптимизировать код - это другая задача, пусть ей занимаются Microsoft и т.д.
Цитата maxim84_ @

Добавлено
а еще вопрос! как делать с поддрежко MFC или все ручками писать?? :) я пока начну на MFC

Добавлено
а вот че еще забыл! делать поддержку проектов или по только открывать по одному файлу. т.е. сделать как VB или что то типа старых языков типа QBasic -где возможность работать только с одним фалом?

С MFC проще. Пока по одному файлу.

Автор: maxim84_ 21.05.05, 11:38
ок, задача ясна.....

Автор: Kutushut 23.05.05, 06:54
Цитата prografix @
Будет некоторое приложение в Windows

А чего сразу виндос? Вдруг язык будет интересен широким массам пингвинеров? ;)

Цитата prografix @
такой чтобы в одних случаях не давал ошибаться, а в других позволял быстро обнаружить ошибку.

Цитата prografix @
Все приведения типа только явные.

Читал-читал... Слушай, а зачем изобретать "новый велосипед"?
Имхо лучше сделать хитрый парсер, который будет проверять соответствие типов. И "в поддержку" к нему - спецификацию какие типы рекомендуются к использованию. Все преобразования типа () парсером переделывать в static_cast<>() и проверять соответствие типов. По-моему будует очень полезная тулза.

Автор: prografix 23.05.05, 07:06
Kutushut
Лично мне нужно приложение в Windows.
По поводу преобразования типов по умолчанию. Вначале я хотел запретить все, а теперь думаю, что в случае преобразования без потери информации можно разрешить.

Автор: Kutushut 23.05.05, 09:13
Цитата prografix @
Вначале я хотел запретить все

Хм... Может ты сразу напишешь тут цель своего языка чтобы я не чесал репу насчет того зачем это надо? ;)
Я так понимаю, это что-то для мат. обеспечения?
Потому как если, допустим, char не преобразовать к int, в поток его значение не выведешь...

Автор: prografix 23.05.05, 10:46
Цитата Kutushut @
Хм... Может ты сразу напишешь тут цель своего языка чтобы я не чесал репу насчет того зачем это надо? ;)
Я так понимаю, это что-то для мат. обеспечения?
Потому как если, допустим, char не преобразовать к int, в поток его значение не выведешь...

Цель такая ( программа-минимум ) - сделать язык и транслятор с него на С++, т.к. мне нужны программы на С++. Новый язык нужен для того, чтобы писать более надёжные программы ( меньше ошибок ). Это минимум, но из того может получиться гораздо большее.
Цитата Kutushut @
Я так понимаю, это что-то для мат. обеспечения?
Потому как если, допустим, char не преобразовать к int, в поток его значение не выведешь...

Я думаю, что язык будет универсальным, как С++. Насчёт, второго предложения не понял. Тут расхождений с С++ особых не наблюдается.

Автор: Flex Ferrum 23.05.05, 10:50
prografix, а может быть попробовать научиться на С++ более надежные программы писать? Да и что ты понимаешь под "более надежные программы с меньшим количеством ошибок"? Тут уже, по моему, все от кривизны рук программиста зависит, а не от мощности транслятора/компилятора...

Автор: Kutushut 23.05.05, 11:08
Цитата prografix @
мне нужны программы на С++.

Их пишешь ты сам или ты хочешь учить других своему языку?

Цитата prografix @
для того, чтобы писать более надёжные программы ( меньше ошибок ).

Это прямо как у Буча - ООП круче процедурного подхода, потому как меньше ошибок. Т.е. рекламный слоган, а не ответ на вопрос.

Цитата prografix @
Я думаю, что язык будет универсальным, как С++.

Так в чем ссуть-то? Это будет С++ с очень строгой типизацией и запретом преобразования? Или это будет своя грамматика?
И в чем все-таки преимущества этого языка? Пока я не понял и согласен с Флексом - вместо велосипеда пиши безглючные программы...

Автор: Ho Im 23.05.05, 12:56
Flex Ferrum, если то, что на С++, очень рутинно выглядит, то бывает проще создать над-язык, и из него транслировать в C++... bison, yacc, lex -- вот примеры. Для библиотеки Qt существует moc.

Но эти инструменты не универсальны, они ориентированы лишь на определенный класс задач. Для того, чтобы "ошибок было меньше", не язык создавать надо, а инструмент, который будет проверять на предмет наиболее распространенных ошибок. Но и такой есть -- splint, не знаю лишь, для плюсов ли он...

Автор: prografix 23.05.05, 13:16
Цитата Flex Ferrum @
prografix, а может быть попробовать научиться на С++ более надежные программы писать? Да и что ты понимаешь под "более надежные программы с меньшим количеством ошибок"? Тут уже, по моему, все от кривизны рук программиста зависит, а не от мощности транслятора/компилятора...

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

-юсртыхэю
Цитата Kutushut @
Цитата prografix @
мне нужны программы на С++.

Их пишешь ты сам или ты хочешь учить других своему языку?

Цитата prografix @
для того, чтобы писать более надёжные программы ( меньше ошибок ).

Это прямо как у Буча - ООП круче процедурного подхода, потому как меньше ошибок. Т.е. рекламный слоган, а не ответ на вопрос.

Цитата prografix @
Я думаю, что язык будет универсальным, как С++.

Так в чем ссуть-то? Это будет С++ с очень строгой типизацией и запретом преобразования? Или это будет своя грамматика?
И в чем все-таки преимущества этого языка? Пока я не понял и согласен с Флексом - вместо велосипеда пиши безглючные программы...

Я пишу программы на С++ и мне нужен инструмент для того чтобы писать их с меньшим к-вом ошибок. Если этот инструмент будет нужен не только мне, то я его с удовольствием представлю. На остальные вопросы отвечу завтра.

Автор: prografix 24.05.05, 09:45
Цитата Kutushut @
Так в чем ссуть-то? Это будет С++ с очень строгой типизацией и запретом преобразования? Или это будет своя грамматика?
И в чем все-таки преимущества этого языка? Пока я не понял и согласен с Флексом - вместо велосипеда пиши безглючные программы...

Что будет ещё не ясно т.к. нет окончательного проекта. На первых порах цели следующие: 1) убрать неопределённости характерные для С 2) ввести контроль за использованием неинициализируемых переменных 3 ) контроль за выходом за пределы массива

Автор: Kutushut 24.05.05, 10:17
Цитата Ho Im @
если то, что на С++, очень рутинно выглядит, то бывает проще создать над-язык

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

Цитата prografix @
Я пишу программы на С++ и мне нужен инструмент для того чтобы писать их с меньшим к-вом ошибок.

Мне кажется это несколько странным... Когда я трезво оценил свой уровень владения С++, я начал усиленно учиться, а не создавать тулзы для облегчения жизни. Не скажу что сейчас этим разочарован.

Цитата prografix @
Что будет ещё не ясно т.к. нет окончательного проекта.

Как ты пишешь-то без проекта? Пойду язык напишу, но даже не знаю что за язык? ;)

Цитата prografix @
1) убрать неопределённости характерные для С

Можно их просто не использовать.

Цитата prografix @
2) ввести контроль за использованием неинициализируемых переменных

Если ты объявляешь переменную без инициализации gcc c Wall ругается. VC 7.1 кажется тоже.

Цитата prografix @
3 ) контроль за выходом за пределы массива

C++ - надо использовать STL. Хотя если используешь массивы - действительно полезная фича.

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

Автор: prografix 24.05.05, 12:01
Kutushut
Я понял, что ты мне советуешь, но остался при своём мнении ( как обычно и бывает ). Поэтому продолжаю разработку в том виде, как я её представляю. По мере готовности буду выкладывать информацию.
Кстати, Страуструп стал делать С++, потому-что С его не устраивал.
А меня не совсем устраивает С++.

Автор: Flex Ferrum 24.05.05, 12:05
Цитата prografix @
1) убрать неопределённости характерные для С

А что конкретно ты имеешь в виду?
Цитата prografix @
3 ) контроль за выходом за пределы массива

Как ты себе этот контроль представляешь? В частности, вот в такой ситуации:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    //...
    void foo(int* someArray)
    {
    someArray[2345] = 100;
    }
     
    //...
     
    int array[20];
    foo(array);

с учетом того, что foo и фрагменты кода, ее использующие, могут быть в разных еденицах трансляции.

Добавлено
Цитата prografix @
Я понял, что ты мне советуешь, но остался при своём мнении ( как обычно и бывает ). Поэтому продолжаю разработку в том виде, как я её представляю.

Как бы не получилось, что закончив разработку и подняв свой уровень владения С++, ты бы не подумал про себя - "а нафига я все это сделал?" :)

Автор: Kutushut 24.05.05, 12:14
Цитата prografix @
Кстати, Страуструп стал делать С++, потому-что С его не устраивал.
А меня не совсем устраивает С++.

Тут могу только пожелать удачи.
Но я вижу некоторую разницу. Страуструп внедрял новую концепцию, ты же говоришь про то, что язык не дает тебе программировать без ошибок. Описания (я уж не говорю про формальное) языка ты тоже не даешь.
Надеюсь, у тебя все же выйдет что-нибудь путное :)

Добавлено
Цитата Flex Ferrum @
Как бы не получилось, что закончив разработку и подняв свой уровень владения С++, ты бы не подумал про себя - "а нафига я все это сделал?"

Я так понял - у каждого свой путь ;)

Автор: Flex Ferrum 24.05.05, 12:17
prografix, кстати, а почему бы не взять C#?

Автор: maxim84_ 24.05.05, 12:34
Цитата
prografix, кстати, а почему бы не взять C#?

оооо, да!! вот это чудо мы еще не обсуждали!! :) лично мне он совершенно не равиться!! ни туда и не сюда! супер гебрид! :)фу...

prografix, а как будем делать парсинг модульный? т.е. редактор(один .exe) посылает содержимое страници в библу ну или в .exe?

Автор: prografix 24.05.05, 13:56
Цитата maxim84_ @
prografix, а как будем делать парсинг модульный? т.е. редактор(один .exe) посылает содержимое страници в библу ну или в .exe?

maxim84_, я тебя не понял. Надеюсь приложение, которое ты делаешь, называется Translator? :-)

Автор: prografix 26.05.05, 07:00
Цитата Flex Ferrum @
Цитата prografix @
1) убрать неопределённости характерные для С

А что конкретно ты имеешь в виду?

Вот три примера: 1) размер типов в байтах 2) char может знаковым, а может нет 3) результат оператора % когда один из операндов - отрицательное число зависит от реализации. В стандарте часто есть фраза, что что-то неопределено. Я понимаю, что это сделано для эффективности, но надёжность при этом страдает.

-юсртыхэю
Цитата Flex Ferrum @
Цитата prografix @
3 ) контроль за выходом за пределы массива

Как ты себе этот контроль представляешь? В частности, вот в такой ситуации:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    //...
    void foo(int* someArray)
    {
    someArray[2345] = 100;
    }
     
    //...
     
    int array[20];
    foo(array);

с учетом того, что foo и фрагменты кода, ее использующие, могут быть в разных еденицах трансляции.

Да, именно с такими случаями я собираюсь бороться. Детали пока прорабатываются.

-юсртыхэю
Цитата Flex Ferrum @
prografix, кстати, а почему бы не взять C#?

Мне нужен именно С++. Кроме того, я считаю, что С++ - самый лучший язык современности. Но можно улучшить и его.

Автор: Kutushut 26.05.05, 07:33
prografix
если
Цитата prografix @
Мне нужен именно С++.

то при чем тут
Цитата prografix @
убрать неопределённости характерные для С

?

Не пользуйся ими, пользуйся только средствами С++. Большинство проблем уйдет, особенно если ты будешь пользоваться исключительно стандартной библиотекой, а не самопальными велосипедами.

Ошибки уйдут на другой уровень, который новым языком все равно не охватишь. А когда ты вернешься к низкоуровневым способам (если вернешься) - ты не будешь делать все эти ошибки, которые делаешь сейчас ;)

Добавлено
Цитата prografix @
я считаю, что С++ - самый лучший язык современности

Мне тоже С++ нравится. Поэтому я его изучаю. Улучшать буду потом, когда буду все знать ;)

Автор: Flex Ferrum 26.05.05, 09:39
Цитата prografix @
1) размер типов в байтах 2) char может знаковым, а может нет 3) результат оператора % когда один из операндов - отрицательное число зависит от реализации. В стандарте часто есть фраза, что что-то неопределено. Я понимаю, что это сделано для эффективности, но надёжность при этом страдает.

Не только эффективности, но и портабельности. Тем более, что никто не мешает тебе typedef-ами ввести ряд платформенно-зависимых типов и пользоваться ими. Деление по модулу на отрицательное число - ну, гм, а ты что хотел? Тем более, что это зависит не от компилятора, а от того, как процессор переварит исходные данные. Ну а неопределенности - что и как нужно программировать, чтобы наступать на UB?

Цитата prografix @
Да, именно с такими случаями я собираюсь бороться. Детали пока прорабатываются.

А чем std::vector не угодил? В любом случае провека будет runtime...

Автор: prografix 26.05.05, 11:31
Цитата Flex Ferrum @
А чем std::vector не угодил? В любом случае провека будет runtime...

А хотелось бы на этапе компиляции. Может пройти год, а потом произойдёт ошибка. А ещё у вектора нежелательно брать адрес элемента. Конечно, если не менять размер, то будет всё нормально, а вдруг кто-то поменяет?

Автор: Flex Ferrum 26.05.05, 11:38
Цитата prografix @
А хотелось бы на этапе компиляции.

Ээээ... Боюсь, что это невозможно. Достаточно индекс сделать неконстантным, и вся эта проверка накроется медным тазом. Т. е. от выхода за границы это тебя все равно не застрахует.

Цитата prografix @
А ещё у вектора нежелательно брать адрес элемента. Конечно, если не менять размер, то будет всё нормально, а вдруг кто-то поменяет?

Конечно, нежедательно. В общем случае и у массива (переданного по указателю) нежелательно брать адрес элемента - ведь его тоже могут элементарно удалить или отресайзить. :whistle:

Автор: сказочник 27.05.05, 06:00
а может C# :yes:

Автор: p_kolya 31.05.05, 14:00
Тьфу! Совсем запутался. Ты вроде Язык Дейкстра создавал? Ну... а что, бросил чтоли? Или как? Сначала бы его доделал, а потом уже и Алмаз :) Тем более язык Дейсктра уже описан и реально существует.
Так можно подумать что пройдет еще пол годика и у нас еще какой язык будет появляться?

Да и (хотя вопрос уже задавали) как ты хочешь Си++ улучшить? Ты говоришь в общих чертах: уберу то, добавлю это, прикручу еще кое-что и...будет все Ок.
Ты в чем то сравниваешь себя с Страуструпом, но я не думаю что он писал Си++ как ты..."Давайте напишем язык! Си слишком плох, пишем сразу транслятор, так быстрее!". Я думаю, что сначала нужно создать проект языка так сказать. Описать конструкции, принципы...хотя бы основываясь на уже готовом стандарте Си++. Потому следовало бы определить...нужно ли все это? Может быть твои навороты нужны в 1 из 1000 случаев?
А ты не знаю еще чего из себя будет представлять язык хочешь писать транслятор... ну не глупо ли?
Потом может быть и правда Си++ лучше изучить? Не думаю что ты его знаешь на отлично... хотя я могу ошибаться.
Потом часть того что ты говоришь можно реализовать опять же на Си++ сделав нужные классы...которые уже реализовали.
Если тебе хочется сделать проверку на выход из границ массива на этапе компиляции, то сделай просто прогу которая бы это проверяла...останется тот же Си++. Хотя как тебе уже сказали, что стоит быть неконстантному индексу...как все бессмысленно. Например Delphi делает таку проверку. Если я сделаю массив в 10 элементов и обращусь к 11 написав прямо array[11] то он меня обматерит, а если я сделаю так:
a := 11;
array[a];
То все пройдет... ИМХО чтобы сделать проверку такую для неконстантных идексов нужно проработать все ситуации в программе компилятору самостоятельно....а это уже трудновато. Да и потом может быть стоит писать код так чтобы не было этих ошибок? Ведь в таких случаях кроме программера никто не виноват...

Автор: prografix 01.06.05, 08:38
Цитата p_kolya @
Тьфу! Совсем запутался. Ты вроде Язык Дейкстра создавал? Ну... а что, бросил чтоли? Или как? Сначала бы его доделал, а потом уже и Алмаз :) Тем более язык Дейсктра уже описан и реально существует.

Давай обо всём по порядку. Да, я действительно собирался делать Дейкстру, но при этом понимал, что он изначально не годится для практики. А делать собирался для того, чтобы набраться опыта для следующего языка, который отвечал бы требованиям сегодняшнего дня. А потом решил не тратить время, которого у меня мало и сразу перейти к новому языку. Если будут желающие сделать Дейкстру - я буду рад.
Цитата p_kolya @

Так можно подумать что пройдет еще пол годика и у нас еще какой язык будет появляться?

Не думаю. Алмаз ещё проектируется и может развиваться в любую сторону.
Цитата p_kolya @

Да и (хотя вопрос уже задавали) как ты хочешь Си++ улучшить? Ты говоришь в общих чертах: уберу то, добавлю это, прикручу еще кое-что и...будет все Ок.
Ты в чем то сравниваешь себя с Страуструпом, но я не думаю что он писал Си++ как ты..."Давайте напишем язык! Си слишком плох, пишем сразу транслятор, так быстрее!". Я думаю, что сначала нужно создать проект языка так сказать. Описать конструкции, принципы...хотя бы основываясь на уже готовом стандарте Си++. Потому следовало бы определить...нужно ли все это? Может быть твои навороты нужны в 1 из 1000 случаев?
А ты не знаю еще чего из себя будет представлять язык хочешь писать транслятор... ну не глупо ли?

Да, я не представил подробного плана, потому-что его у меня нет. Есть некоторые мысли, которые я тоже не представил. Я собираюсь потихоньку делать реализацию, показывать её и получать реакцию. Я раньше этим делом не занимался. Лексический анализ ещё представляю как можно сделать, а что дальше - надо учиться.
Цитата p_kolya @

Потом может быть и правда Си++ лучше изучить? Не думаю что ты его знаешь на отлично... хотя я могу ошибаться.

По поводу моего знания С++. Я пишу на нём программы начиная с 90-го года. А до этого писал на С. А до этого на Фортране, ...
Цитата p_kolya @

Потом часть того что ты говоришь можно реализовать опять же на Си++ сделав нужные классы...которые уже реализовали.
Если тебе хочется сделать проверку на выход из границ массива на этапе компиляции, то сделай просто прогу которая бы это проверяла...останется тот же Си++. Хотя как тебе уже сказали, что стоит быть неконстантному индексу...как все бессмысленно. Например Delphi делает таку проверку. Если я сделаю массив в 10 элементов и обращусь к 11 написав прямо array[11] то он меня обматерит, а если я сделаю так:
a := 11;
array[a];
То все пройдет... ИМХО чтобы сделать проверку такую для неконстантных идексов нужно проработать все ситуации в программе компилятору самостоятельно....а это уже трудновато. Да и потом может быть стоит писать код так чтобы не было этих ошибок? Ведь в таких случаях кроме программера никто не виноват...

Человеку свойственно ошибаться и если машина может это обнаружить, то надо этим воспользоваться.

Автор: SVK 01.06.05, 09:21
Цитата prografix @
А потом решил не тратить время, которого у меня мало и сразу перейти к новому языку.
Может следует абстрагироваться от реально существующего ЯВУ? А реализовывать >>>транслятор из мета-языка в реальные ЯВУ<<<?

Автор: prografix 01.06.05, 10:27
Думаю, не стоит. Универсальность имеет как плюсы, так и минусы ( эффективность ).

Автор: amk 04.06.05, 06:03
Насколько я помню (из какой-то его книги), Страуструп разработал язык C++ не потому, что ему не нравился язык С, а для того, чтобы расширить круг решаемых задач. Сам Страуструп тогда занимался имитационным программированием, и ему приходилось работать с большим количеством объектов, каждый из которых обладал какими-то свойствами. Язык C хорошо подходит для целей системного программирования, но в таких приложениях код получается тяжеловесным. Понятие ООП программирования уже существовало и существовали объектно-ориентированные языки программирования (в частности упоминались языки Smalltalk и Simula). Первый интерпретируемый, второй не подошёл по каким-то другим причинам. Понятие класса введено именно в Simula. Первоначально был разработан язык «C с классами» и был разработан препроцессор, транслирующий его в стандартный C (работал после обработки потока стандартным препроцессором). Его основная работа заключалась в замене классов на структуры, добавлении к этим структурам таблицы виртуальных функций, замене (декорировании) имён методов и функций (для обеспечения перегрузки имён), вставке ссылки на объект класса для которого вызван метод и т.п. Позднее, с развитием языка, поменялось название и был создан полноценный компилятор.

Автор: prografix 04.06.05, 07:48
amk
Всё верно, только я писал, что "С его не устраивал", а не "ему не нравился язык С".

Автор: prografix 09.06.05, 08:09
В настоящее время я пишу лекситический анализатор и размышляю о синтаксисе. Сейчас думаю, что все объявления будут префексными. Например:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    int[5] arr; // массив
    double ( int ) func; // функция
    int * () * [9] * ptr; // указатель на массив указателей на функции вовращающие указатель на int

Вариант с массивами используется в С#. А такого объявления функций ещё не встречал. Это делается для того, чтобы облегчить объявление такого сложного типа, как в третьем примере.

Автор: Flex Ferrum 09.06.05, 08:18
Цитата prografix @
int[5] arr;

Т. е. несколько объявлений переменных в одной строке будет запрещено? Как, например, тут:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    int arr5[5], arr10[10];

Ты считаешь, что это:
Цитата prografix @
int * () * [9] * ptr;

очевиднее чем
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    int* (*ptr[9])();

Автор: RaD 09.06.05, 09:29
ИМХО, вам, уважаемый автор, делать нечего :)

Можете показать проекты, которые вы пишите с 90-х годов прошлого века, которые принесли лично вам доход превышающий $1K/проект?

Автор: prografix 09.06.05, 11:04
Цитата Flex Ferrum @
Цитата prografix @
int[5] arr;

Т. е. несколько объявлений переменных в одной строке будет запрещено? Как, например, тут:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    int arr5[5], arr10[10];

Вопрос пока открыт, но скорее всего да.
Цитата Flex Ferrum @

Ты считаешь, что это:
Цитата prografix @
int * () * [9] * ptr;

очевиднее чем
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    int* (*ptr[9])();

Да. Считаю. И так считаю не только я, но и Страуструп. Только он предлагал постфиксную запись.

-юсртыхэю
Цитата RaD @
ИМХО, вам, уважаемый автор, делать нечего :)

Ошибаетесь. Времени как раз не хватает. Приходится выделять на этот проект по несколько минут в день.
Цитата RaD @

Можете показать проекты, которые вы пишите с 90-х годов прошлого века, которые принесли лично вам доход превышающий $1K/проект?

Не могу - это секрет. Вообще-то я уже 15 лет работаю над одним проектом, который мне приносит 1К в месяц. Если интересует моё творчество смотрите мой сайт.

Автор: Flex Ferrum 09.06.05, 11:35
Цитата prografix @
Да. Считаю. И так считаю не только я, но и Страуструп. Только он предлагал постфиксную запись.

А по-подробнее и со ссылками?

Автор: prografix 09.06.05, 12:07
Цитата Flex Ferrum @
Цитата prografix @
Да. Считаю. И так считаю не только я, но и Страуструп. Только он предлагал постфиксную запись.

А по-подробнее и со ссылками?

Книга "Дизайн и эволюция языка С++". Там он пишет, что ему не нравится стиль объявлений С, потому-что там используется и префексная и постфиксная запись. Он хотел сделать только постфиксную. Пример:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    ptr: ->int; // указатель на int

Но совместимость с С оказалась важнее. Кстати, ты ошибся повторяя мой пример ( что не удивительно, там сам чёрт ногу сломит ). У тебя ptr массив, а не указатель.

Автор: Kutushut 09.06.05, 12:44
Цитата prografix @
что не удивительно, там сам чёрт ногу сломит

Хм... Слушай, а оно надо, коль так? К "привычной" записи все уже привыкли и кое-как ее понимают. А ты хочешь еще непоняток подкинуть? ;)

Автор: Flex Ferrum 09.06.05, 13:39
Цитата Kutushut @
Хм... Слушай, а оно надо, коль так? К "привычной" записи все уже привыкли и кое-как ее понимают. А ты хочешь еще непоняток подкинуть?

:yes: Все равно все нормальные люди typedef-ами пользуются. Потому и вопрос типа "напишите вот такой вот из... вращенный тип" может встретить резонный ответ - "а зачем?"

Автор: prografix 09.06.05, 13:46
Я имел ввиду, что в существующей системе трудно разобраться. А я предлагаю более простую для понимания вещь.

Добавлено
А мне ещё синтактический анализатор писать. Боюсь, что с существующей системой не справлюсь.

Автор: Flex Ferrum 09.06.05, 15:12
Цитата prografix @
А мне ещё синтактический анализатор писать. Боюсь, что с существующей системой не справлюсь.

Как раз для существующей системы синтаксический анализатор написать не сложно - главное правильно приоритеты учесть. Код такого анализатора приводится в библии от Кернигана и Ричи.

Автор: Kutushut 10.06.05, 07:25
Цитата prografix @
Я имел ввиду, что в существующей системе трудно разобраться. А я предлагаю более простую для понимания вещь.

Я уже задавал этот вопрос, похоже, сейчас он всплыл в другом контексте. Ты все-таки собираешься обучать кого-то своему языку? Если да, то такого рода сложные моменты (да и в целом однозначная формальная грамматика) лучше бы оставить как есть.
Лично мне нравится идея серьезных проверок синтаксиса и совсем не нравится идея изменения синтаксиса. А то получится, что язык будет совершенно надежным и никому не понятным...

Автор: prografix 10.06.05, 07:36
Цитата Flex Ferrum @
Цитата prografix @
А мне ещё синтактический анализатор писать. Боюсь, что с существующей системой не справлюсь.

Как раз для существующей системы синтаксический анализатор написать не сложно - главное правильно приоритеты учесть. Код такого анализатора приводится в библии от Кернигана и Ричи.

Есть ли этот источник в электронном виде?

-юсртыхэю
Цитата Kutushut @
Цитата prografix @
Я имел ввиду, что в существующей системе трудно разобраться. А я предлагаю более простую для понимания вещь.

Я уже задавал этот вопрос, похоже, сейчас он всплыл в другом контексте. Ты все-таки собираешься обучать кого-то своему языку? Если да, то такого рода сложные моменты (да и в целом однозначная формальная грамматика) лучше бы оставить как есть.
Лично мне нравится идея серьезных проверок синтаксиса и совсем не нравится идея изменения синтаксиса. А то получится, что язык будет совершенно надежным и никому не понятным...

Я думаю, что не будет проблем с освоением нового синтакасиса. Ведь он будет проще, чем существующий.

Автор: Kutushut 10.06.05, 07:43
Цитата prografix @
он будет проще, чем существующий.

Хм... То, что было в качестве примера - сложнее, чем существующий. Имхо ;) Разве что объявления на отдельных строчках гут, в остальном не уверен что лучше.

Автор: Flex Ferrum 10.06.05, 10:52
Цитата prografix @
Ведь он будет проще, чем существующий.

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

Цитата prografix @
Есть ли этот источник в электронном виде?

Не знаю, наверняка есть. Поищи "Язык программирования С" указанных авторов.

Автор: prografix 10.06.05, 11:41
Цитата Flex Ferrum @
Цитата prografix @
Есть ли этот источник в электронном виде?

Не знаю, наверняка есть. Поищи "Язык программирования С" указанных авторов.

Книгу нашёл http://ruler.h1.ru/cpp/bookc/index.htm Никаких исходников там нет.

Автор: Tishaishii 12.06.05, 16:02
Предлагаю написать Свой Собственный ВИНДОВС, продавать его, наживаться, а когда популярность спадёт, собрать соответствующую команду и начать выпускать Свои Собственные Глюки!

Автор: prografix 28.06.05, 09:37
Цитата prografix @
В настоящее время я пишу лекситический анализатор и размышляю о синтаксисе. Сейчас думаю, что все объявления будут префексными. Например:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    int[5] arr; // массив
    double ( int ) func; // функция
    int * () * [9] * ptr; // указатель на массив указателей на функции вовращающие указатель на int

Вариант с массивами используется в С#. А такого объявления функций ещё не встречал. Это делается для того, чтобы облегчить объявление такого сложного типа, как в третьем примере.

Недавно обнаружил, что для многомерных массивов в этом случае получится неприятная вещь: в объявлении размерности будут идти в одном порядке, а при использовании в другом. Поэтому лучше оставить вариант С++. Можно, конечно, сделать постфиксный вариант, как предлагал Строуструп, но он, мне кажется, смотрится непривычно и некрасиво.

Автор: Kutushut 28.06.05, 10:18
Цитата prografix @
Поэтому лучше оставить вариант С++.

И сделать мега-парсер, который ловит баги в коде на С++ ;)

Автор: byte 30.06.05, 15:39
prografix, купи(ну или еще как приобрети ;)) себе Lint и работай дальше со спокойной душой :)

Автор: prografix 01.07.05, 07:20
byte
С одной стороны - покупать не хочется, с другой - самому интересно сделать, а с третьей - мне кажется, что некоторые проверки без изменения языка сделать нельзя.

Автор: Kutushut 01.07.05, 07:59
Цитата prografix @
мне кажется, что некоторые проверки без изменения языка сделать нельзя

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

Автор: prografix 01.07.05, 11:57
Цитата Kutushut @
Без этого обоснования (и анализа существующих средств, как заметил byte) на мой взгляд никто в проекте участвовать не будет.

Один человек уже участвует ( кроме меня ). Надеюсь, скоро мы сделаем первый этап и представим результаты.

Автор: prografix 04.07.05, 08:32
Цитата Kutushut @
Цитата prografix @
мне кажется, что некоторые проверки без изменения языка сделать нельзя

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

Вот один пример. У функции имеется ссылочный параметр на неконстантный объект и на этапе трансляции (компиляции) непонятно проинициализирован он или нет. Можно добавить в язык ключевое слово. Например, "old". Тогда если у такого параметра есть квалификатор old, то этот объект можно использовать без инициализации, а если нет, то он может быть непроинициализированным и использовать его без инициализации нельзя. В свою очередь функция вызывающая эту функцию у которой есть параметр с old, должна позаботится, чтобы параметр был проинициализирован.

Автор: Kutushut 04.07.05, 08:59
prografix
А как же конструкторы и ООпроектирование?
Если мы передаем экземпляр по ссылке, он должен быть уже к этому моменту создан. Значит, был вызван конструктор, который создал объект в каком-то законченном состоянии. Если конструктор многоступенчатый и требуется оперировать методами объекта, чтобы его "доинициализировать" - значит, функция должна делать только это.
Мне кажется тут ключевым словом вопрос не решишь. Ну написал ты old, а передал туда все равно не то что надо. И в чем разница? Ты же все равно вызываешь какой-то конструктор перед передачей по ссылке.

Автор: prografix 04.07.05, 11:08
Цитата Kutushut @
prografix
А как же конструкторы и ООпроектирование?
Если мы передаем экземпляр по ссылке, он должен быть уже к этому моменту создан. Значит, был вызван конструктор, который создал объект в каком-то законченном состоянии. Если конструктор многоступенчатый и требуется оперировать методами объекта, чтобы его "доинициализировать" - значит, функция должна делать только это.
Мне кажется тут ключевым словом вопрос не решишь. Ну написал ты old, а передал туда все равно не то что надо. И в чем разница? Ты же все равно вызываешь какой-то конструктор перед передачей по ссылке.

Речь идёт не о ООП, а о С++. Объект должен быть создан. Пусть этот объект имеет тип int.
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    void func1 ( int & i );
     
    void func2
    {
        int i;
        func1 ( i );
        ...
    }

До вызова функции func1 этот объект непроинициализирован и значение его не определено. Моё предложение заключается в том, что в этом случае func1 будет иметь это ввиду. Другой вариант:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    void func1 ( old int & i );
     
    void func2
    {
        int i;
        func1 ( i );
        ...
    }

В этом случае компилятор выдаст ошибку, т.к. i непроинициализированo.
В общем язык должен по возможности не давать человеку ошибаться.
Тут у меня ещё не всё продумано. Это пока прикидка.

Автор: Kutushut 04.07.05, 11:49
Цитата prografix @
int i;

Конструктор. Объект i создан, в соответствии со стандартом значение у i не определено, но сам по себе объект вполне работоспособен.
Дальше, если ты передаешь неконстантную ссылку в функцию -> ты будешь менять значение i. Если ты там напишешь i++, то как раз будет то, про что ты говоришь. Но ошибка-то не в том, что ты передаешь i в функцию (ты можешь просто написать i++, безо всяких вызовов), а в том, что ты выбрал не тот конструктор. Кстати, gcc выдает в таком случае предупреждение.
В твоем примере func1 должна возвращать i, а не вызываться с ним в качестве параметра имхо.

Кстати, а как быть с объектами, для которых конструктор без параметров вполне подходит? Они не пройдут такую проверку.

Автор: prografix 04.07.05, 13:03
Цитата Kutushut @
Цитата prografix @
int i;

Конструктор. Объект i создан, в соответствии со стандартом значение у i не определено, но сам по себе объект вполне работоспособен.
Дальше, если ты передаешь неконстантную ссылку в функцию -> ты будешь менять значение i. Если ты там напишешь i++, то как раз будет то, про что ты говоришь. Но ошибка-то не в том, что ты передаешь i в функцию (ты можешь просто написать i++, безо всяких вызовов), а в том, что ты выбрал не тот конструктор. Кстати, gcc выдает в таком случае предупреждение..

Может быть зря выдаёт, если было задумано, что значение будет присвоено в func1.
Цитата Kutushut @

В твоем примере func1 должна возвращать i, а не вызываться с ним в качестве параметра имхо.

Это были игрушечные примеры. Хотя, я считаю, что в любом случае должна быть "защита от дурака".
Цитата Kutushut @

Кстати, а как быть с объектами, для которых конструктор без параметров вполне подходит? Они не пройдут такую проверку.

Тут ещё надо подумать.

Автор: Kutushut 04.07.05, 13:33
Цитата prografix @
Может быть зря выдаёт, если было задумано, что значение будет присвоено в func1.

В принципе не рекомендуется оставлять POD типы без инициализации. Правильно ругается. К тому же это предупреждение при -Wall, можно при желании на него не смотреть.

Цитата prografix @
Хотя, я считаю, что в любом случае должна быть "защита от дурака".

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

Автор: prografix 05.07.05, 08:58
Цитата Kutushut @
Понимаешь, если было задумано как я сказал - защита работает против "не дурака". Мне кажется язык должен давать возможность работать профессионалам, а не дуракам. Ввести какие-то новые интересные функции (по принципу стандартной библиотеки или буста) - это хорошо. А обрубать полезные свойства из-за того, что кто-то может наглючить по незнанию языка по-моему не стоит... Вообще, литература по безопасному программированию однозначно говорит о том, что в рассмотренном случае нужно звать конструктор инта, пусть даже будет 0.

Во-первых, не понял какие полезные свойства я отрубаю. По-моему всё полезное остаётся.
Во-вторых, по поводу инициализации int-а нулём. Есть мнение ( и я с ним согласен ), что в этом случае надо инициализировать его "нехорошим" числом, чтобы увеличить вероятность ошибки и тем самым скорее её исправить. Например, я применял значение -123456789.

Автор: Kutushut 05.07.05, 09:30
Цитата prografix @
Во-первых, не понял какие полезные свойства я отрубаю.

Если я правильно понял - в твоем примере будет ошибка если указано old и вызван пустой конструктор. Это - ограничение.
Цитата prografix @
надо инициализировать его "нехорошим" числом

Насчет "нехорошего числа" тоже не все просто. 0 отловить легче, если говорить о том, что в функции мы не знаем инициализирована переменная или нет. Тут вопрос скорее из области использования, поскольку иногда "недопустимых" значений не бывает в принципе. Но такая ситуация, опять же никак не влияет на новые ключевые слова, поскольку нельзя узнать - подходит ли пустой конструктор.

Автор: amk 09.07.05, 15:49
В некоем учебном алгоритмическом языке (название не помню, к тому же он, кажется, имел диалекты) все(!) параметры предварялись одним из ключевых слов in, out или in/out. Таким способом декларировался способ использования параметра. В первом он мог быть любым вычисляемым зачением, во втором ссылкой на переменную (необязательно инициализированную), в третьем ссылкой на переменную, уже имеющую определённое значение.

C++ позволяет отделить только первую ситуацию. Кроме того, в нём невозможно конструирование объекта без его инициализации (кроме автоматических переменных встроенных типов и агрегатов C).

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

Автор: trainer 11.07.05, 01:11
Цитата amk @
В некоем учебном алгоритмическом языке (название не помню, к тому же он, кажется, имел диалекты) все(!) параметры предварялись одним из ключевых слов in, out или in/out.
Это есть в IDL. Сделано это там по понятным причинам.

Автор: prosto 12.07.05, 12:07
Как хорошо что я програмирую на Паскале :D
:tong:

Хотя при динамическом создании удалении объектов и язык не спасает.
А почему автору не подходит идея препроцессора?, а вобще нужно сперва создать костяк языка(перво-описание),
а потом творить.

Автор: Math 12.07.05, 15:35
Мда, точно людям делать нечего.

Вот пример нового языка D Programming Language
Советую изучить :D . Вдруг что полезное откроется.

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

Автор: prografix 13.07.05, 07:47
Цитата Math @
Мда, точно людям делать нечего.

Обижаешь.
Цитата Math @
Вот пример нового языка D Programming Language
Советую изучить :D . Вдруг что полезное откроется.

За ссылку спасибо. Почитаю.
Цитата Math @

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

Со строками надо подумать. Всё-таки результатом у меня будет текст на С++.

-юсртыхэю
Цитата prosto @
Как хорошо что я програмирую на Паскале :D
:tong:

Хотя при динамическом создании удалении объектов и язык не спасает.
А почему автору не подходит идея препроцессора?, а вобще нужно сперва создать костяк языка(перво-описание),
а потом творить.

Костяк - это С++. А творить - это находить лучшее решение, чем в оригинале. Лучшее в смысле надёжности.

Автор: Math 13.07.05, 08:07
Цитата prografix @
Обижаешь.

Ну, извини, если обидел ;), не хотел.
Просто, когда я вижу еще и еще один "новый" язык программирования у меня начинают волосы вставать дыбом и появляется чувтво легкого неприятия. Ну куда наплодили столько языков "кто в лес, кто по дрова".

Как было в одной статье про маляра Шлемиеля :D написано, не продумав фундамент строят здание.

Мне видится, что, ИМХО, неперспективное это занятие в одиночку мастрячить свой язык программирования, свою операционную систему, ну и т.д. в таком духе.

Автор: prografix 13.07.05, 11:13
Цитата Math @

Мне видится, что, ИМХО, неперспективное это занятие в одиночку мастрячить свой язык программирования, свою операционную систему, ну и т.д. в таком духе.

Во-первых, если я вынес обсуждение на форум, то уже не в одиночку.
Во-вторых, многие языки программирования были сделаны одним автором: Ричи ( С ) , Строуструп ( С++ ), Вирт ( целая куча языков ) и т.д.

Автор: prografix 16.07.05, 09:19
Сделал сайт для описания языка Almaz
Пока там только описание лексем.
Что касается языка D, то впечатление от него у меня такое же, как и после знакомства с Java и C# - это ухудшенный вариант С++. В каких-то деталях я могу согласится, что это лучше, чем было, но в целом считаю язык стал хуже. Понятно, что это дело субъективное. Главное, что мне не нравится - это то, что меняется сама идеалогия языка. Когда я читаю Строуструпа ( а я много чего у него читал ), то мне всё понятно и в большинстве случаев я с ним согласен. А тут его доводы игнорируются.

Автор: Kutushut 18.07.05, 12:07
Цитата prografix @
описание лексем

Что-то туманное описание какое-то. Не проще было взять из стандарта С++ ?

Цитата prografix @
Главное, что мне не нравится - это то, что меняется сама идеалогия языка.

Идеология. ИМХО для человека, создающего свой язык, многовато ошибок в постах...

В целом я все равно никак не пойму общих преимуществ А относительно С++. В топике различные аспекты, где плох С++ и несколько идей что бы сделать для его улучшения. Есть хотя бы полный список фич нового языка? А то что-то пока не верится в светлое будущее... По-моему это важнее лексем и подобных формальностей.

Автор: amk 19.07.05, 14:42
Почитал язык D, не вижу существенной разницы с возможностями C++. Многие из новых особенностей легко реализуются библиотеками и классами. Везде ссылки на реализацию особенностей в библиотеках, а не самом языке (похоже автор забыл (или не понял), что основой идеологии C++ является по возможности как раз миниммальное ядро языка), кое-что планируется включить в обновлённый стандарт (в основном в библиотеки), кое-что не особо и нужно, исключённые особенности и так без нужды не используются. Некоторые новые улучшения, вроде static if, реализуются во многих компиляторах уже лет двадцать.

Автор: prografix 25.07.05, 12:03
Для начала я собираюсь реализовать небольшое подмножество языка ( без указателей, массивов, структур и т.д.).
Вот некоторые отличия от С++:
1) Названия арифметических типов содержат к-во бит ( int8, uint16, float32, ...)
2) Только явное преобразование типов
3) В условных операторах используется только логический тип
4) Переменная во внутреннем блоке не может иметь имя, такое же как и во внешнем
5) Отсутствие восьмиричных констант ( типа 0654 )
На сайте добавлен раздел Описание транслятора с исходниками для Visual C++ 6.0

Автор: Kutushut 25.07.05, 12:14
prografix
Пока все фичи укладываются в стандарт С++ с примененным стандартом кодирования :)
2 и 3 - дело хорошее. Но кто мешает это делать в рамках обычного языка? Разве что совесть программиста. С остальным в принципе то же самое. Насчет 5 - не понял, а чем они мешают?

Автор: prografix 26.07.05, 09:13
Цитата Kutushut @
prografix
Пока все фичи укладываются в стандарт С++ с примененным стандартом кодирования :)
2 и 3 - дело хорошее. Но кто мешает это делать в рамках обычного языка? Разве что совесть программиста. С остальным в принципе то же самое.

В С++ можно написать так, а можно иначе, а здесь иначе не получится.
Цитата Kutushut @
Насчет 5 - не понял, а чем они мешают?

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

Автор: Kutushut 26.07.05, 09:27
Цитата prografix @
В С++ можно написать так, а можно иначе, а здесь иначе не получится.

Хорошо, не эти так другие проблемы вылезут. Исключительно имхо - нельзя сделать язык, на котором любой кодер, знакомый с синтаксисом, будет писать без ошибок.
Ты лучше придумай то, что дейстительно _нельзя_ сделать средствами С++ (или это требует _очень_ больших затрат) - тогда язык действительно будет чем-то новым.

Цитата prografix @
Я не видел случая, чтобы ими кто-то пользовался и решил, что это анахронизм. К тому же способ записи неудачный.

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

Поначалу все выглядело как язык для точных и безглючных вычислений (мое впечатление).
Сейчас получается какой-то шарп для начинающих.

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

Автор: downGRADE 26.07.05, 19:13
prografix
ИМХО: Бесполезным делом занялся, убрать разнообразие из существующего языка, для упрощения транслятора/программирования, не есть креатив.
Нет вдохновляющей новизной идеи... в .NET'е исходники собираются в управляемый код, который оптимизируется под конкретное железо платформой... в ASP.NET'е исходник транслируется в библиотеку, из которой и собирается нужный процесс, по мере надобности.
Держи проблему: будешь обдумавать новый язык, учти необходимость run-time программирования... если концепция надёжности языка будет противоречить этой возможности, то свой язык пишешь самому себе.

Автор: Flex Ferrum 27.07.05, 07:32
Цитата prografix @
Я не видел случая, чтобы ими кто-то пользовался и решил, что это анахронизм. К тому же способ записи неудачный.

"Ты суслика видешь? Нет? И я не вижу. А он есть." (с) чья-то подпись. prografix, поверь, в С++ есть проблемы по-серьезнее чем те, которые ты описал. Ну и, в общем, согласен с Kutushut'ом. Лучше, например, реши проблему удобного сокрытия деталей реализации классов (то, что обычно идет в private-секции). А то, чем занят ты сейчас - "не будем прогибаться под изменчевый мир, пусть лучше он прогнется под нас." (с) А. Макаревич.

Добавлено
Цитата prografix @
1) Названия арифметических типов содержат к-во бит ( int8, uint16, float32, ...)

А если какой-то из типов не представим на целевой платформе? Что будешь делать? Тем более что размер типа int неслучайно равен машинному слову на целевой платформе, ибо операции с данными такого размера наиболее быстры. Судя по всему тебе никогда не приходилось оптимизировать программы по производительности, и ты слабо себе представляешь - как размер данных влияет на скорость вычислений.

Цитата prografix @
2) Только явное преобразование типов

Чем отрежешь огромный и широкоиспользуемый пласт языка. И это вместо того, чтобы научиться правильно этим пользоваться. Пример:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    // Где-то есть функция:
    void foo(const std::string& str)
    {
    //...
    }
    //...
    //...
    // В другом месте ты можешь спокойно написать:
    foo("Some string");
    // потому что std::string поддерживат неявное преобразование из const char*.

Если все преобразования делать явными, то тебе придется писать:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    foo(std::string("Some string"));

и так каждый раз.
Если, например, хочешь запретить какие-то неявные преобразования - делай соответствующие конструкторы explicit и не добавляй в классы операторы преобразования. Зачем язык то для этого корежить?
Цитата prografix @
3) В условных операторах используется только логический тип

Нахрена, позволь спросить? :)

Цитата prografix @
4) Переменная во внутреннем блоке не может иметь имя, такое же как и во внешнем

Уууу... Батенька, да вы не совсем хорошо понимаете правила использования имен в С++, а также их областей видимости.

Цитата prografix @
5) Отсутствие восьмиричных констант ( типа 0654 )

"Не нравиться - не ешь".

Автор: prografix 27.07.05, 12:08
Я всё же считаю, что восьмеричные числа в языке не нужны, а вот двоичные пригодятся. Сейчас посмотрел - в D они тоже есть ( типа 0b11011011 )

Автор: downGRADE 27.07.05, 13:03
Цитата prografix @
Я всё же считаю, что восьмеричные числа в языке не нужны, а вот двоичные пригодятся. Сейчас посмотрел - в D они тоже есть ( типа 0b11011011 )

Восьмеричные цифры достались от процессоров с сисемой команд PDP... там восем регистров адресовались тройками бит...

Автор: Axis 16.08.05, 09:20
когда-то сам писал свой первый скриптовый язык(точнее первую версию), хотел сделать более удобный, делал интерпритатором, оказалось, что удобнее не делать строго заданные типы переменных, с другой стороны мне не нравится скорость работы. В итоге эту версию я развивать не стал, а стал делать компилятор, сейчас он существует в light версии (скорость на уровне c). За основу я взял c, c++ и некоторые свои решения, придумывать думаю не имеет смысла. Хочу сказать одно, что написать действительно язык программирования высокого уровня сможет программист с высоким знанием, при этом ему это не нужно, так как знаний хватает оптимизировать написание программы на с/c++, что написание своего языка программирования не рационально, исключение составляют скриптовые языки.

Автор: Rikkie 18.08.05, 04:51
Мы вообще по другому прикалывались. Работаем с буржуинами. Перевели плюсы (т.е. C++) на русский с помощью макросов. Коды ессно макросами и оформили. Отсылаем буржуям исходники - у них в итоге всякие зюки вылазят. И самое главное, все компилится :) Они потом долго матюгались. Даже русские слова слышались :) Жертвы русского национализма...

Автор: Director 25.08.05, 04:33
Да интересно если язык с++ разрабатывали долгие годы программисты, а не программист то у тебя
на разработку этого языку уйдет вся жизнь.

Автор: Ho Im 25.08.05, 11:45
Rikkie, можешь показать пример такого чуда? :)

Автор: Rikkie 29.08.05, 09:39
Ho Im, нету тут никакого чуда, просто куча #define :) . Запарился файло добавлять - не лезет, хоть и маленькое...

Автор: vst 29.08.05, 18:55
Любой серьезный язык программирования начинается с сайта и IDE. :lool:
А если серьезно, то почитайте "Дизайн и эволюция языка C++" Страуструпа. Если желание создавать язык не пропадет, желаю удачи. У меня лично сразу пропало.

Что-то очень язвительно получилось, самому неприятно. Сорри.

prografix, а ты знаком с какой-нибудь теорией относительно проектирования и разработки языков программирования? Или теорией трансляции?

Автор: Kheor 30.08.05, 08:13
Цитата Flex Ferrum @
"Ты суслика видешь? Нет? И я не вижу. А он есть." (с) чья-то подпись

(ц) фильм ДМБ

Автор: prografix 30.08.05, 10:55
Цитата vst @
Любой серьезный язык программирования начинается с сайта и IDE. :lool:
А если серьезно, то почитайте "Дизайн и эволюция языка C++" Страуструпа. Если желание создавать язык не пропадет, желаю удачи. У меня лично сразу пропало.

Что-то очень язвительно получилось, самому неприятно. Сорри.

Если это ко мне, то я читал. Всё нормально. Хорошая книга. Желание не пропало. Вот только лень мешает и другие темы соблазняют. Буду делать потихоньку.
Цитата vst @

prografix, а ты знаком с какой-нибудь теорией относительно проектирования и разработки языков программирования? Или теорией трансляции?

Недавно стал интересоваться. Читаю понемногу.

Автор: 02077461 27.09.05, 07:59
Задача оттранслировать код из не более чем скрипта (потому, как язык программирования (ЯП) -- это компилятор а не редактор) под силам PHP скрипту.
Нексер заморачиваться на ЯП, если нужно получить правильный код на С.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)