Причесанный С++
От: Kingofastellarwar Украина  
Дата: 31.10.13 09:52
Оценка: -2 :))
возникла идея но конечно оно не нова но все таки, те кто в теме, расскажите что предпринималось и чем закончились вот такие идеи:

цель — сделать синтаксис С++ более приятным + добавить необходимые фичи без написания компилятора

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

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

ну и нада конечно прикрутить штуку котороая будет позвоялть подключать сторонние С/С++ либы к нашей среде, тут я пока не уверен что есть простой путь
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Причесанный С++
От: BlackEric http://black-eric.lj.ru
Дата: 31.10.13 10:08
Оценка: +5 :)
Здравствуйте, Kingofastellarwar, Вы писали:

K>возникла идея но конечно оно не нова но все таки, те кто в теме, расскажите что предпринималось и чем закончились вот такие идеи:


K>цель — сделать синтаксис С++ более приятным + добавить необходимые фичи без написания компилятора


Причесанный С++ называется D.
https://github.com/BlackEric001
Re[2]: Причесанный С++
От: grendel  
Дата: 31.10.13 11:28
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Причесанный С++ называется D.


Только возможности использовать сторонние С++ библиотеки там ни хрена нет.
Re[3]: Причесанный С++
От: BlackEric http://black-eric.lj.ru
Дата: 31.10.13 11:43
Оценка:
Здравствуйте, grendel, Вы писали:

G>Только возможности использовать сторонние С++ библиотеки там ни хрена нет.


Через dll?
https://github.com/BlackEric001
Re[4]: Причесанный С++
От: grendel  
Дата: 31.10.13 12:20
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Через dll?


Да хоть как. Невозможно. Только plain old C.
Re: C++ Resyntaxed
От: Qbit86 Кипр
Дата: 31.10.13 17:21
Оценка: 16 (1) +1
Здравствуйте, Kingofastellarwar, Вы писали:

K>цель — сделать синтаксис С++ более приятным + добавить необходимые фичи без написания компилятора


http://www.csse.monash.edu.au/~damian/papers/HTML/ModestProposal.html
Глаза у меня добрые, но рубашка — смирительная!
Re: Причесанный С++
От: Abyx Россия  
Дата: 31.10.13 18:51
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>но не создавать под это компилятор, а транслировать это в Си код, тогда любой другой код сможет использовать ваш код, потому что бинарная совместимость и можно будет легко сгенерировать заголовочные файлы


Си не нужен т.к. есть ллвм.
In Zen We Trust
Re[2]: Причесанный С++
От: Kingofastellarwar Украина  
Дата: 31.10.13 21:31
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, Kingofastellarwar, Вы писали:


K>>но не создавать под это компилятор, а транслировать это в Си код, тогда любой другой код сможет использовать ваш код, потому что бинарная совместимость и можно будет легко сгенерировать заголовочные файлы


A>Си не нужен т.к. есть ллвм.


ллвм это хорошо, тока бинарную совметсимость оно обеспечит?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[5]: Причесанный С++
От: c-smile Канада http://terrainformatica.com
Дата: 31.10.13 23:55
Оценка:
Здравствуйте, grendel, Вы писали:

G>Здравствуйте, BlackEric, Вы писали:


BE>>Через dll?


G>Да хоть как. Невозможно. Только plain old C.


Ну чего уж "только"... А как же COM IUnknown ? Вполне себе способ...
См. http://lunesu.com/uploads/ModernCOMProgramminginD.pdf
И "COM Interfaces" секцию в http://dlang.org/interface.html
Re[6]: Причесанный С++
От: grendel  
Дата: 01.11.13 06:05
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Ну чего уж "только"... А как же COM IUnknown ? Вполне себе способ...

CS>См. http://lunesu.com/uploads/ModernCOMProgramminginD.pdf
CS>И "COM Interfaces" секцию в http://dlang.org/interface.html

А это все равно не дает возможности использовать С++ библиотеки.
Если использовать обертки — можно вызвать что угодно и из чего угодно, вопрос в затратах труда.
Re: MetaFun
От: Evgeny.Panasyuk Россия  
Дата: 01.11.13 07:25
Оценка:
K>цель — сделать синтаксис С++ более приятным + добавить необходимые фичи без написания компилятора

