Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Заблокирован

Компилятор

07.07.2023, 20:41. Показов 4496. Ответов 99
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем ситуация, есть две формулы которые применяются в некотором диапазоне, не буду абстрагировать диапазон значений переменной от которого вычисляется всё остальное 0-180.
При значении в диапазоне 0-90 применяются одни формулы, при 91-180 - другие.
Допустим я при задании параметров вычислении буду задавать двум переменным diapazon1 и diapazon2 значения 0 и 1 в диапазоне 0-90, и наоборот 1 и 0 в диапазоне 91-180, чтобы расчёт без всяких ветвлений шёл так:
Code
1
 result := diapazon1*(формула1)+diapazon2*(формула2);
и я избегу кучу проблем и трудностей с кодом.
Но - какой компилятор это предусматривает чтобы оптимизировать компилированный код под такие вещи?
Насколько мне известно - ни один.
Ведь компилятор компилирует под процессор, а тот сделан не под то, чтобы делать умно, а под то - чтобы делать много, в то время когда столько-то как раз и не надо.

Добавлено через 3 минуты
Насколько мне известно есть какие-то настройки для компилятора. Поэтому и вопрос.

Второй вопрос - есть ли компилятор, который после обработки расчётов по первым скобкам загрузит выражение уже обработанное в GPU. Насколько мне известно - тоже нет такого и нигде и не слышно даже не было никогда. Но может это потому что я работаю сварщиком и не имею времени в нужных объёмах чтобы знать. А так например он мог бы в шейдерный процессор конкретный отправить после первого расчёта результат
Code
1
result := формула1
или наоборот
Code
1
result := формула2
.
В общем я сделаю вопрос в блоге.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2023, 20:41
Ответы с готовыми решениями:

Почему компилятор ругается?
Код: type Cube3x3_Side = class colors : array of byte; constructor create(c : byte); procedure...

Компилятор работает с несуществующим кодом
Есть код, который откомпилированный уже не раз. В нём есть строки procedure writeKeyArray;//заливает массив для обработки событий...

Lazarus mac шалит компилятор
Поставил лазарус, все запускается, стандартное приложение комплитится без проблем. Создаю чистое фрипаскальевское приложение- тайм лимит.

