Форум программистов, компьютерный форум, киберфорум
Наши страницы

Другие языки программирования

Войти
Регистрация
Восстановить пароль
 
 
ArmanHayots
0 / 0 / 0
Регистрация: 18.10.2017
Сообщений: 13
#1

Язык O/O++ - Программирование

19.10.2017, 01:35. Просмотров 617. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Язык O/O++ (Программирование):

Язык программирования Яр - Программирование
Разрабатываю полностью русскоязычный язык программирования для профессионального применения (не учебный). Основные достоинства: -...

Определить язык - Программирование
Всем привет , ребят есть код . SUB Create() With rsMain .Edit rsMain.FldVal("DOG_NUM_T")="№" ...

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

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

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

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

30
andyj
62 / 44 / 4
Регистрация: 16.03.2017
Сообщений: 469
31.10.2017, 11:16 #31
Цитата Сообщение от Matan! Посмотреть сообщение
Можно и через директиву #define.(простите за занудство)
Цитата Сообщение от Matan! Посмотреть сообщение
Кстати, то, что Вы написали в своём Стандарте, можно спокойно через ту же директиву #define сделать. В отдельном h-файле.
я про них и говорил! Возможно подобными директивами и многое другое упростить можно, добавив "сахара".
И тогда язык превратится в фреймворк, который упростит кому-нибудь жизнь...

...а это уже не новый язык, а фреймворк (аналог "диалекта"/"говора"/"акцента" в разговорном). Недавно узнал что Котлин(новый язык Гугла для андроида) успешно уживается вместе с Java в отдном проекте - часть кода/модуль можно на одном языке написать, а другую на другом...

Не по теме:

изучая С++ я в свое время отказался от подобного! Хоть Делфи на тот момент был на порядок привычнее(для меня), но есть еще и СТАНДАРТ! Который поддерживается Сообществом(форумы, статьи, чаты, гитхаб-коды/примеры). А значит все хелпы и все вопросы-ответы должны быть на понятном для Сообщества языке! Но с фреймворком есть больше шансов что ваши модификации понравятся сообществу и станут "must have" в любом приличном проекте... или даже познее вольются в "стандартную сборку" компиляторов.


p.s. я НЕ против новых языков!!! (сам свой язык изобретаю с перерывами уже >10 лет и аналогов пока не вижу) Просто выработал для себя правила:

1) язык не должен быть "универсальным" или в лучшем случае пополнит огромную коллекцию языков-фриков (http://ordinatus.ru/10-samyx-strannyx-yazykov-programmirovaniya/) или навсегда останется "курсовой работой". Сейчас мир фреймворков!
...Java Core занимает меньше 5% от знания программирования андроида и столько-же от знания Spring - от его "универсальности" уже ничего не осталось. Та-же ситуация и в С++. Я выучил ядро C++ и научился писать простые программы и понял что это мне не дает знания Qt или VC++ для написания "окошечных программ".

2) язык должен быть узкоспециализированным и быть ВСТРОЕННЫМ в среду(bash, андроид), программу(1C, фотошоп, корел, маткад) или устройство(чип/робот/кофеварка)! Тогда его будут ВЫНУЖДЕНЫ изучать вместе с окружением. Иначе возникает резонный вопрос "зачем мне учить язык, который никому не нужен и на котором я не смогу заработать или даже облегчить свою работу". (только потому что он проще/удобнее остальных не рождает фанатов, если результат работы языка никому кроме фанатов не нужен)

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

4) язык не должен быть на 99% похожим на другой. Иначе нет смысла создавать клон, с которым будут путаться, возвращаясь к более популярному! (вы изначально ставите себя в проигрышную позицию). Исключение - бесплатный аналог платного языка (Лазарус vs Delphi).

5) создание Сообщества будет ЦЕЛИКОМ на изобретателе языка! Форум, ответы на вопросы, начальное исправление ошибок, примеры, хелпы, учебники...

Добавлено через 16 часов 9 минут
...забыл в 4) добавить "исключение №2 - смена специализации (javascript vs NodeJS)"
0
31.10.2017, 11:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2017, 11:16
Привет! Вот еще темы с ответами:

Что за язык программирования? - Программирование
что за язык программирования > restart:with(networks): > new(G):V:=$1..14:addvertex(,G): > v1:=1:#источник >...

Tex и русский язык - Программирование
Я новичок в LaTeX(2 дня). У меня стоит Linux Mint 10 на английском. Преамбула документа такова: documentclass{article} ...

Icon язык программирования - Программирование
кто знает, где скачать учебник по icon на русском?

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


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

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

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