Есть например такое:

MetaFun is a program to compile functional programs into C++ template metaprograms. It allows you to write programs in the very Haskell-like language Kiff (for Keep It Fun & Functional), and then use them as compile-time C++ metaprograms.

Re[2]: C++ Resyntaxed
От: NeoCode  
Дата: 01.11.13 07:30
Оценка: -1
Здравствуйте, Qbit86, Вы писали:

K>>цель — сделать синтаксис С++ более приятным + добавить необходимые фичи без написания компилятора

Q>http://www.csse.monash.edu.au/~damian/papers/HTML/ModestProposal.html

Любопытный документ, надо будет изучить.
Я сам в режиме хобби неспешно разрабатываю свой язык программирования, так что мысли кое-какие есть.
Для начала — вот этот стиль "type RXBase : class" и "obj x: double" , который пихают сейчас во все языки... откуда это? Традиционный сишный синтаксис гораздо проще и удобнее. Зачем "type", "obj" (а также всевозможные var, val, let и т.д.), если по идентфикатору и так известно что это имя типа???
Единственное что я бы сделал — так это "func foo(int x, int y) int". Без всяких мусорных двоеточий и стрелочек, разумеется. Это нужно и для вывода типов (из-за чего похожую фичу ввели в c++11), и для удобства объявления вложенных функций, и еще для некоторых полезностей.

А вообще автор явно паскалист чего стоит только предложение заменить == на = и = на :=. Вообще, оператору := нашли прекрасное применение авторы Go — для объявления переменных с автоматическим выводом типа. Только вот можно было пойти еще дальше и разрешить применять его внутри выражений... побоялись наверное

Есть и хорошие идеи:
1. ctor/dtor для имен конструткоров (я бы сделал ctor/dtor ключевыми словами вместо "func", так чтобы можно было еще и давать конструкторам смысловые имена)
2. составные скобки для шаблонов (в действительности именно "составные скобки" не нужны, достаточно односимвольного маркера перед угловыми скобками, по которому парсер переключится из режима "больше/меньше" в режим "угловые скобки").
3. lang "asm" {} вместо "asm" и "extern c" — да, это логично и красиво, и открывает возможности для расширений типа встраиваемых в код скриптов.

Но вообще слабенько, многим вещам автор вообще не уделил внимания.
Re[3]: Причесанный С++
От: Abyx Россия  
Дата: 01.11.13 08:32
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>>>но не создавать под это компилятор, а транслировать это в Си код, тогда любой другой код сможет использовать ваш код, потому что бинарная совместимость и можно будет легко сгенерировать заголовочные файлы


A>>Си не нужен т.к. есть ллвм.


K>ллвм это хорошо, тока бинарную совметсимость оно обеспечит?


чего с чем? если будешь везде генерировать одинаковые типы и сигнатуры — будет бинарная совместимость
In Zen We Trust
Re[3]: C++ Resyntaxed
От: Abyx Россия  
Дата: 01.11.13 08:40
Оценка:
Здравствуйте, NeoCode, Вы писали:

NC>Для начала — вот этот стиль "type RXBase : class" и "obj x: double" , который пихают сейчас во все языки... откуда это? Традиционный сишный синтаксис гораздо проще и удобнее. Зачем "type", "obj" (а также всевозможные var, val, let и т.д.), если по идентфикатору и так известно что это имя типа???


традиционный синтаксис это чтоли где "int x" — переменная, а "int x()" — функция?
In Zen We Trust
Re: Причесанный С++
От: opener  
Дата: 01.11.13 08:50
Оценка: +2 -2
Здравствуйте, Kingofastellarwar, Вы писали:

K>возникла идея но конечно оно не нова но все таки, те кто в теме, расскажите что предпринималось и чем закончились вот такие идеи:


K>цель — сделать синтаксис С++ более приятным



А нахрена, собственно? Меня и так все устраивает.
Я считаю синтаксис С++ достаточно хорошим и приятным, а если хомячкам что-то не нравится — для вас придуман замечательный язык для программирования кофемолок — Джаба.
Re[3]: C++ Resyntaxed
От: Кодт Россия  
Дата: 01.11.13 08:55
Оценка: 1 (1) +1
Здравствуйте, NeoCode, Вы писали:

