Добро пожаловать в C#.NStar! Это ультра-высокоуровневый, кортежно-ориентированный, Си-подобный язык программирования.
Как видно из названия, он - прямое продолжение лучшего из языков сегодняшнего дня - C#. И пусть он развивается не так
быстро, как Lineedge, но стабильно и целенаправленно. Редко какой месяц Red-Star-Soft ни разу
не вносили в него правок (один такой был, только когда нужно было за лето успеть выпустить линейку). И в отличие от линейки,
где подписка, пусть и не для всех без выбора, C#.NStar полностью бесплатен! (А вот обфускатор не бесплатен,
но где вы видели бесплатные обфускаторы, кроме, может быть, самых низкопробных? - прим. ред.)
Наш стиль
1. У нас почти вся типизация статическая, а не как в каком-то Python. Также мы активно используем статически типизированные
списки, вследствие чего, пока переменная примитивного типа не попадает в активное использование в регистрах, она занимает
ровно столько, сколько занимает ее значение. Особенно это касается типа bool - благодаря Элд Хаспу он занимает
ровно один бит. (Это касается только "чистого" .NStar, а не .NStar поверх .NET - прим. ред.)
2. У нас не бывает StackOverflow, потому что в принципе нет стека. Вы можете занять рекурсией всю оперативную память, так же
как и чем угодно другим. Просто и красиво. (На момент написания этих строк в некоторых вспомогательных функциях,
например, в функции закрытия скобки или в функции проверки совместимости типов, все же был стек, но, учитывая специфику
этих функций, переполнить его было бы маловероятно - прим. ред.)
3. Мы говорим твердое "нет" "свободному" и "гибкому" коду, потому что его легко писать, но очень трудно читать,
а читается код несравнимо чаще, чем пишется. И это несмотря на то, что мы понимаем, что язык для новичков и все такое, но
именно поэтому сразу с самого начала приучаем новичков к единственому способу что-либо сделать. Так как новичка намного легче
приучить к этому, чем "продвинутого", уже привыкшего к "гибкому" коду. При этом мы помогаем, но не принуждаем: если
пользователь - профессионал, он сможет отключить предупреждения и сообщения. У нас код короткий,
но не свободный и не гибкий.
4. У нас нет goto. Серьезно. Для выхода из нескольких блоков (и даже из нескольких методов) у нас
будут конструкции, а как попало прыгать по коду не выйдет. Также у нас нет массивов - только списки и кортежи. Мы понимаем,
что неэкономно, но у нас не "сишечка" (язык Си), а ультра-высокоуровневый язык - мы делаем ставку на удобство,
а не на экономию.
1. У нас уже можно, благодаря оператору CombineWith, писать длинные действия одним выражением.
2. У нас можно предельно кратко описать список: (a, b, c, d, e). Аналогично с двумерным, трехмерным
и т. д. списком.
3. У нас с самой первой версии можно объявлять локальные функции и классы. Более того, у нас в принципе нет нелокальных
функций и классов, кроме всей программы, которая является одной большой функцией.
4. У нас до смешного просто написать программу, выводящую собственный код: return Q();. Для особо "принципиальных"
можно немного иначе: var s = @"var s = @"""";return s.Insert(10, s.Replace(""\q"", ""\q\q""));";return s.Insert(10,
s.Replace("\q", "\q\q"));
(к сожалению, только со второй версии). Если вам захочется написать программу, выводящую собственный код и делающую
что-то еще, никаких проблем!
5. У нас нет конкатенаций строк в цикле, выражение с конкатенациями автоматически преобразуется в string.Join.
Наши главные планы
1. Лямбды - этот инструмент-легенда, добавляющий в язык киллер-фичу оригинального C# и возможность творить
самому подобные фичи.
2. Суперполиморфизм, с которым можно делать такое, что оригинальному C# и не снилось!
3. Оптимизация рекурсии, позволяющая в некоторых случаях сделать глубину рекурсии потенциально бесконечной.
4. Язык программирования языков программирования, превращающий LALR(1)-грамматику в готовый транслятор.
5. И самое главное - прямая трансляция, с которой можно: 1 - исполнять программу лишь немного медленнее, чем
в оригинальном C# (он же тоже ультра-высокоуровневый!), и 2 - сразу после появления использовать все новые возможности этого
оригинального C#, кроме явно удаленных, параллельно с возможностями от Red-Star-Soft. И когда это будет реализовано, вот тогда
наступит истинная цифровая революция!
Преимущества C#.NStar
1. Он берет все лучшее из C#.NET. (goto - это не лучшее.) А значит, у него есть перспективы по определению.
Так как, надеюсь, C#.NET представлять не надо. А взяв, добавляет к нему свое. И получается нечто... 2. Он предлагает ноувю парадигму - кортежно-ориентированное программирование (КорОП), резко отрицающее ООП.
В нем объекты не запрещены, но очень нежелательны. Зато по максимуму кортежей, а когда их вложенность становится трудночитаемой,
появляется const typename. It's beautiful, isn't it?