Форум программистов, компьютерный форум, киберфорум
Наши страницы
Другие языки программирования
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
1

Язык O/O++

19.10.2017, 01:35. Просмотров 742. Ответов 30

Скучное предисловие: Год назад, скажи мне кто, что я вдруг займусь новым браузером ОС языком программирования — покрутил бы виском, ибо считал, что всё что нужно уже в принципе есть.
Полтора года назад здоровье вынудило покинуть полноценную работу, и я решил потратить время на восстановление утраченных и недополученных знаний по нативному программированию, которое в моём случае было жутко атрофировано из-за многолетнего увлечения дотнетом и вынужденной работой с жабоскриптом (не спешите бежать на кухню за мылом, я не нодер!).
На руках оказались бумажные книги по С/С++ (правда, по довольно старым стандартам), которые худо-бедно были освоены. На очереди ассемблер, хотя бы базис — принципы в теории понятны, но код всё ещё выглядит как «что, думаешь слишком для меня умный?». Гением я и раньше не был, страшно обожал хитрые велосипеды, чистый код, модульность и ненавидел создание шаблонного кода по методичке — но вот после больницы (может из-за наркоза?) голова стала ощутимо туже соображать и всё даётся труднее, но ассемблер нужен — чтобы банально отладкой заниматься (не то чтобы я ею часто занимался…) и понимать, что вообще происходит.

Так вот, к делу. Изучая си и кресты, я всё больше проникался их идеями — минимальные накладные расходы и при этом кроссплатформа и высокий уровень. Одно зудело — местами странный синтаксис (ну ещё и несовместимость С++ ABI), явно не подходящая лаконичному языку многословность и ещё парочка-другая мелких неудобств. Ооокей, я могу четверть решить макросами, ещё столько же в теории возьмёт простой препроцессор, но всё равно нужны глубокий анализ и разбор типов.

И тут я понял, что мне всего-то нужно исправить синтаксис языка — да, так мало. Но назвать это новыми C/C++ нельзя — совместимость, легаси, овощи, рожь вот это вот всё. Откуда столько шероховатостей в языке? — подумал я. Видимо, сказывается наследие — ведь когда-то был первый C (который K&R), выросший, по сути, из макроязыка для ассемблера. Другие времена, другие требования. И С был макроязыком, и C++ начинался как «С с классами» — нечто, тоже компилирующееся в С. Так может нужен новый уровень абстракции — но именно в таком ключе, чтобы без лишнего кода на выходе? Нужен новый язык, — решил я, — и пусть он будет компилироваться в С/С++.

Сразу будет убита пачка зайцев:
  • Нет нужды создавать с нуля язык, библиотеки, окружение и инструменты
  • Не нужно будет переписывать старый код
  • Старые либы и заголовки также спокойно работают с новым кодом
  • При этом новый язык может быть каким угодно, можно сделать всё максимально compile-time и прозрачным
  • Старые либы и заголовки также спокойно работают
  • Никаких виртуальных машин и сред не нужно
  • Старый код может использовать код на новом языке

И я дал этому языку название — O/O++. Соответственно O будет расширенным C, а О++ — расширенным С++. Подчеркну ещё раз, что мне, несмотря на все недостатки, очень нравятся С/С++ и новый язык должен быть хотя бы не хуже, и при этом оставаться понятным С/С++ разработчикам.

Нужно броситься писать реализацию? Нет, подумал я, ведь не компилятор создаю, а (пафос) АЖ ЯЗЫК ПРОГРАММИРОВАНИЯ.
Первое правило лени гласит, что лучше сделать ничего, но хорошо, чем что-то, но не очень. Что отличает серьёзные вещи от детских? Правильно — бумажка. Документ, RFC, спецификация, даташит — результат строгого проектирования.
Очевидно, что периодически будут требоваться новые вещи, а если языку угрожает какая-либо популярность, то будут альтернативные реализации, тоже по-своему кривые. Значит, нужно чётко поставить и оформить задачу, а для этого нужна сила коллективного планетарного разума, т.е. мнение таких же обычных разработчиком из межсети, ведь не может быть так, чтобы у меня одного чесался зуб кое-что исправить.

