Болталка PascalABC.NET

Но думаете что создавать глобальное состояние - это решение по-лучше?

Компилятор не магию использует для [Cache].
Ускорение достигается тем, что когда понять что результат будет таким же (потому что такие же значения на входе) - он не пересчитывается, а берётся из словаря, сгенерированного для этого метода.
Теперь вопрос - как он поймёт когда результат будет таким же, а когда другим?
Можно сделать очень сложный алгоритм, ищущий все использованные в подпрограмме переменные, но параметры уже указывают это явным образом.

Тут почти все переводится строчка в строчку, хотя я вижу пару сложных моментов.
Нужен контекст этого кода + ваши попытки - чтоб я не всё за вас делал, а подсказывал.

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

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

Если у вас появляются массивы массивов и т.п. - обычно это кривая архитектура, надо использовать больше пользовательских типов.

К примеру, объявить внутренний массив (в вашем случае список) пользовательским типом, и инкапсулировать все операции с ним.

может быть, но это не всегда имеет смысл. имхо, это может как упростить архитектуру, так и осложнить в зависимости от ситуации

забавно, что стремление к совместимости может создать мину в коде. описание где то и в правду не помешало бы

В свое время меня это тоже “забавляло”. Потом привык…

Да лучше разработали бы все компактно, и не было такие проблемы. Но думаю разработчики примут это в будущем.

“Все компактно” - это уже было. У Н.Вирта. Вот только как раз по этой причине и умерло.

А? А что, а почему, а как?

Вам как, всю историю языка Паскаль за 50 лет изложить? Или все же сами в Интернет поищете?

Если вы считаете что-то важным рассказать - милости прошу, ни буковки мимо глаз не пропущу Если же нет - ну, нет так нет. Не настолько важная информация, чтобы её искать

Верно. Не настолько важная. Но тогда не пытайтесь тут устроить филиал “Что? Где? Когда?”. Не получится.

А вот интересно, если так нужно было делать такой компилятор, то почему именно паскаля?

Давно уже, задолго до PascalABC был разработан более прогрессивный язык Modula-2 с улучшенным по сравнению с паскалем синтаксисом и большими возможностями. Можно было бы сделать на её основе систему, а не на Паскале. Дальше ещё были Modula-3, Oberon и тд, но там уже не так много было улучшено.

Отличные широко известные проверенные временем и большой аудиторией языки, о которых помнят до сих пор

вообще немного странно звучит вопрос. а чем Вас такой вариант развития собственно не устраивает?

Ну так Pascal уже развивал сам же товарищ Никлаус Вирт. Он сделал язык Modula, но после пары экспериментов понял, что чего-то не хватает, забросил его и сделал язык Modula-2, который имел все лучшие черты Pascal, но при этом исправлял его недостатки и добавлял недостающие возможности.

Так вот, если задачей авторов PascalABC было развитие паскаля как языка, почему они стали делать язык именно на основе исходного паскаля, а не уже улучшенной задолго до них версии, которая во всём лучше оригинального паскаля?

… И призадумался сэр Михалкович, не осчастливить ли ему мир версией Modula2.NET, но одолели его сомнения тяжкие и создал он PascalАВС.NЕТ. И увидел он, что это хорошо. (Хроники ЮФУ. Из неопубликованного)

Я, конечно, совсем не автор, но ответить попробую, как пользователь. Первая реализация .NET-проекта, как известно, появилась в 2007 году. Загляните в школьные учебники и программы тех лет. Что изучалось? Паскаль и Бейсик, кое-где - “сумасшедшие плюсы”. Какая Модула-2, Вы вообще о чем? РАВС, появившись, начал потихоньку отвоевывать себе место у “турбопаскалей”. Ну какой учитель, находясь в здравом уме и трезвой памяти, рискнул бы, имея программу и учебники с ориентацией на Паскаль, начинать использовать эту самую Модулу? По которой, к тому же, отсутствовали учебники в принципе. А РАВС - ну что, для начала он использовался как обычный Турбо Паскаль в режиме практически полной совместимости. ТР был вытеснен прогрессивной русскоязычной IDE и все были довольны. Авторы выиграли время для того, чтобы начинать расширять язык. А Вы сейчас попробуйте учителям предложить Модулу-2 - много желающих найдете, сами как думаете? Несмотря даже на то, что у Вас сам Никлаус Вирт в товарищах ходит…

1 лайк

А в чём может быть причина проблемы, когда при добавлении в WinForms приложение MenuStrip'а весь внешний вид меняется?

Например:

{$reference System.Windows.Forms.dll}
{$reference System.Drawing.dll}

##
var f:= new system.Windows.Forms.Form;

var but:= new System.Windows.Forms.Button;
but.SetBounds(20, 20, 70, 25);
but.Text:= 'кнопка';
but.parent:= f;

//var m:= new System.Windows.Forms.MenuStrip;

system.Windows.Forms.Application.EnableVisualStyles;
system.Windows.Forms.Application.Run(f);

image

а если раскомментировать строку с MenuStrip, то уже image

при этом менюшка даже не была подключена к форме. достаточно неприятное поведение. заметил, что в конструкторе форм такая проблема не выявляется

Как это точно написано! Лучше и не скажешь…