Здравствуйте, Чистяков Владислав Юрьевич, Вы писали:
ЧВЮ>Статья:
ЧВЮ>Nemerle – вопросы дизайнаАвтор(ы): Чистяков Владислав Юрьевич
Дата: 20.02.2012
Те, кто начинает изучать язык программирования Nemerle после C#, зачастую задаются вопросом, почему при общей похожести языков в Nemerle введены те или иные синтаксические отличия. Эта статься посвящена описанию отличий и объяснению причин их возникновения.
ЧВЮ>Авторы:
ЧВЮ> Чистяков Владислав Юрьевич
ЧВЮ>Аннотация:
ЧВЮ>Те, кто начинает изучать язык программирования Nemerle после C#, зачастую задаются вопросом, почему при общей похожести языков в Nemerle введены те или иные синтаксические отличия. Эта статься посвящена описанию отличий и объяснению причин их возникновения.
Насчет скобочек, было бы хорошо добавить ссылку:
http://en.csharp-online.net/ECMA-334%3A_9.2.3_Grammar_ambiguities
Меньше вопросов будет.
В многомерных массивах было бы хорошо подчеркнуть о необходимости ".": array.[2][[42, 1], [33, 2]]
Опечатка в таблице :
Про списки стоило бы сделать отдельный заголовок.
Это ведь не массивы.
Да и поддержка у них в Nemerle 1.0 получше чем у массивов: Операция ::, Pattern Matching, List comprehension ну и т.п.
Насчет присваивания, стоит подчеркнуть, что это позволяет избежать неоднозначности и сложных выражений типа:
int a = 1;
if (a++ == --a) {}
int a = 0, b = 0, c = 0;
while ( (a = b = ++b + c) == ++a) { }
И классика :
int a = 0;
a = a++ + ++a;
Здравствуйте, Чистяков Владислав Юрьевич, Вы писали:
var ary = new int[] { 42 };
def ary = array[1]; //42
В Список синтаксических расхождений -> Объявление локальных переменных и параметров
// с использованием вывода типов
var x = 42;
var str;
в самом начале нужно наверное строку написать. Иначе тип не из чего выводить.
// с использованием вывода типов
var x = 42;
var str = "nemerle";
ну и для всех 3х столбцов.
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Здравствуйте, Чистяков Владислав Юрьевич, Вы писали:
В таблице "Объявление локальных переменных и параметров" в колонке C# лишняя пустая строка.
Трудно сравнивать.
x, y, x : int // недопустимо!
Должно быть видимо, два раза х не должно быть допустимо вообще
x, y, z : int.
В таблице "Приведение типов" тоже хорошо бы подровнять Nemerle и C#.
В Nemerle нельзя не указывать "| _ =>" в match выражении.
Это хорошо бы подчеркнуть.
В отличии от C# есть проверка на полноту сопоставления.
Не указано , что в Nemerle локальные изменяемые переменные автоматически инициализируются, даже если не писать.
class A
{
static void Main() { int x; System.Console.WriteLine(x); } // Error
}
module A
{
Main() : void { mutable x : int; System.Console.WriteLine(x); } // OK
}