Ошибки PascalABC.NET

А я и не прошу. Просто отметил, что жалко… Как бы нет единообразия. Вот тут .Print работает, а тут - нет. Кстати, для decimal не определена даже Sqr, не говоря о более серьезных функциях. Видимо, доллары в квадрат не возводят…

Да, это немного чужеродный тип

@admin, в #998 я использовал тайпклассы только потому что файл которым я тестировал уже был с ними, так меньше менять. С интерфейсами тоже не так:

type 
  I1 = interface end;
  
  t1=class(I1) end;
  
procedure p1<T>(o:T);
where T: I1;
begin
  writeln('I1');
end;

procedure p1<T>(o:T);
begin
  writeln('not I1');
end;

begin end.

Тут пишет что p1 повторно объявлена. Это ошибка? Если нет, то как сделать чтоб на уровне компилятора решало какую подпрограмму вызвать?

тут

Умножение процедуры на число

procedure p := Write(1);
procedure q := Write(2);
procedure ln := Writeln;
procedure Run(p: procedure) := p;

begin
  a1 := p*10 + ln; **//Пропущено var**
  a1;
  a1 := p*10 + q*10 + ln;
  a1;
  Run((p + q)*10 + ln);
end.

Дальше:

Лямбда-выражения

Эквивалентный код без лямбд

function Cond(x: integer): boolean;
begin
  Result := x mod 2 = 0;
end;

function Fun(x: integer): boolean; **//integer а не boolean**
begin
  Result := x*x+1; **//а откуда +1?**
end;

begin
  var a := Arr(1,2,3,4,5,6,7,8,9);
  a.Where(Cond)
  .Select(Fun).Println;
end.

Ещё

Типы процедурных переменных

real->real – тип функции с параметром типа real, возвращающей real
(real,real)->real – тип функции с двумя параметрами типа real, возвращающей real
()->integer – тип функции без параметров, возвращающей real //А по моему integer
(real,real)->() – тип процедуры с двумя параметрами типа real

Это, скорее всего, не всё. Как насчёт просмотреть всё же презентации, перед тем как постить?)) (ну и теперь, те что запостили, это всё сразу в глаза бросается)

Ничего не понял. Слайд про умножение процедуры на число не про лямбды

Как это, вы дальше пролистайте. Сами же давали тут ссылку на неё, когда спросили про лямбды.

А пост мой, если что, про опечатки которые я там нашёл.

Я долго боялся, но вот очень понадобилось и всё же пришлось влезть во всю баганутость проектов WinForms (той самой функции IDE). Вам как, баги тамшние надо в issue? Там наверное штук 10-20 будет только для начала…

Это никто не будет переделывать я думаю. Мы тоже боялись туда влезать. При необходимости мы закроем эту часть. Раз уж мы стали очищать всё от багов

2 лайка

Фигасе! Т.е. по принципу гильотина – лучшее средство от головной боли? :hushed:

Был вполне рабочий web-интерфейс – закрыли (ну, ладно, тому были объективные причины – закончилась целая эпоха проприетарных web-плагинов и там уже нечего было реанимировать без глобальной переделки на базе других технологий), теперь вот даже простой и удобный редактор формочек хотите пустить под нож лишь на основании того, что кто-то обратил внимание, что он несовершенен, а ремонтировать пока некому?!

Так скоро от “мощной среды разработки” вообще ничего не останется :frowning_face: Могу добавить, что еще редактор весьма несовершенен, подсветка кода кривая, темы не поддерживаются, дебагер глюканутый, интеллисенс иногда фигню показывает, анализатор время от времени вообще падает, да еще и с потерей контекста, и сама среда, бывает, крашится ни с того ни с сего… Давайте уж сразу все это “закроем”, чтоб не мучаться, и оставим только голый компилятор! Хотя, нет, он тоже иногда крашится… Доктор сказал в морг – значит в морг! :smiling_imp:

Вы хотите сказать, что уже есть кому? :smile:

Ура, у нас скоро будет работающий редактор формочек, редактор кода с фановской подсветкой и поддержкой ништяков, дебагер для правильных пацанов (без глюков) и волшебный интеллисенс!

uses Graph3D; 
var Pz:=Sphere(0, 0, 0, 0.2, colors.Blue);
begin
Window.Maximize;
Camera.UpDirection:=V3D(0,1,0);
Camera.Position:=P3D(0,0,30);
Camera.LookDirection:=V3D(0,0,-30);
for var i:=0 to 4 do
  begin
