Здравствуйте, 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 довольно много: это вы исходники разбирали или всё из примеров вывели?
Вообще, там есть в исходниках какой-нибудь отдельный файл описания синтаксиса (вкл. макросы)?