|
Труд вопреки насмешкам
|
||||||||||||||||||||||||||
Unnamed2 Preview 1.0 (Pre-Pre-Alpha). Можете пробовать плоды с дерева нового потомка BCPL17.10.2020, 18:36. Показов 4353. Ответов 65
Метки нет (Все метки)
Всем привет! Интересно, когда вы читали, что "посеяны семена нового потомка BCPL", что "дерево засияло цветами", что "завязались плоды", вы верили, что это не болтовня? Мне, например, сложно сказать, как отнесся бы я, если бы увидел такое со стороны. Но в моем случае это ПРАВДА!!! И сейчас вы в этом убедитесь. Титанический труд длительностью больше, чем полтора года, хоть и с перерывами - и можете пробовать так долго обещаемые плоды! И, к слову, developer123 соврал, когда написал, что я точно не могу придумать что-то без названия. Хотя у языка было много названий - и C↑ᶜC, и C#++, и C with stations - но все они оказались неудачными, и текущая версия не имеет названия (номер 2 программа имеет, так как программа с именем Unnamed1 проектировалась, но не вышла в свет). В будущем я планирую дать языку какое-то название, связанное с C# (но название C#++ не подходит из-за ассоциации с "симбиозом плюсов и шарпа"). Надеюсь, мне удастся создать удобный, профессиональный, мультипарадигмальный, ультра-высокоуровневый язык с низким порогом вхождения в основы.
Несмотря на то, что это версия Pre-Pre-Alpha, но на этом языке уже можно запрограммировать примитивную программу, и он уже имеет некоторые рабочие преимущества перед C#. Среди них операторы !! (эквивалент x = !x) и CombineWith (вычисляет оба операнда, возвращает правый), функции Chain() и Mean(), полуфункция-полуоператор Q() (возвращает собственный код программы), намного более простое выполнение кода, записанного в строку, несоизмеримо бОльшие возможности глубокой рекурсии (на моем компьютере тест показал, что 1.3М - не предел) и намного более редкие вылеты (особенно в сравнении с последними версиями Visual Studio). В списках ниже перечислено, что уже работает, что нет, если что-то может быть непонятно, в скобках приводятся пояснения: Что уже проверено и работает: 1. Не транслятор, который просто исполняет, а полноценный четырехпроходный компилятор: лексический анализ (разбивает на лексемы), предварительный анализ (выделяет классы и функции), основной анализ (строит синтаксическое дерево) и вычислительный анализ (оптимизирует синтаксическое дерево). Список ошибок в большинстве случаев работает корректно. 2. Следующие операторы: + - * (в том числе между строкой и числом) / % pow == > < >= <= != ++ -- >> << ! n! !! ~ & | ^ && || ^^ (бинарный, true ^^ true ^^ true возвращает true) and, or, xor (N-арный, true xor true xor true возвращает false) = CombineWith () sin, cos, tan, asin, acos, atan, ln += -= *= /= %= pow= &= |= ^= >>= <<= Infty, -Infty, Uncty, Pi, E. 3. Следующие функции: Chain() (цепь целых чисел в заданных границах), Choose() (выдает ошибки, но работает), FillList() (заполняет список одинаковыми значениями), ListWithSingle() (выдает ошибки, но работает), Abs(), Ceil(), Clamp() (эквивалентно Max(parameter2, Min(parameter1, parameter3))), Fibonacci(), Floor(), Frac(), IntRandom(), IntToReal() (принудительно преобразует целое число в действительное), Log() (с двумя параметрами), Max(), Max3(), Mean(), Mean3(), Min(), Min3(), Random(), RealRemainder(), Round(), Sign(), Truncate(), string.Compare(), string.Concat(), string.Join(). 4. Следующие полуфункции-полуоператоры: ExecuteString(), Q(). 5. Следующие типы: null, bool, short int, unsigned short int, int, unsigned int, real (длиной 8 байт), string. 6. Блоки в фигурных скобках. 7. Пользовательские классы и функции (с ограничениями). Пример объявления:
9. Возвраты. 10. Вызовы функций (как встроенных, так и пользовательских). 11. Автоматическое преобразование нескольких конкатенаций строк в одно объединение списка строк. 12. В случае применения некоторых операторов к константам они вычисляются на этапе компиляции. 13. Среда исполнения, можно сказать, полностью построена на try-catch, поэтому вероятность вылета ничтожна. Скорее всего, просто не вычислится одна функция или не присвоится значение одной переменной с выдачей соответствующего сообщения, так как большинство рискованных операций обернуты в свои блоки try-catch. В более тяжелом случае произойдет крах, и может также быть указанным место поломки (а может и не быть указанным), так как каждый этап компиляции и исполнения обернут в глобальный блок try-catch. Наконец, экстремальная ситуация, когда, например, не удалась инициализация списка, симулирующего стек вызовов - пишется, что произошла серьезная ошибка и программа не выполнена. Что уже проверено и не работает: 1. Модификаторы доступа. Иногда их применение не выдает ошибку, но в любом случае все классы и функции являются открытыми. 2. Глобальный доступ (public). 3. Модификаторы параметров ref, out и params, а также ref в других местах кода. 4. Тернарные операторы. 5. Индексы и диапазоны. 6. Субординация классов. 7. Константы. 8. Конструкторы и деструкторы. 9. Рекурсивный тип. 10. Циклы. Вместо них можно использовать рекурсию или конструкцию ExecuteString("<SomeAction>" * <NumberOfIterations>);.11. Операторы break и continue. 12. Оператор goto. Это плохой оператор, он ухудшает структуру кода, и мой язык отказался от его использования умышленно. 13. Комментарии. В примерах из этого сообщения они присутствуют, но если вы хотите протестировать эти примеры, комментарии придется убрать. Что уже проверено и работает с ограничениями: 1. Все классы и функции являются безэкземлярными (oxyet). 2. Встроенные экземплярные функции также не могут быть вызваны. 3. Свойства. Работают только автосвойства, не работают свойства только для чтения, и чтобы обратиться к свойству, указывать содержащий его класс обязательно! Примеры допустимых объявлений и обращения к свойствам:
5. Вследствие предыдущего пункта, не работает выполнение строки с параметрами (так как список параметров имеет списочный тип). Вместо этого можно использовать внедрение параметров прямо в код в строке, они будут неявно преобразованы в тип string. 6. Отсутствует универсальный оператор явного преобразования. Можно только использовать функцию IntToReal(), ее сокращение - суффикс "r" для чисел (1 / 3 вернет 0, а 1r / 3 - 0.333...) и такие конструкции, как n + "" или s - 0, а также присваивание переменной нужного типа.7. Оператор is работает только с null и типами, причем не создает переменной с результатом преобразования в нужный тип (конструкция a is type b не работает). Вследствие того, что получаемая переменная не всегда фиксируется, вы можете обнаружить, что значение переменной не того типа, которым эта переменная была объявлена (например, после присваивания int a = 5; a имеет тип не int, а short int).8. Могут быть проблемы с вложенными условиями без блоков, лучше не рисковать и вложить второе условие в блок. 9. Ключевые слова Class и Function пишутся с прописной буквы. 10. Пользовательские пространства имен находятся в разработке, пока что работают просто как безымянные блоки (нельзя обратиться к члену пространства имен снаружи). 11. Не работают многие виды ошибок и особенно предупреждений. Вообще маловероятно встретить предупреждение. Хотя фундаментальные ошибки работают. 12. Список ошибок работает на конкатенации строк, поэтому каждая ошибка ведет к его пересозданию, и при большом количестве ошибок компиляция может зависнуть. Например, на моем компьютере, если будет около 280 ошибок, компиляция, вероятно, будет длиться где-то 5 минут. 13. Вследствие того, что язык является ультра-высокоуровневым, и того, что за все в этой жизни надо платить, он работает существенно медленнее просто высокоуровневых языков, так же, как высокоуровневые языки - существенно медленнее низкоуровневых. Особенно он тормозит на рекурсии, которая работает в куче, а не в стеке вызовов: например, такой код:
Все остальное не проверено и, скорее всего, не работает. Также расширился список будущих возможностей языка: 1. Составные неравенства, такие же, как уже есть в математике и в Пайсене. Например, вместо x >= 0 && x < 10 можно будет написать 0 <= x < 10. С переменной x польза этого не так заметна, а вот если ее имя - что-то в стиле result_of_caculation_of_riemann_zeta_function, польза очевидна. В случае множества разных операторов сравнения производятся попарно между соседними операндами и комбинируются оператором &&, например, a > b < c == d >= e != f раскроется в a > b && b < c && c == d && d >= e && e != f.2. Кроме оператора is, означающего "x является такого-то типа", также оператор maybe, означающий "x может быть такого-то типа", и оператор mbls, означающий "x может быть такого-то типа без потерь". Например, 3.14159 is string вернет false, а 3.14159 maybe string и 3.14159 mbls string - true. В то же время, например, 3.14159 mbls int вернет false. Оператор maybe практически всегда возвращает true, так как в моем языке система типов очень открытая. Но если вы попытаетесь написать, например, 3.14159 maybe Func[string, long long, int], скорее всего, получите false.3. Операторы is-группы, проверяющие преобразование не только всей переменной к какому-либо типу, но и части этой переменной. Пример: s is "Function " + string name, number mbls 1 << int exp (проверяет, является ли number степенью 2), a maybe int b + 5 (последний пример, вопреки предсказаниям некоторых прочитавших, не всегда будет возвращать только true; конечно, если a типа int, то всегда; но если представить себе, что a имеет, например, тип real, как получить false, становится очевидным). Данная конструкция делает проверку в две стороны: 1 - выполняет обратную операцию и ищет кандидатов на результат, 2 - выполняет прямую операцию и проверяет, получено ли исходное значение, причем maybe допускает переполнение, is и mbls - не допускают. Поддерживаются только следующие операторы: + (для чисел и строк) "-" * / % pow >> << & | ^ concat (аналог + для коллекций, как ✠ в бывшем C↑ᶜC). Может быть создана только одна переменная, так что даже не пытайтесь проверить язык на прочность решением кубического уравнения в стиле number is 5 * real x pow 3 - 2 * x * x - 21 * x + 4 или тем более факторизацией number is long long x * long long y - это не выйдет! Также нельзя использовать функции, только операторы.4. Очередной шаг к сближению обычной коллекции и полиморфизма: списки (словари, хэш-таблицы, ...) однотипных классов и функций (не лямбда-выражений, а функций!), как в примере:
unsigned int m + 1). Кроме того, индексы _ и (_, _) - не одно и то же: первый работает абсолютно с чем угодно, второй не работает, например, если весь кортеж равен null. Теперь (хотя не знаю, когда удастся это реализовать) Dictionary является фундаментальным оператором языка вместо template, и списки, хэш-таблицы и прочие опираются именно на Dictionary. Если так будет продолжаться дальше, скоро отпадет необходимость в слове "полиморфизм", так как это будет просто коллекция классов или функций.5. Оператор ".=", присваивающий какому-либо гиперимени свойство или метод этого же гиперимени ("a.=Property" эквивалентно "a = a.Property"). Так как последнее бывшее в употреблении название языка - C with stations, то там, где в сообщениях об ошибках встречается название языка, используется именно это название, так как название "Unnamed2" в сообщении об ошибке - как-то не красиво.
0
|
||||||||||||||||||||||||||
| 17.10.2020, 18:36 | |
|
Ответы с готовыми решениями:
65
Старое и новое о C↑ᶜC. На дереве нового потомка BCPL завязались плоды Вставка тега <pre></pre> в файлы директории Pre-alpha Season Unreal Tournament |
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
|
| 18.10.2020, 12:06 | |
|
0
|
|
|
Труд вопреки насмешкам
|
||||
| 18.10.2020, 14:02 [ТС] | ||||
|
Добавлено через 1 час 4 минуты Добавлено через 43 минуты
0
|
||||
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
|||
| 18.10.2020, 14:16 | |||
|
Все говорят: "У нас вот этот кусок кода выполняется 2 секунды, а у конкурентов - целых 4! Мы быстрее!". Берите пример с разработчиков других языков, рекламируйте как принято. Добавлено через 44 секунды
0
|
|||
|
Труд вопреки насмешкам
|
|||||||
| 18.10.2020, 14:20 [ТС] | |||||||
0
|
|||||||
| 18.10.2020, 14:22 | |
|
0
|
|
|
Всегда онлайн
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
|
|||
| 18.10.2020, 19:03 | |||
|
В этом формате описывается синтаксис языка, на основе которого вы уже пишете лексический анализатор (либо же подаете на вход программе которая сделает это за вас, да да, такое есть, например bison)
0
|
|||
|
|
|||
| 19.10.2020, 08:48 | |||
![]() Вот результат работы с аналогичным кодом свободного языка программирования FreeBasic: Выполнено за 0 ms. Т.е. системной функции GetTickCount даже не хватает разрешения, что бы отобразить реальное время работы программы, насколько оно мало. При 2-х секундах работы на дисплее было бы 2000, так, на всякий случай, кто не знает. В общем пока счет 2000:0 не в вашу пользу, уважаемый Etyuhibosecyu. Совершенствуйте!
0
|
|||
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
|
| 19.10.2020, 15:21 | |
|
Etyuhibosecyu, как скоро вы перепишете
Unnamed2 Preview 1.0 на Unnamed2 Preview 1.0?
0
|
|
|
Труд вопреки насмешкам
|
|
| 19.10.2020, 15:23 [ТС] | |
|
Usaga, не понимаю.
0
|
|
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
|
| 19.10.2020, 15:26 | |
|
Etyuhibosecyu, ну, испытание вашего языка реальной задачей. Компилятор (транспилер) TypeScript'а переписали на TypeScript'е, компилятор C# переписали на C# (версии с пятой или шестой, не помню уже). С LLVM тоже самое было. Показатель того, что язык не игрушечный и реализация его интерпретатора\компилятора вменяемая.
0
|
|
|
Труд вопреки насмешкам
|
|
| 19.10.2020, 15:29 [ТС] | |
|
Usaga, вот, значит, как! Я тоже об этом думал, но для этого необходимо уметь программно создавать исполняемый файл и переводить с языка, описанного LALR(1)-грамматикой, на C#. Думаю, не раньше Preview 3.0.
0
|
|
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
||
| 19.10.2020, 15:32 | ||
|
Etyuhibosecyu, зачем исполняемый файл? TypeScript'у не требуется исполняемый файл, чтобы TypeScipt'ить.
Добавлено через 52 секунды
0
|
||
|
Труд вопреки насмешкам
|
||
| 19.10.2020, 15:39 [ТС] | ||
|
0
|
||
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
|
| 19.10.2020, 15:42 | |
|
Etyuhibosecyu, какие это даёт преимущества перед использованием самого C#?
0
|
|
|
Труд вопреки насмешкам
|
|
| 19.10.2020, 15:48 [ТС] | |
|
Usaga, возможность писать на более функциональном языке. Какая именно у него будет функциональность, описано во множестве моих тем, включая эту, повторяться не хочу.
0
|
|
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
|
| 19.10.2020, 15:55 | |
|
0
|
|
|
107 / 65 / 0
Регистрация: 20.08.2013
Сообщений: 321
|
|
| 19.10.2020, 15:56 | |
|
Etyuhibosecyu - неужели вы не понимаете что вы никогда не напишете компилятор хоть как то рядом стоящий с существующими? Тот же GCC уже лет 30 пишут. Точные сроки лень смотреть. И дальше будут его писать.
Одно понятно - желание что то сделать так и прёт. Вот только выбор этого что - какой то странный. Почему делать то что уже есть? Ладно получалось бы. Тогда можно было бы сделать лучше того что есть. Но получается же откровенный бред. Вот если бы что то новое - то там не такие требования были бы строгие. Не с чем сравнивать. И самая лютая фигня была бы лучшая - в своём классе. т.к. единственная. Не знаю сколько вам лет - но желание делать абсолютно любую фигню хорошо лечится профессиональным выгоранием. Потерпите и оно придёт.
0
|
|
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
|
| 19.10.2020, 15:59 | |
|
developer123, тут всё просто: ТС-у не даёт покое желание создать что-то великое. Или денежное. Или и то и другое сразу. Это он ещё до написания ОС не добрался.
0
|
|
|
Труд вопреки насмешкам
|
|||
| 19.10.2020, 16:03 [ТС] | |||
|
Добавлено через 1 минуту И когда я повторю эту функциональность, останется только ее расширить. Вот так получится более функциональный язык, чем C#.
0
|
|||
|
14371 / 9475 / 1360
Регистрация: 21.01.2016
Сообщений: 35,747
|
|||
| 19.10.2020, 16:06 | |||
|
Добавлено через 21 секунду Добавлено через 1 минуту Опять изобретение велосипедов вместо того, чтобы поискать информацию о существующих решениях. Годы идут, а подходы ваши не меняются.
0
|
|||
| 19.10.2020, 16:06 | |
|
Hash Function Efficiency v0.1 pre-Alpha (May 11th, 2017) [Воздушные замки] C↑ᶜC. Посеяны семена нового потомка BCPL C↑ᶜC. Дерево нового потомка BCPL засияло ярко-голубыми цветами Обходом дерева с рекурсией (pre, in, post order) вывести число вершин, значение которых равно заданному x Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
|
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время?
Никакой пенсии. Никакого нового. . .
|
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю
Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы
Кратко. . .
|
|
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем
**Полевые заметки о двухнедельной совместной работе**. . .
|
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики
1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
|
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928
Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
|
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего
Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
|