Другими словами, ваша программа на Ć после обработки транслятором cito
будет одинаково удобочитаема на любом из вышеупомянутых языков в соответствии с правилом наименьшего удивления.
Синтаксис похож на синтаксис языка C#. Автор пишет, что на самом деле даже подсветка синтаксиса C# работает достаточно хорошо для Ć. Но при этом Ć не является клоном C# или его подмножеством: «Различия обусловлены необходимостью полностью автоматизированной трансляции в эффективный код на C и JavaScript в частности».
Ć является объектно-ориентированным языком программирования, поскольку большинство целевых языков являются таковыми: «Это можно рассматривать как улучшение по сравнению с C, тем не менее, объектно-ориентированный вывод C довольно прост в использовании для программистов на C».
Зависимости от библиотек рантайма минимальны. Вывод на C часто представляет собой самодостаточную пару .c/.h
, содержащую переносимый, человекочитаемый код C99. Аналогично, вывод на других языках не зависит ни от чего, кроме стандартного языка.
Управление памятью нативное для целевого языка. Если в целевом языке доступен сборщик мусора, то он используется. В противном случае (в C и C++) объекты и массивы выделяются в стеке для максимальной производительности или в куче для дополнительной гибкости. При выделении в куче используются интеллектуальные указатели C++.
Работа над языком Ć велась много лет, и вот он наконец дорос до «официального» объявления.
Пример кода на Ć:
public static class HelloCi { public const int VersionMajor = 0; public const int VersionMinor = 3; public const string Version = VersionMajor + "." + VersionMinor; /// Returns `true` if and only if `x` is a power of 2 (1, 2, 4, 8, 16, ...). public static bool IsPowerOfTwo(int x) { return (x & x - 1) == 0 && x > 0; } /// Calculates greatest common divisor of `a` and `b`. public static int GreatestCommonDivisor(int a, int b) { // Euclidean algorithm while (b != 0) { int t = b; b = a % b; a = t; } return a; } /// Checks whether the given string is a palindrome. /// Note: empty string is considered palindrome. public static bool IsPalindrome(string s) { int j = s.Length; for (int i = 0; i < --j; i++) if (s[i] != s[j]) return false; return true; } /// Gets a boolean value out of strings `"true"` and `"false"`. /// In other cases returns `defaultValue`. public static bool ParseBool(string s, bool defaultValue) { if (s == "true") return true; if (s == "false") return false; return defaultValue; } /// Converts an unsigned integer from its decimal representation. public static int ParseUnsignedInt(string s) { if (s == null || s.Length == 0) throw "null or empty argument"; int n = s.Length; int r = 0; for (int i = 0; i < n; i++) { int c = s[i]; if (c < '0' || c > '9') throw "Not a digit"; // TODO: detect overflow r = r * 10 + c - '0'; } return r; } }
См. также Haxe.
ссылка на оригинал статьи https://habr.com/ru/articles/582988/
Добавить комментарий