NC>Для начала — вот этот стиль "type RXBase : class" и "obj x: double" , который пихают сейчас во все языки... откуда это? Традиционный сишный синтаксис гораздо проще и удобнее. Зачем "type", "obj" (а также всевозможные var, val, let и т.д.), если по идентфикатору и так известно что это имя типа???


Во-первых, суффиксный стиль type-or-obj NewName : Type-Expression — как раз и является традиционным, ещё со времён алгола-60 (про -58 не скажу).
Во-вторых, инфиксный сишный стиль — контекстно-зависимый, чтобы его правильно распарсить и трактовать, требуется знать, какие имена уже определены и как они определены (являются типами, шаблонами типов, и т.д.)

Но у автора статьи, на мой вкус, эклектичненько получилось. Особенно с наследованием.

NC>Единственное что я бы сделал — так это "func foo(int x, int y) int". Без всяких мусорных двоеточий и стрелочек, разумеется. Это нужно и для вывода типов (из-за чего похожую фичу ввели в c++11), и для удобства объявления вложенных функций, и еще для некоторых полезностей.


Суффиксный алголо-паскалевский стиль объявления типов и переменных находится в соответствии с алголо-паскалевским стилем объявления функций.
Инфиксный сишный — с инфиксным сишным.
А здесь — предложение рассогласовать стили.

Замечу, что смешанный стиль auto function-name(arg-list) -> function-type одинадцатого стандарта — это компромиссное решение контекстно-зависимых проблем девяносто восьмого.

NC>А вообще автор явно паскалист чего стоит только предложение заменить == на = и = на :=. Вообще, оператору := нашли прекрасное применение авторы Go — для объявления переменных с автоматическим выводом типа. Только вот можно было пойти еще дальше и разрешить применять его внутри выражений... побоялись наверное


Чем плохо auto Var = ..... вместо Var := ..... ?
Ну, или в суффиксной нотации: Var : [auto|ConcreteType] = .....

Или тут дело в том, чтобы отличить инициализирующее присваивание (фактически, конструктор) от переприсваивания?
Var := init-value;
Var = new-value;
Var = another-value;


NC>Есть и хорошие идеи:

NC>1. ctor/dtor для имен конструткоров (я бы сделал ctor/dtor ключевыми словами вместо "func", так чтобы можно было еще и давать конструкторам смысловые имена)

А смысл давать конструкторам разные имена? А как это будет выглядеть в точке вызова?

Кстати, одно время MSVC понимал __ctor / __dtor.

NC>2. составные скобки для шаблонов (в действительности именно "составные скобки" не нужны, достаточно односимвольного маркера перед угловыми скобками, по которому парсер переключится из режима "больше/меньше" в режим "угловые скобки").


Да ну их нафиг, угловые скобки. Опять сделаем контекстно-зависимую грамматику, только контекст будет чуть проще: наличие маркера.
Если уж делать скобки, то нормальную пару.
Пусть хотя бы и [< ... >] — во-первых, никаких пересечений этих диграфов со случайными лигатурами в старом коде — если бы были [[ ... ]], например, то x[y[2]] стало бы неоднозначным.
Во-вторых, помимо мощного умного парсера в самом компиляторе, есть ещё парсеры в интеллисенсе, в редакторах, в препроцессоре. Чем ближе грамматика к операторной, хотя бы в первом приближении, тем лучше для них.

NC>3. lang "asm" {} вместо "asm" и "extern c" — да, это логично и красиво, и открывает возможности для расширений типа встраиваемых в код скриптов.


lang asm — это автор не видел gcc-шного стиля.
Перекуём баги на фичи!
Re: Причесанный С++
От: pepsicoca  
Дата: 01.11.13 10:16
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>возникла идея но конечно оно не нова но все таки, те кто в теме, расскажите что предпринималось и чем закончились вот такие идеи:


K>цель — сделать синтаксис С++ более приятным + добавить необходимые фичи без написания компилятора


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


K>но не создавать под это компилятор, а транслировать это в Си код, тогда любой другой код сможет использовать ваш код, потому что бинарная совместимость и можно будет легко сгенерировать заголовочные файлы