99
Заблокирован
10.07.2023, 21:55  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от AzAtom Посмотреть сообщение
Он не может, когда в строке синтаксическая ошибка, и он об этом пишет.
Скажем так, что не всегда он пишет об этом, иногда программа работает с ошибкой, для исключения которой компилятору приходится разжевать по строкам даже то, что казалось-бы он должен прочитать и в чём ошибки порой даже сам не видит.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
10.07.2023, 21:56
Цитата Сообщение от Hretgir Посмотреть сообщение
он даже на более простых выражениях спотыкается и ему их надо расписывать по строкам.
В языке есть определённые правила записи. Если хочется других правил - либо искать из готовых, либо придумывать свой язык и писать свой компилятор с блэкджэком и.
0
Заблокирован
10.07.2023, 21:56  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
В модулях парсеры другие - они разбирают строки формата, например.
мы говорим о листинге сейчас. Не надо о другом.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
10.07.2023, 21:57
Цитата Сообщение от Hretgir Посмотреть сообщение
иногда программа работает с ошибкой
Она работает так, как написано. Если результат ошибочный, значит, так и записано.
0
Заблокирован
10.07.2023, 22:15  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
В языке есть определённые правила записи.
начнём с того, что компилятор порой ошибки не видит, такое бывает и подталкивает к использованию модуля Math.
Цитата Сообщение от Hretgir Посмотреть сообщение
иногда программа работает с ошибкой, для исключения которой компилятору приходится разжевать по строкам даже то, что казалось-бы он должен прочитать и в чём ошибки порой даже сам не видит.
volvo - свидетель, он сам мне советовал разбивать на строки, я-бы не додумался что так вот бывает. По каким правилам написал - по тем же правилам и разбил, то-есть парсер компилятора не всегда справляется даже с чем должен. У меня свидетель есть, я только не знаю помнит он или нет.
И я не говорю что компилятор плох - он в списках лучших, но некоторые задачи (не означает что все подряд как из ненавести) я решаю иначе чем другие, поэтому и завожу речь о модуле своём.
А так я юзал-бы модуль Math и был-бы счастлив, но только не всё так просто, как хотелось-бы.
Тот кто хочет чтобы у него было всё просто - просто пусть забудет про меня, не читает и не вспоминает. И всё у него в жизни будет просто. Так что не надо вредничать или пытаться навредить - будет только хуже себе самим.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
11.07.2023, 00:28
Цитата Сообщение от Hretgir Посмотреть сообщение
он сам мне советовал разбивать на строки, я-бы не додумался что так вот бывает. По каким правилам написал - по тем же правилам и разбил, то-есть парсер компилятора не всегда справляется даже с чем должен. У меня свидетель есть, я только не знаю помнит он или нет.
И я не говорю что компилятор плох - он в списках лучших, но некоторые задачи (не означает что все подряд как из ненавести) я решаю иначе чем другие, поэтому и завожу речь о модуле своём.
А так я юзал-бы модуль Math и был-бы счастлив, но только не всё так просто, как хотелось-бы.
Тот кто хочет чтобы у него было всё просто - просто пусть забудет про меня, не читает и не вспоминает. И всё у него в жизни будет просто. Так что не надо вредничать или пытаться навредить - будет только хуже себе самим.
Вам посоветовали разбить на простые выражения сложную формулу, чтобы её можно было трассировать отладчиком.
Сложно - хорошо, когда вы сам в этом не путаетесь. Вам же предложили методично разбить вашу формулу на более простые шаги.
0
Заблокирован
11.07.2023, 06:20  [ТС]
Мне никто ничего не советовал в текущем проекте, не надо придумывать благодеяний которых не было. Более того, темы открытые именно для получения совета - были проигнорированы. Впрочем участники отклоняются к небытию, предмет темы исчерпан на текущий момент.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
11.07.2023, 06:24
Цитата Сообщение от Hretgir Посмотреть сообщение
не надо придумывать благодеяний которых не было.
Это не благодеяние, это разумный подход к делу. Другой на моём месте посоветовал бы то же самое.
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
11.07.2023, 06:27
Цитата Сообщение от Hretgir Посмотреть сообщение
я решаю иначе чем другие, поэтому и завожу речь о модуле своём.
Цитата Сообщение от Hretgir Посмотреть сообщение
Так что не надо вредничать или пытаться навредить
Слушайте, никто не хочет здесь вредничать, вам русским языком уже несколько дней пытаются рассказать, что ни модуль Math, ни какой-либо другой модуль не отвечают за разбор формул в программе, и переписывание этих модулей ничего не даст. Этим занимается компилятор, внутрь которого залезть и подправить что-то нельзя.
Но вы мало того, что упорно не верите этому, так ещё и агрессивно реагируете.
Единственный способ обойти это я пытался вам подсказать - написать прекомпилятор, который будет брать текст ваших исходных модулей с формулами, и формулы самостоятельно преобразовывать в ассемблерный код в соответствии в вашими пожеланиями, который потом уже будет компилироваться компилятором без изменений.
Но вы и меня высмеяли. Ну, и на кого вам после этого обижаться, кроме себя?
3
Заблокирован
11.07.2023, 06:37  [ТС]
Я не реагирую агрессивно, я напоминаю. Вот видите - вы уже забыли что синтаксическим анализом занимается парсер, а не компилятор. Почитайте сами, ведь не делать это за вас другим.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
11.07.2023, 06:45
Цитата Сообщение от Hretgir Посмотреть сообщение
синтаксическим анализом занимается парсер, а не компилятор.
компилятор включает в себя парсер.
он парсит команды, разделяет на синтаксические единицы и затем транслирует их в код.
1
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
11.07.2023, 06:53
Цитата Сообщение от Hretgir Посмотреть сообщение
занимается парсер, а не компилятор
Извините, но у вас каша в голове. Парсер - одна из составных частей компилятора.
0
Заблокирован
11.07.2023, 07:08  [ТС]
Компилятор не пишет модулей, значит каждый модуль или библиотека имеет свой парсер или дополнение к имеющемуся, парсер компилятора даром ясновидения не наделён. Отвечайте за содержимое своей головы, будьте скромнее, если в ней что то есть. То что вы пишите кашу- не означает что она прямиком попадает в голову читателям.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
11.07.2023, 07:20
Цитата Сообщение от Hretgir Посмотреть сообщение
Компилятор не пишет модулей, значит каждый модуль или библиотека имеет свой парсер или дополнение к имеющемуся, парсер компилятора даром ясновидения не наделён. Отвечайте за содержимое своей головы, будьте скромнее, если в ней что то есть. То что вы пишите кашу- не означает что она прямиком попадает в голову читателям.
Компилятор транслирует код, а компонует библиотеку или выполняемую программу линкер.
Он же связывает программу с библиотеками, статически или динамически - зависит от вашего выбора.
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
11.07.2023, 07:59
Цитата Сообщение от Hretgir Посмотреть сообщение
Компилятор не пишет модулей, значит каждый модуль или библиотека имеет свой парсер
Мне только одно тогда непонятно: зачем вы задаёте вопросы, на которые ответ существует только в вашей картине представлений о программировании?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
11.07.2023, 09:27
Цитата Сообщение от Hretgir Посмотреть сообщение
значит каждый модуль или библиотека имеет свой парсер или дополнение к имеющемуся
Вот у каждой формы есть свой модуль.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs;
 
