Re[20]: Оффтопик: Nemerle
От: FDSC Россия consp11.github.io блог
Дата: 09.09.06 13:11
Оценка:
Здравствуйте, VladD2, Вы писали:

FDS>>Не видел ещё не одного вопроса по C#, на который нельзя было бы ответить после внимательного чтения спецификации (на это, правда, не все способны). Форумные вопросы в принципе должны возникать только от нестандартной реализации и багов (по крайней мере, что касается C#).


VD>Значит плохо смотрел. Я сам иногда нахожу интересные ответы хотя казалось бы многие спецификации дотнета знаю чуть ли на изусть.


По C# есть? Можно ссылку? Интересно посмотреть... (если не трудно, конечно)
Да, я не часто туда захожу.

По поводу ответов и вопросов — они действительно интересные, не спорю, но, скажем, конкретно по C# у меня ещё не возникало ни одного вопроса, на который бы мне нужно было обращаться в форум: это огромный плюс для этого языка в моих глазах (и в форуме не видел такого, что бы вообще нельзя было понять самостоятельно). А по Nemerle у меня уже десяток вопросов (на которые я сам не знаю ответа), которые возникли просто после написания простейших функций. [я бы сказал, что на уровне простейших функций Scheme гораздо легче для изучения, чем Nemerle ]

VD>У меня большое ощущение, что ты читал статью или по диагонали, или просто не вдумывался.

VD>Попробуй еще раз прочесть раздел: Локальные функции
Автор(ы): Сергей Туленцев, Владислав Чистяков
Дата: 23.05.2006
Производительность труда программиста в основном зависит от самого программиста. Однако даже самый опытный и знающий программист мало что может без подходящего инструмента. Эта статья открывает цикл статей об одном из таких инструментов, еще мало известном среди программистов, но очень многообещающем. Язык Nemerle, о котором пойдет речь в этих статьях, на первый взгляд очень похож на слегка улучшенный C#, но привносит многое из передовых исследовательских языков. Данная статья рассказывает об отличиях Nemerle от C# (как наиболее близкого языка)и является неформальным введением в язык.
и далее.


Хм, может я и не вчитывался (кое-где честно говоря действительно по диагонали), но этот раздел я раза три или четыре прочитал (включая файлы на самом сайте), и вот ну не вижу отличий: чем в Delphi функции — не замыкания! (см. пример ниже)

VD>У функций Немерла два основных отличий.

VD>1. Их функции являются полноценными лексическими замыканиями. Так что ты можешь использовать напрямую все переменные и функции объявленные выше данной. Например:
VD>
VD>usung System.Console;

VD>mutable x = 5;
VD>def add(a, b) { a + b }
VD>def addX(c) { add(c, x); }

VD>WriteLine(addX(2));
VD>


Но чем Delphi в данном случае уступает [кроме отсутствия type inference]?

program Sample;

{$APPTYPE CONSOLE}

procedure Main;
var
  x : integer;
  tmpString : ANSIString;

  function add(const a, b: integer): integer;
  begin
    Result := a + b;
  end;

  function addX(const c : integer): integer;
  begin
    Result := add(c, x);
  end;

  const Cx = 5;

begin
  x := Cx;
  WriteLn(addX(2));
  ReadLn(tmpString);
end;

begin
  Main;
end.


Выводит в консоль число "7", так же как и ваш пример.

Этот код фактически аналогичен приведённому выше, кроме того, что внутренняя функция может быть использована в Delphi только в области её объявления (в пределах main, включая вложения).


VD>2. Функции в Немерле являются значениями. Над ними можно совершать преобразования. В общем-то пример выше как раз это показал, но не очень явно. А вот как можно:

VD>
VD>usung System.Console;

VD>mutable x = 5;
VD>def add(a, b) { a + b }
VD>def addX = add(x, _);
// Я думаю, надо def addX = add(_, x); ?

VD>WriteLine(addX(2));
VD>


Да, с этим согласен — это круто, не считая замечания, так как несвязанный параметр, как мне кажется, тут первый, а не второй, как вы написали. Но это, собственно, уже не к локальным функциям относится, а к созданию новых функций из старых.


FDS>> Опять же, в каком документе это описано? Этот язык, наверное, в несколько раз круче, чем я о нём думаю, и всё только потому, что документация чёрт знает как оформлена. Эх, ну почему они не из Microsoft?!

VD>Статья сделана по их сайту. Там конечно есть не все, но очень многое. Да и в статье есть многое и в одном месте.

Конечно, как мне вчитываться, когда я на первом же своём тесте получил ошибку, которую не могу исправить, потому что не понимаю.
(пожалуй первый раз в жизни у меня т а к и е проблемы с синктасисом )

Компилируется:
...
class C
{
    public static Method(i : ref int) : int
    {
        i = i + 1;
        i
    }
}
mutable x = 5;

WriteLine(C.Method(ref x));
_ = ReadLine();


Некомпилируется:
...
class C
{
    public static Method(i : ref int) : int
    {
        i = i + 1;
        i
    }
}

def MM(i : ref int) : int
{
    i = i + 1;
    i
}

mutable x = 5;

WriteLine(C.Method(ref x));
WriteLine(MM(ref x));
_ = ReadLine();


Ошибки:

nested ref/out type found E:\Prg\temp\070906\ConsoleApplication3\Main.n 22 1 ConsoleApplication3

needed a writable location for assignment target, got a reference to local symbol `a function parameter i', which is read-only E:\Prg\temp\070906\ConsoleApplication3\Main.n 24 1 ConsoleApplication3

in argument #1 of +.s, needed a int, got void: void is not a subtype of int E:\Prg\temp\070906\ConsoleApplication3\Main.n 24 5 ConsoleApplication3

expected int, got void in function return type: void is not a subtype of int E:\Prg\temp\070906\ConsoleApplication3\Main.n 22 1 ConsoleApplication3

wrong number of parameters in call, needed 0, got 1 E:\Prg\temp\070906\ConsoleApplication3\Main.n 31 11 ConsoleApplication3



Просто скопировал метод и он перестал компилироваться
Что я должен думать о вменяемости компилятора? Естественно у меня чисто познавательные вопросы: потому что язык мне всё-таки интересен для практических целей. Если я использую язык, я должен быть уверен, что по крайней мере элементарные операции я на нём умею делать.
Может я плохо искал, но что-то не в вашей статье, ни на сайте не нашёл объяснения данному явлению (впрочем, я очень быстро путаюсь в разрозненных фактах). А ведь сделал совершенно элементарную вещь

FDS>>С вашей интеграцией не так, что нужна последняя версия VSIP SDK. Насколько я понимаю, по Dial-Up её не скачать.

VD>Скоро все будет ОК. У нас уже есть так называемый PLK который позволит сделать инсталлятор. Но надо кое что доделать.

Вот это было бы круто

P.S. Можно самый важный вопрос: вы знаете о Nemerle довольно много: это вы исходники разбирали или всё из примеров вывели?
Вообще, там есть в исходниках какой-нибудь отдельный файл описания синтаксиса (вкл. макросы)?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.