Сделал две вещи. Во-первых, создал на bitbucket(выбран из-за возможности хостить hg и более адекватной политики, нежели у конкурентов) репозиторий. Он прост — в корне, помимо readme, лежит файл olang.txt непосредственно для спецификации языка, а также находится папка chalkboard, куда в формате txt или md складываются отдельные предложения.
Прелесть такого подхода в том, что репозиторий обеспечивает ревизии, контроль и площадку для основного обсуждения, а разделение на отдельные черновые пункты и основной документ позволяет аккуратнее всё проработать. Правила внесения предложений и изменений в целом есть в описании репозитория, но вы также можете писать мне свои мысли любым удобным способом — даже здесь или бумажной почтой (может не дойти и не обещаю, что отвечу). Это очень важно, поскольку язык делается для разработчиков, а не для манагеров и красивых отчётов — а значит, всё серьёзно.

Вторая вещь, которую я сделал — это поднял там же, на битбакете, личный сайт, а на нём — страницу проекта.
Я прошу прощения у администрации, поскольку возможно нарушаю правила касательно ссылок, но других идей о размещении у меня нет.
На битбакете вы можете оставлять комментарии к коммитам, как и на гитхабе. На личном сайте также можно комментировать — есть виджет от ВК.


Предвидя главный вопрос — что же язык может дать — приведу примеры некоторых предложений.

1. Укороченные имена некоторых встроенных типов — например uchar вместо unsigned char или udlong вместо unsigned long long.
2. Адекватные указатели на функции —
C++
1
(bool:int,int) * comparer
вместо
C++
1
bool (*comparer) (int,int)
.
3. Возможность дёргать операторы прямо из стрелочного разыменования —
C++
1
x->++
,
C++
1
x->()
и т.д.
4. Исправленный синтаксис для массивов —
C++
1
char[10] a
вместо
C++
1
char a[10]
(ещё лучше стало с указателями).

Остальные можно посмотреть в chalkboard.

Можете добавлять, можете исправлять, можете ругать и обсуждать, но самое главное — спросите мнения друзей и коллег, может им будет интересно принять участие. Что будет в документе — а значит и в реализациях — решать всем вместе.

Смело задавайте вопросы.

P.S. Вот тебе и хобби.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2017, 01:35
Ответы с готовыми решениями:

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

Определить язык
Всем привет , ребят есть код . SUB Create() With rsMain .Edit ...

Язык программирования РС/Б
На страничке http://www.rs-b.nm.ru можно скачить компилятор (написаный...

Символьный язык программирования
Символьный язык программирования. Преамбула. В этом маленьком...

Tex и русский язык
Я новичок в LaTeX(2 дня). У меня стоит Linux Mint 10 на английском. ...

30
Matan!
Delphi/Java/DB Dev + Math
447 / 311 / 118
Регистрация: 31.05.2013
Сообщений: 2,459
Записей в блоге: 5
Завершенные тесты: 2
19.10.2017, 12:18 2
Ну, допустим. Какие-то ключевые слова Вы измените... Конкретно Вашу проблему он будет решать?
#define PRINT(x) std::cout << x
#define PRINT(x,y) std::cout << x << y
#define PRINT(x,y, z) std::cout << x << y << z
А если мне понадобится вывести четыре числа? А если девять?
0
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
19.10.2017, 13:17  [ТС] 3
Matan!, хороший вопрос, но ЕМНИП для макросов с разным числом одинаковых аргументов есть __VA_ARGS__.
А вот полноценной перегрузки нет и отсюда костыли.

Добавлено через 3 минуты
Не успел вчера вовремя внести правки в пост — лимит времени не дал исправить банальные ошибки в своём тексте. Простите.
0
Rius
Эксперт .NET
5014 / 3243 / 793
Регистрация: 25.05.2015
Сообщений: 9,963
Записей в блоге: 11
Завершенные тесты: 4
19.10.2017, 14:17 4
ArmanHayots, найдите время ознакомиться с Язык программирования Яр и не повторяйте его ошибок...

А лимит времени тут 5 минут.
1
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
19.10.2017, 14:35  [ТС] 5
Цитата Сообщение от Rius Посмотреть сообщение
А лимит времени тут 5 минут.
Да, я почему-то решил, что это только для комментария. Сами знаете, как это бывает — десять раз подряд проверишь, а потом всё равно что-то всплывёт.

Цитата Сообщение от Rius Посмотреть сообщение
Язык программирования Яр
0
Миниатюры
Язык O/O++  
Curry
2560 / 1723 / 220
Регистрация: 01.06.2013
Сообщений: 3,599
Записей в блоге: 7
19.10.2017, 15:56 6
Очень многие изобретают улучшенные версии языков не успев освоить оригинальные.
Посмотрите на https://www.rust-lang.org/ru-RU/ , https://dlang.org/, изучите и их. Потом, возможно, вы вернётесь к С++ и его вам окажется достаточно. Или выберите rust, или произойдёт что то ещё.