type
  TForm1 = class(TForm)
  private
 
  public
 
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
end.
Покажи пальцем, где здесь парсер?

Цитата Сообщение от Hretgir Посмотреть сообщение
иногда программа работает с ошибкой, для исключения которой компилятору приходится разжевать по строкам
Цитата Сообщение от Hretgir Посмотреть сообщение
то-есть парсер компилятора не всегда справляется даже с чем должен
Приведи пример строки кода с формулой, который будет скомпилирован с ошибкой, то есть, при работе выдаст неверный результат, а так же, пример разжёванного по строкам кода, которое уже работает без ошибок.
Только не какую-то абстрактную строку, а конкретную, полную процедуру, чтобы каждый её мог вставить в свой проект и оно работало с ошибкой, как заявлено.
0
Заблокирован
11.07.2023, 09:30  [ТС]
А с чего вы взяли что ничего абсолютно не требует вообще какого либо уточнения?

Добавлено через 3 минуты
AzAtom, я не стану искать примеры сейчас для тебя, если ты не хочешь отвечать - тебя никто не заставляет, и ты меня не можешь. Я не заявлял, я объяснял причины использования модуля, и вдаваться в их подробности я не стану, потому что и это когда то будет почищено.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
11.07.2023, 09:37
Hretgir,

вот вам статья из Википедии про Компоновщик

Компоновщик (также редактор связей, от англ. link editor, linker) — инструментальная программа, которая производит компоновку («линковку»): принимает на вход один или несколько объектных модулей и собирает из них исполняемый или библиотечный файл-модуль.
Общая схема процесса линковки. Из объектных файлов и статических библиотек собираются исполняемые файлы или новые статические или динамические библиотеки

Изначально, до появления динамических библиотек, загрузчики могли выполнять некоторые функции компоновщика[1], однако сейчас, чаще всего, загрузка программ выделяется в отдельный процесс[2].

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

Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям;
Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя;
Локальные — могут использоваться внутри объектного файла для упрощения процесса настройки адресов[en].

Для большинства компиляторов один объектный файл является результатом компиляции одного файла с исходным кодом. Если программа собирается из нескольких объектных файлов, компоновщик собирает эти файлы в единый исполняемый файл, вычисляя и подставляя адреса вместо символов, в течение времени компоновки (статическая компоновка) или во время исполнения (динамическая компоновка).

Компоновщик может извлекать объектные файлы из специальных коллекций, называемых библиотеками. Если не все символы, на которые ссылаются пользовательские объектные файлы, определены, то компоновщик ищет их определения в библиотеках, которые пользователь подал ему на вход. Обычно одна или несколько системных библиотек используются компоновщиком по умолчанию. Когда объектный файл, в котором содержится определение какого-либо искомого символа, найден, компоновщик может включить его (файл) в исполняемый файл (в случае статической компоновки) или отложить это до момента запуска программы (в случае динамической компоновки).

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

Компоновщик обычно не выполняет проверку типов и количества параметров процедур и функций. Если надо объединить объектные модули программ, написанные на языках со строгой типизацией, то необходимые проверки должны быть выполнены дополнительной утилитой перед запуском редактора связей.
Изображения
 
0
Заблокирован
11.07.2023, 09:47  [ТС]
Я не задавал вопроса пока про компоновщик, предметом обсуждаемым до сих пор является парсинг. Не надо спешить.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
11.07.2023, 09:52
Цитата Сообщение от Hretgir Посмотреть сообщение
предметом обсуждаемым до сих пор является парсинг.
Пардон, вам шашечки или ехать?
Пардон, каким же образом вы будете грузить, что распарсили, в GPU?
Зри в корень!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.07.2023, 09:52

Как создать свой компилятор на Lazarus?
как создать свой компилятор на lazarus чтобы там можно было написать код и чтобы были кнопки запустить и собрать.

Компилятор Lazarus выдает ошибку на кириллицу во множестве
const a = ; Такая запись с английским алфавитом принимается компилятором, const a = ;

У меня встретилась одна не очень хорошая вещь: Пишу программу, но компилятор выдает ошибку
Вот, что пишет компилятор: unit1.pas(46,21) Error: Incompatible types: got "TTranslateString" expected "LongInt"; Я пока учусь создавать...

А почему это вдруг компилятор считает как и я? Ведь его должны были вроде научить считать иначе - как и меня
Хотя если честно я уже и не помню как меня учили, но в общем мне не понятно почему компилятор считает как я procedure...

Компилятор выдает ошибку "Fatal: Syntax error, ";" expected but "ELSE" found"
var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject);


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru