Болталка PascalABC.NET

Да дело не в консольном окне, а в перенаправлении вывода… Хотя в некоторых случаях хотелось бы чтоб и его не было.

У меня всё работает. Использую следующий код:

{$Reference 'System.Windows.Forms.dll'}
Begin
Var ping := new System.Diagnostics.ProcessStartInfo();
ping.UseShellExecute := false;
ping.RedirectStandardOutput := true;
ping.FileName := 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe';
ping.Arguments := '-target:library -r:System.Threading.dll -r:System.Drawing.dll -r:System.IO.dll -optimize -unsafe -out:ColorRestorer.dll ColorRestorer.cs';
Var process := new System.Diagnostics.Process();
process.StartInfo := ping;
process.Start();
Var output := process.StandardOutput.ReadToEnd();
System.Windows.Forms.MessageBox.Show(output);
process.WaitForExit();
End.

А что именно нужно сделать?

Вы мой код запустите, мне компилятор C# не нужен сейчас. Нужно - мне пока что ничего, для соседней темы писал программу и увидел что это не работает если запускать обычным F9 а не Shift+F9…

Я предложил Вам не компилятор, а метод, с помощью которого я его вызывал. Принцип тот-же.

Может объясните наконец, почему нужна привязка к оболочке?

я писал:

Undefined FileName(0) : Ошибка при сохранении сборки: Процесс не может получить доступ к файлу, так как этот файл занят другим процессом. (Исключение из HRESULT: 0x80070020)

Эту ошибку я получил пытаясь запустить программу не первый раз. Но она плавающая и срабатывает только при первой компиляции после запуска паскаля (а может и компьютера).

И опять же потому что она Undefined FileName - ужасно мешает.

Попробую объяснить, почему возникает ошибка. Ваша программа запускает внешнюю программу, перенаправляя его выходной поток в поток Вашей программы. Я не могу точно сказать механизм, но мне кажется что происходит следующее: Вы запускаете программу в режиме связи с оболочкой. Оболочка перехватывает выходной и входной потоки программы, однако выходной поток связан с другим, внешним потоком. Эта цепочка вызывает исключение во внешнем потоке. Либо другой вариант: Программа считывает выходной поток до конца, однако конец не определён, следовательно программа останавливает своё выполнения, ожидая конца потока. При этом обновляя данные. Оболочка влезает в выполнение программы, создавая внешние задержки и воздействуя на выходной поток. Это опять таки приводит к исключению.

Этим типом вообще мало кто пользуется. Во всяком случае я года за 3 ни разу и не вспоминал о нём.

Ну это Вы зря. Для финансовых расчетов с большими числами - самое то. 29 знаков с фиксированной точкой.

Я же не сказал, что никто не пользуется. :wink: Иначе его бы в .NET не было. Другое дело, что финансовыми расчётами занимается далеко не каждый программист. Говорят, что Decimal работает слишком медленно для научных вычислений, да и Single с Double спокойно удовлетворяют потребностям.

А Вы как считаете, если взять весь мир, в какой сфере больше программистов - в научной или в финансово-экономической?

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

Мда… Иногда тут просто детский сад какой-то начинается. Холивары на пустом месте, каких программистов больше, что такое “правило” и т.п. Это правда все еще форум мехмата или уже филиал 4сhan’а?

@Admin Таблица – это хорошо, но вы не отреагировали на более важный вопрос касательно ошибок компиляции и работы анализатора кода с типом decimal.

1 лайк

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

Это стандартный тип для данного диалекта языка и должен поддерживаться полноценно, без исключений. Никакого “страха и риска” быть не должно.

2 лайка

А речь ведь шла не о количестве программистов, а о том, насколько активно тип Decimal используется. Если он никому не нужен, то зачем им заниматься?

Программисты не специализируются на задачах (как, впрочем, и на языках программирования), если они - профессиональные программисты. Они работают в той сфере и на тех языках, где им платят. Поскольку понятие “профессиональный” как раз и означает, что человек получает основные средства к существованию от указываемой профессии. И вопрос был задан не о том, сколько программистов специализируется в той или иной сфере, а сколько их там работает, т.е. пишет и сопровождает соответствующие задачи. Я, к примеру, проработал на научных и инженерных задачах чуть больше 10 лет, лет 15 на экономико-статистических, а последние 20 лет - на банковских (экономико-финансовых) задачах.

Перестаньте экстраполировать свой ограниченный опыт на весь мир! Если вы до сих пор не понимаете для чего он нужен, то это совсем не означает, что им никто не пользуется и что он никому не нужен.

Далеко не всегда формат чисел с плавающей двоичной точкой (real / double, single – как это обычно реализовано в “железе”) удовлетворяет задаче работы с вещественными числами. Вот вам простой пример для сравнения:

begin
  var a:decimal := 0.1 + 0.2;
  println('Сравнение с Decimal:', a = 0.3 ? 'Математически верно' : 'Математически неверно!');
 // Результат: Математически верно

  var b:real := 0.1 + 0.2;
  println('Сравнение с Real:', b = 0.3 ? 'Математически верно' : 'Математически неверно!');
// Результат: Математически неверно!
end.

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

1 лайк

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

Глеб, вам не кажется, что вы не только до конца не понимаете то, о чем тут так категорично заявляете, а еще и немного “путаетесь в своих показаниях”? Ну то такое…

В большинстве индустриальных языков, предназначенных для решения широкого круга практических задач есть свой тип Decimal или эквивалентный ему по свойствам (иногда встроенный, иногда в виде доп. библиотеки/расширения), напр., в С#, Java, Python, C99, даже в Visual Basic и VBA, а также во всех развитых универсальных СУБД типа MySQL, InterBase, DB/2 и др. Это как бы намекает о востребованности подобного функционала в глобальной индустрии IT.

В данном диалекте Паскаля это стандартный тип, унаследованный от С#, и это очень здорово, т.к. серьезно расширяет круг потенциально решаемых на нем задач.

Мне кажется, такая постановка вопроса абсолютно бессмысленна, по нескольким причинам:

  1. Тип Decimal – это уже стандартная часть данного ЯП, мы не обсуждаем здесь расширение функционала, а только лишь устранение ошибок или недоделок;
  2. Насколько часто кто-то чем-то пользуется зависит в первую очередь от круга решаемых им задач, а не от конкретного языка. Могут быть как те, кто каждый день в течении многих лет этим пользуется в разных языках, так и те, кто вообще никогда с этим не сталкивался или просто не знает/не понимает что это такое и для чего это нужно.
  3. Пытаться делать какие-либо обобщенные “статистические” выводы из ответов на форуме, которым более-менее активно пользуются чел. 10-12, было бы по меньшей мере наивно.

И вообще, ваш “вопрос” в контексте данного обсуждения – ничто иное, как попытка сохранить лицо после целой серии нелепых утверждений, с которых вы начали свою бессмысленную критику типа Decimal. Именно это я и называю “детским садом”: попытка везде вставить свои ценные “пять копеек” вне зависимости от того, насколько глубоко ты знаком с предметом обсуждения, подмена контекста, категоричность суждений, обобщение частностей и т.п. Пора уже повзрослеть и относиться к себе и своему опыту/знаниям критически.

Прошу прощения у остальной публики за оффтоп…

1 лайк

Можете объяснить, что такое тайпкласс? Это аналог интерфейса?