Осваивать ассемблер, в том числе для отладки программ на ЯВУ не нужно. Разве что вам придётся использовать забагованный компилятор который может иногда сотворять неправильный код. Но такое только в embedded programming встречается, где и ассемблеры совсем другие.
1
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
19.10.2017, 16:04  [ТС] 7
KolodeznyDiver, вы, должно быть, просто поленились вникнуть в суть проекта. Тут как раз отказ от раста (потому что сырой, постоянно меняется, слабо понятен и пока тормоз) и D (из-за автоматической сборки мусора и непонятного пути развития), ибо проще несколько исправлений в синтаксис С/С++ внести, чем городить новый язык с нуля. Но просто поменять язык нельзя, а вот сделать совместимое по выхлопу ответвление, следуя исторической традиции делать одно поверх другого (ассемблер → макросы → С → С++) — вполне.

И в целом получается неплохо, потому что ключевые подкапотные штуки вносит сам комитет по стандартизации С/С++, а мы лишь исправляем для себя некоторые моменты на верхнем уровне.

Имеет смысл ознакомиться с этим.

Что до ассемблера — то как дизасм тогда понимать? А вставки?
0
Curry
2560 / 1723 / 220
Регистрация: 01.06.2013
Сообщений: 3,599
Записей в блоге: 7
19.10.2017, 16:21 8
Цитата Сообщение от ArmanHayots Посмотреть сообщение
просто поленились вникнуть в суть проекта
Ладно, считайте что я ничего не писал про Ваш проект.

Цитата Сообщение от ArmanHayots Посмотреть сообщение
Что до ассемблера — то как дизасм тогда понимать?
Вы хотите заниматься программированием или реинжинирингом (ломом копирайтных программ)? Последнее незаконно, для первого не требуется дизасм.

Цитата Сообщение от ArmanHayots Посмотреть сообщение
А вставки?
Встречаются крайне редко. Вы хотите свою ОС написать или типа? Я, при написании программ для микроконтроллеров то их не использую.

Не по теме:

Я, вот, наоборот, так и не добрался до изучения .NET . :scratch:

0
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
19.10.2017, 16:31  [ТС] 9
Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Ладно, считайте что я ничего не писал про Ваш проект.
А жалко. Хотелось бы что-нибудь и по существу — мол нужно то-то или не нужно это вот.

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Вы хотите заниматься программированием или реинжинирингом (ломом копирайтных программ)? Последнее незаконно, для первого не требуется дизасм.
При отладке нативного кода знание ассемблера просто мастхэв.

Цитата Сообщение от KolodeznyDiver Посмотреть сообщение
Встречаются крайне редко. Вы хотите свою ОС написать или типа? Я, при написании программ для микроконтроллеров то их не использую.
Контроллеры бывают разные, хотя я вот как интересующийся STM8 скорее соглашусь — ассемблер там без лишней нужды лучше не трогать. Что не отменяет надобности в банальной ситуации «интринсик для инструкции в язык не завезли, так хоть руками можно из ассемблера дёрнуть».

Не по теме:

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

0
Dmitriy_M
1428 / 1308 / 131
Регистрация: 20.03.2009
Сообщений: 4,677
Записей в блоге: 11
20.10.2017, 09:59 10
Цитата Сообщение от ArmanHayots Посмотреть сообщение
например uchar вместо unsigned char или udlong вместо unsigned long long.
А чем uint8_t, uint64_t не устраивают?

Цитата Сообщение от ArmanHayots Посмотреть сообщение
2. Адекватные указатели на функции —
Чем не адекватен?
C++
1
using comparer = bool(*)(int,int);
0
Matan!
Delphi/Java/DB Dev + Math
447 / 311 / 118
Регистрация: 31.05.2013
Сообщений: 2,459
Записей в блоге: 5
Завершенные тесты: 2
20.10.2017, 14:27 11
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
А чем uint8_t, uint64_t не устраивают?
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Чем не адекватен?
ТС хочет совместить сильные стороны С/С++ и простоту Паскаля.
1
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
20.10.2017, 15:00  [ТС] 12
Matan! как вариант, кстати.

Добавлено через 1 минуту
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Чем не адекватен?
Ехал using через using,
Видит using в using using…