K>(метаданные кста не нада будет вкомпилировать намертво они легко могут быть частью рантайма)

K>ну и нада конечно прикрутить штуку котороая будет позвоялть подключать сторонние С/С++ либы к нашей среде, тут я пока не уверен что есть простой путь


Вообще глобально для языка программирования надо:

1. Разнести алгоритмы и типизацию. То есть пишется всегда шаблон, а типизируется этот шаблон в отдельном месте.
2. Отказаться от ключевых слов. Все ключевые слова должны обрабатываться уже после синтаксического анализа. Алгоритмы обработки ключевых слов должны быть доступны для переопределения пользователем, а не как сейчас — жестко прошиты в трансляторе.
3. Ну там по мелочи — функции объявлять без списка аргументов, а фактический список аргументов указывать в вызове.
Re[2]: Причесанный С++
От: Кодт Россия  
Дата: 01.11.13 12:05
Оценка:
Здравствуйте, pepsicoca, Вы писали:

P>Вообще глобально для языка программирования надо:

P>1. Разнести алгоритмы и типизацию. То есть пишется всегда шаблон, а типизируется этот шаблон в отдельном месте.

Для этого нужна система типов как у хаскелла. Даже обычного Хиндли-Милнера окажется недостаточно.
Либо уткина заводь.

P>2. Отказаться от ключевых слов. Все ключевые слова должны обрабатываться уже после синтаксического анализа. Алгоритмы обработки ключевых слов должны быть доступны для переопределения пользователем, а не как сейчас — жестко прошиты в трансляторе.


Форт. Там даже пробелы доступны для переопределения, если очень захотеть.
В крайнем случае, лисп — там жёстко прошиты только круглые скобки.

P>3. Ну там по мелочи — функции объявлять без списка аргументов, а фактический список аргументов указывать в вызове.


Однозначно, форт.
Перекуём баги на фичи!
Re[3]: Причесанный С++
От: pepsicoca  
Дата: 01.11.13 12:20
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, pepsicoca, Вы писали:


P>>Вообще глобально для языка программирования надо:

P>>1. Разнести алгоритмы и типизацию. То есть пишется всегда шаблон, а типизируется этот шаблон в отдельном месте.

К>Для этого нужна система типов как у хаскелла. Даже обычного Хиндли-Милнера окажется недостаточно.

К>Либо уткина заводь.

P>>2. Отказаться от ключевых слов. Все ключевые слова должны обрабатываться уже после синтаксического анализа. Алгоритмы обработки ключевых слов должны быть доступны для переопределения пользователем, а не как сейчас — жестко прошиты в трансляторе.


К>Форт. Там даже пробелы доступны для переопределения, если очень захотеть.

К>В крайнем случае, лисп — там жёстко прошиты только круглые скобки.

P>>3. Ну там по мелочи — функции объявлять без списка аргументов, а фактический список аргументов указывать в вызове.


К>Однозначно, форт.



10. Бывает нечто, о чем говорят: "смотри, вот это новое"; но это было уже в веках, бывших прежде нас.
...
18. И предал я сердце мое тому, чтобы познать мудрость и познать безумие и глупость: узнал, что и это — томление духа; потому что во многой мудрости много печали; и кто умножает познания, умножает
скорбь.

Я в том смысле, что от транслятора требуется только построить по тексту "программы" базу данных с именами.
Все остальное надо делать пользователю — указывать что в данный момент делать с данным именем. Трактовать ли имя как вызов функции, как имя структуры данных, проверить ли связи имени (ака наследник-потомок в терминах С++). Короче говоря — обработка синтаксически разобранного текста должна быть отделена от самого текста. Тогда все новое легко и непринужденно добавляется пользователем. А что понадобится полльзователю заранее неизвестно. Вот и надо дать инструмент.
Re[2]: Причесанный С++
От: cserg  
Дата: 01.11.13 12:20
Оценка:
Здравствуйте, pepsicoca, Вы писали:

P>2. Отказаться от ключевых слов. Все ключевые слова должны обрабатываться уже после синтаксического анализа.

Предлагаете избавиться от терминальных символов в грамматике, а как-же тогда делать синтаксический анализ?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.