Pz.MoveTo(1, 0, 0);
//Pz.MoveOn(1, 0, 0);
//Pz.AnimMoveOn(1, 0, 0, 5).Begin;
//Pz.AnimMoveTo(1, 0, 0, 5).Begin;
  end;
end.

Объясните мне, пожалуйста, почему в этом коде операторы MoveTo и AnimMoveTo работают по-разному, это ошибка? Если нет, тогда в чем отличие между AnimMoveOn и AnimMoveTo?

Да ладно)). Мне вот оно понадобилось чтоб зрительно расставить элементы формы. А потом просто копирую координаты в нормальную программу. Как ни крути, даже с багами, это удобнее чем вслепую координаты вписывать, а потом смотреть не налезло ли 1 на другое. И так loop 100 do.

Anim это сокращение от “Анимация”. То есть просто Move телепортирует объект, а AnimMove плавно сдвигает его.

А MoveTo и MoveOn отличаются тем относительно чего они двигают. То есть MoveTo(1,0,0) сдвигает в точку (1; 0; 0), а MoveOn(1,0,0) сдвигает на 1 в сторону X+, относительно того где был объект когда началась анимация. Если он был в точке (5; 2; 3) - MoveOn(1, 0, 0) сдвинет его в точку (6; 2; 3), а MoveTo(1, 0, 0) сдвинет его в точку (1; 0; 0).

По моему, хоть пишете Вы с @RAlex-ом много, но сути, кроме выяснения отношений, мало.

Никто не собирался полностью отказываться от редактора формочек, но вы вот попробуйте что то в нём сделать. Это не те баги компилятора, которые встречаются раз пару дней. Тут каждые 5 мин бьёшься бошкой о что то сырое и твёрдое. Как 1 из главных фич в таком состоянии это нельзя позиционировать, особенно считая что нет ни 1 разработчика, которому интересно было бы исправить всё это (хотя, кстати, им может стать каждый желающий. К примеру Вы).

Мне вот, когда я учился, 1 из учителей сказал что мне стоит научится в этом редакторе формочек работать, типо это очень важное умение. Ну и тогда я на долго вперёд ужасов насмотрелся. Так может любой новичок туда случайно залазить, а потом привыкает работать без анализатора кода и в условиях что лишнее лучше не трогать, а то ломается всё (был уже 1 такой, в помощь новичкам писал). А для карьеры программиста это как яд.

А, понял

В принципе, да. Он написан хорошим студентом 5 лет назад, идеи реализации мы уже забыли, он никем не поддерживается. Если хотим среду без багов, эту часть надо закрыть

Это ваша ошибка. Вы запускаете несколько анимаций одного и того же параллельно и сразу. Так нельзя. On относительно текущей точки, to — к абсолютной точке

Мы можем это поддерживать. Баги в интеллисенс потихоньку исправлять будем, но он у нас в силу общего алгоритма все равно останется нечувствительным к некоторым вещам. Баги в компиляторе это конечно наша основная ответственность. И пожалуйста имейте в виду, что всякие новые хотелки в языке будут потенциально множить баги. Так что предложения об улучшении должны быть самые необходимые, а не “давайте замутим это”

Хорошо, а можно тогда оформить эту удаляемую часть в виде плагина или опциональной dll-ки (с пустой заглушкой в базовом дистрибутиве), чтобы можно было как-то просто ручками добавлять её назад тем, кто находит её все-таки еще полезной, несмотря на все глюки? Она же будет пока неизменяемой, один раз адаптировал её таким образом и впоследствии никакой доп. работы по поддержке от вас не потребуется. В идеале – в инсталляторе отдельную галочку завести (по дефолту выключенную), с предупреждением для тех, кто её выбирает, о том, что компонент нестабильный и снят с поддержки, мол, ставьте только на свой страх и риск.

1 лайк

Вы запускаете несколько анимаций одного и того же параллельно и сразу.

Я специально заккоментировал остальные операторы в теле цикла, поэтому выполняется только один вид анимации. Просто логика ее выполнения мне была не ясна. Я думал, что анимация будет выполнятся последовательно по мере цикла, а она выполняется в конце цикла, например, если поставить такой оператор в цикле с i от 0 до 4:

    Pz.AnimMoveon(1, 0.05*i*i*i, 0, 2).begin;

то анимация тела будет не по гиперболе, а по прямой из исходной точки в точку с координатами {1, 5}