А всего-то надо исправить.
0
ntlinuxnt
$ su
1598 / 513 / 97
Регистрация: 18.11.2010
Сообщений: 2,805
Записей в блоге: 2
Завершенные тесты: 5
21.10.2017, 15:57 13
Цитата Сообщение от Matan! Посмотреть сообщение
оны С/С++ и простоту Паскаля.
Лучше бы тогда паскаль поправили, он вполне годный.
Но ему чего-то не хватает
0
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
21.10.2017, 17:29  [ТС] 14
ntlinuxnt, речь-то идёт по сути о «давайте очеловечим си и кресты». От паскаля там ровно одно предложение — про оператор присваивания — и то сомнительное. Хотя можно в принципе о диапазонах при инициализации задуматься — типа [0..9], только не до конца понятно, где и кому это понадобится.
Потому и вся надежда на межсетевое сообщество, ведь язык не для меня, а для всех.
0
ntlinuxnt
$ su
1598 / 513 / 97
Регистрация: 18.11.2010
Сообщений: 2,805
Записей в блоге: 2
Завершенные тесты: 5
21.10.2017, 17:55 15
ArmanHayots, я говорю сейчас про очеловечивание паскаля.
0
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
23.10.2017, 01:03  [ТС] 16
ntlinuxnt, паскаль как раз слишком человечный, даже излишне. Дальше только бейсик.
Нужен баланс между человечностью и навороченностью. У сей/плюсов он есть, но там другая проблема — наследие.
0
Matan!
Delphi/Java/DB Dev + Math
447 / 311 / 118
Регистрация: 31.05.2013
Сообщений: 2,459
Записей в блоге: 5
Завершенные тесты: 2
23.10.2017, 08:23 17
ArmanHayots, а что, ntlinuxnt дело говорит. Фишка в том, что паскаль сам по себе очень беден на конструкции. Почему бы Вам то, что есть в С++, С# не добавить в Паскаль? На повестке: автоматическая сборка мусора, множественное наследование.
0
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
23.10.2017, 23:57  [ТС] 18
Matan!, паскаль беден технически. Пытаться его исправить — гиблое дело. Разница между «попытаться из паскаля сделать непаскаль» и «некоторые позитивные изменения в синтаксисе С/С++» должна быть очевидна.

Опять же, есть гибрид плюсов и делфи — тот самый C#.
Автоматическая сборка в принудительном порядке — зло, из-за которого не взлетел D, например.
0
korvin_
2163 / 1652 / 320
Регистрация: 28.04.2012
Сообщений: 5,910
24.10.2017, 10:40 19
Цитата Сообщение от ArmanHayots Посмотреть сообщение
Автоматическая сборка в принудительном порядке — зло, из-за которого не взлетел D, например.
Но взлетело куча других языков. А в D она как раз не принудительная.

D also provides the mechanisms to write code where the garbage collector is not involved. More information is provided below.
--- https://dlang.org/spec/garbage.html

А не взлетел он, потому что никому не нужен "чуть-чуть улучшенный C++" --- ни рыба, ни мясо.
0
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
24.10.2017, 18:54  [ТС] 20
Цитата Сообщение от korvin_ Посмотреть сообщение
Но взлетело куча других языков.
По факту взлетели лишь специфичные языки,, привязанные к каким-либо конкретным средам, сферам или задачам.
И взлетели не из-за, а зачастую даже вопреки.

Цитата Сообщение от korvin_ Посмотреть сообщение
А в D она как раз не принудительная.
Добровольно-принудительная. Можно писать и без неё, только сразу лишитесь поддержки стандартной библиотеки, например.

Цитата Сообщение от korvin_ Посмотреть сообщение
А не взлетел он, потому что никому не нужен "чуть-чуть улучшенный C++" --- ни рыба, ни мясо.
Скорее потому, что очередной недо-C# мало кому нужен. Больше шансов у какого-нибудь C# Native. Но в любом случае и C# и D страдают от избыточности абстракций.

В принципах O/O++ чётко написано — никаких тяжёлых абстракций. Речь об улучшении С/С++, а не о новом языке с нуля.
Только почему-то вместо конкретных предложений я получаю или вопросы вида «а пачиму ни го» (жабоскрипт ещё предложите), или предложения уровня «а можете всё выбросить и сделать типа хаскель?».
0
24.10.2017, 18:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2017, 18:54

Язык программирования Pike
Пайк (англ. Pike — «щука») — динамический интерпретируемый...

Язык программирования GRASS
У кого-нибуть есть информация по этому языку программирования? Поисковые...

Определить язык программирования
:umnik: #!/usr/bin/env python # -*- coding: utf-8 -*- def Cord ( char )...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru