A A A A Автор Тема: Какой язык программирования учить  (Прочитано 2437 раз)

cin и 4 Гостей просматривают эту тему.

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #40 : 27 Ноя 2025 [00:54:33] »
В общем, частично вышел из положения добавив в каждый проект вообще все модули cpp этой apc либы. Благо дело их немного, всего 14 штук, ещё закомментировал ненужный для Windows заголовочник GNU_iomapip.h. Все консольные проекты откомпилировались и собрались, кроме Coco, Eclipse  и Sunrise. В них не находит Rz_..., но он вроде есть в одном из модулей. Если кто знает в чём дело дайте знать, может кто-то сталкивался. 
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #41 : 27 Ноя 2025 [01:21:10] »
В них не находит Rz_..., но он вроде есть в одном из модулей. Если кто знает в чём дело дайте знать, может кто-то сталкивался. 
По идее это функция-друг, описана в APC_VecMat3D.h находится в APC_VecMat3D.cpp

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #42 : 27 Ноя 2025 [09:10:30] »
По идее это функция-друг, описана в APC_VecMat3D.h находится в APC_VecMat3D.cpp
Хм, это ясно было ещё с 2003 года, а вот почему её теперь не видит компилятор, когда все модули подключены как полагается, не ясно. Кстати, остальные Аpc проекты и новый 64х компилятор Modern LLVM быстро откомпилил.
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #43 : 27 Ноя 2025 [09:31:35] »
Если в групповом проекте сборка проходит, а других - нет, то возникает подозрение, что есть различия в настройках.
Настройки все одинаковы, пустые проекты создавались как консольные C++  приложения по шаблону студии, проверялась работа компиляцией, потом добавлялся оригинальный coco.cpp c необходимыми модулями. Всё. Из 15 проектов проблемы, как теперь выясняется, были из-за модуля GNU_...h. Закомментировал. Остался в 3х проектах баг с невидимыми почему-то возвращаемыми переменными  Rz, Ry, Rz в одном модуле. Как доберусь до компа посмотрю в чём дело, но их надо видимо слелать глобальными и вынести из функции. :facepalm:
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #44 : 27 Ноя 2025 [10:34:10] »
Хм, это ясно было ещё с 2003 года, а вот почему её теперь не видит компилятор, когда все модули подключены как полагается, не ясно.
А компилятор ли ?
Сообщение компилятора выглядят примерно так: Compiler error, undefined RA_x
А сообщения линкера: link error - Unresolved External reference RA_x
Это разные ошибки.

Ошибка компилятора - это если в коде используется RA_x, но не подключен заголовочный h или hpp файл в котором есть определение функции
А ошибка линкера - это если в проекте не подключен cpp файл или библиотека, которая содержит реализацию. Либо они скомпилирована с другими параметрами - скажем 64 бита вместо 32 бит для остального проекта.

Причем иногда ошибки выдает инкрементальная линковка - тогда имеет смысл почистить проект - сделать Build Clear или make clear или что там из опций. А потом пересобрать с нуля через Rebuild.
Причем убедиться, что было сообщение  типа Compiling APC_VecMat3D.cpp - success или типа того и объектный файл - o или obj для него создан и в командной строке link он тоже присутствует при линковке
 
 
« Последнее редактирование: 27 Ноя 2025 [11:06:44] от yacc »

Оффлайн mbrane

  • *****
  • Сообщений: 15 608
  • Благодарностей: 349
  • Мне нравится этот форум!
    • Сообщения от mbrane
Re: Какой язык программирования учить
« Ответ #45 : 27 Ноя 2025 [11:11:01] »
Здравствуйте, жители форума. Я наслышан, что в астрономия (научная деятельность) на 90% состоит из программирования. Так вот, есть вопрос: какой язык программирования мне стоит учить? Сейчас в 10 классе. Буду рад


пока питон или go...

Оффлайн mbrane

  • *****
  • Сообщений: 15 608
  • Благодарностей: 349
  • Мне нравится этот форум!
    • Сообщения от mbrane
Re: Какой язык программирования учить
« Ответ #46 : 27 Ноя 2025 [11:21:18] »
C++


рановато для 10 класса... и для питона есть куча удодбных инструсентов для интерактивного программирования типа записныз книг jupyter/google colab ... C/C++ это когда уже знаешь основы как писать, для создания производительного кода... Кстати на питоне толже можно создавать производитьельный код используя  внешние библиотеки написанные на С, С++, Fortran scipy, numpy, cudapy или расширения типа numba, cython

Оффлайн mbrane

  • *****
  • Сообщений: 15 608
  • Благодарностей: 349
  • Мне нравится этот форум!
    • Сообщения от mbrane
Re: Какой язык программирования учить
« Ответ #47 : 27 Ноя 2025 [11:23:44] »
А, если изначально (!) озадачиться, то пишите на Java.
мультиплатформенность это не java - а особый стиль написания программ на том же с++

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #48 : 27 Ноя 2025 [11:24:55] »
go
Практически не используется в прикладных научных вычислениях

Оффлайн mbrane

  • *****
  • Сообщений: 15 608
  • Благодарностей: 349
  • Мне нравится этот форум!
    • Сообщения от mbrane
Re: Какой язык программирования учить
« Ответ #49 : 27 Ноя 2025 [11:33:14] »
Объединение двух языков под общей крышей в одной среде программирования отлично показало все многочисленные недостатки языка С++, включая его убогую нечитабельность для самих носителей английского языка.
какая-то ерунда... Чем слово function вообще поможет читабельности... Читабельность это про стиль программиования, и прежде всего об  пр абстрактное мышление, а не про язык

Оффлайн mbrane

  • *****
  • Сообщений: 15 608
  • Благодарностей: 349
  • Мне нравится этот форум!
    • Сообщения от mbrane
Re: Какой язык программирования учить
« Ответ #50 : 27 Ноя 2025 [11:39:27] »
а потому что Вольфарм, Мэпл и даже Маткад стоят совсем неиллюзорных денег.
Ну жесткость законов компенсируется необязательностью их исполнения .. Так что если зайти на форум.ru-board в раздел варезник вы сильно удивмиесь как можно срезать косты владения...да там не будет новомодных фищек типа онлайн чата с LLM, но 99% функционала остантется 

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #51 : 27 Ноя 2025 [12:02:28] »
Сообщение компилятора выглядят примерно так: Compiler error, undefined RA_x
А сообщения линкера: link error - Unresolved External reference RA_x
Это разные ошибки.
Да с ошибкой линкёра уже разобрались, a для вызова функций R_z(), R_y() и R_x() в APC_Kepler.cpp, которые определены в
#include "APC_VecMat3D.cpp", его и добавил вместе с #include "APC_VecMat3D.h" в те три модули, которые выдавали ошибку неизвестной функции, далее, заменил их синус Sine() на системный sin() из модуля System.hpp (он подклчюется автоматически и не указывается в списке, но из-за этого был конфликт ambiquos). Всё откомпилилось, кроме 3-х проектов Eclipse.cpp, EclTimer и Occult с  ambiquos для Frac - он тоже есть в System.hpp, но что-то работать не хочет, пока выдаёт конфликт. Затмение ещё ругается на функцию Чебышева Cheb(), запушил пока исходники в репу на Gitverse. Надо ещё и работать, а не всё время программировать :)     
« Последнее редактирование: 27 Ноя 2025 [12:28:32] от Павел Васильев »
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #52 : 27 Ноя 2025 [12:21:23] »
#include "APC_VecMat3D.cpp"
Вот так делать не надо - не надо включать cpp файл - будет неоднозначность.
У вас будет что в двух объектных файлах определена одна и та же функция - в APC_VecMat3D.obj и в том файле, в который включили.

Include это не Import  из Питона и не uses из Паскаля - это препроцессор - он просто включает весь текст файла в единицу компиляции.

Там опять ambiquos но для Frac, он тоже есть в System.hpp
А еще в APC_Math.h

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #53 : 27 Ноя 2025 [12:32:53] »
Вот так делать не надо - не надо включать cpp файл - будет неоднозначность.
Я это знаю, но что-то по указанным путям и .h компилер не находит модуль. Обновлённые исходники в репе, так что если точно подскажите как надо всё исправить чтобы работало, то было бы хорошо.
Причём, надо заметить, что в песочнице Apex.cbproj всех проектов, не консольных а уже с главной формой и деревом просмотра, в данный момент билд всех модулей, в т.ч. с Frac() проходит без ошибок, бинарник запускается. 
« Последнее редактирование: 27 Ноя 2025 [12:57:52] от Павел Васильев »
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #54 : 27 Ноя 2025 [13:10:17] »
Я это знаю, но что-то по указанным путям и .h компилер не находит модуль.
В С++ другая терминология - cpp файл там называется единицей компиляции. Именно его принимает на вход компилятор. Но если в нем используется что-то внешнее из другой единицы компиляции, то такое - например функцию - указывают обычно в заголовочниках

Упрощенный пример
Файл func.h

int func ( int a ); //  это только описание функции - параметры с типами и тип возвращаемого значения

Файл func.cpp

#include "func.h"
int func ( int a ) { return a+1; } // это реализация - тут у функции есть тело

А используется это в файле test.cpp

#include "func.h" // подставляем описание включая файл описаний целиком
int func2 ( int a ) { return func ( a )  + 2 ; } // вызов функции.

Так вот, после того как пройдет препроцессор файл test.cpp будет выглядеть так

int func ( int a ); //  это только описание функции - параметры с типами и тип возвращаемого значения
int func2 ( int a ) { return func ( a )  + 2 ; } // вызов функции

Т.е. текст h файла вставится и это будет отдано компилятору который сгенерирует объектный файл test.obj в котором будет
- описание функции func, так как ее тела нет, она будет считаться внешней
- реализация функции  func2 которая вызывает func. Так как  описание-сигнатура для func есть, то функция func2 знает как ее вызвать - т.е. сгенерировать код. Если есть попытка вызова но нет описания - ошибка компиляции.

Теперь это передается линкеру или компоновщику объектных модулей. Если ему на вход дать только test.obj то он не сможет сделать исполняемый файл так как тела функции func в нем нет - есть только ссылка на него. И будет ошибка unresolved
Поэтому линкеру на вход подаются два файла - test.obj и func.obj
Процесс того, какие объектные файлы подаются линкеру контролируется в проекте, а не через include - посредством списка файлов для проекта.
Если func из другого проекта в другом каталоге то чисто настройка include path - это для компиляции - чтобы компилятор нашел файл func.h.
А вот чтобы линкер нашел func.оbj с другого каталога то это уже в lib path. Причем этот func.оbj надо указать в проекте как внешнюю зависимость. Либо сам файл либо библиотеку в которой его можно найти.
Ну либо включить в проект два файла - func.cpp и  test.cpp - т.е. реализации. Тогда компилятор скомпилирует оба, и линкеру при вызове укажут два файла,  линкер при работе увидит, что для функции func есть тело и оно в другом объектном файле - func.оbj - оттуда он его и возьмет.

А вообще имеет смысл всю эту ветвь дискуссии перенести в другую, более подходящую ветку.
« Последнее редактирование: 27 Ноя 2025 [13:25:24] от yacc »

Оффлайн Ph_user

  • *****
  • Сообщений: 2 935
  • Благодарностей: 79
    • Сообщения от Ph_user
Re: Какой язык программирования учить
« Ответ #55 : 27 Ноя 2025 [13:18:03] »
а консольные проекты выдают ошибку [ilink32 error] Error: Unresolved External 'Vec3D::Vec3D()' referenced from ....

Это уже может быть дремучесть времен 20 века. Когда си програмы еще делали в текстовых редакторах. В 21 веке уже можно взять (хотя бы безплатную учебную ?) версию приличной иде и там прямо во время работы програмы происходит рилтайм анализ текста на кучу простых косяков типа проблем видимости вещей в многофайловых проектах и показ где могут быть проблемы. Вот поэтому проф програмеры и пользуют си и плюсатые что там за треть века уже сделали вмеру удобных роботов. А на гитхабе еще и копилота вроде безплатно предлагают. Вот простые помошники уже были встроены в приличные промышленые иде со времен начала 21 века.

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

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

Если кто знает в чём дело дайте знать, может кто-то сталкивался.

Может надо в 2025 положить сорсы на безплатный гитхаб планеты в публичный репозиторий чтобы все могли посмотреть.

рановато для 10 класса...

Ну если к 10 уже прочитали и поняли-заполмнили все тома инструкций команд процесору и мануал оптимизации - могут уже начинать.

#include "APC_VecMat3D.cpp", его и добавил вместе с #include "APC_VecMat3D.h" в те три модули, которые выдавали ошибку неизвестной функции, далее, заменил их синус Sine() на системный sin() из модуля System.hpp

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

Синусы в си в math.h - роботы гугля это тоже знают The sin() function in C is used to calculate the sine of an angle. This function is part of the standard C library and is declared in the <math.h> header file.

Обновлённые исходники в репе,

Полезно ссылки на вещи добавлять.
« Последнее редактирование: 27 Ноя 2025 [13:40:52] от Ph_user »

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #56 : 27 Ноя 2025 [14:10:40] »
А вот чтобы линкер нашел func.оbj с другого каталога то это уже в lib path. Причем этот func.оbj надо указать в проекте как внешнюю зависимость. Либо сам файл либо библиотеку в которой его можно найти.
Это всё так, но я ничего в исходниках не меняю, Манденбрук так всё замутил. Поэтому я всё и положил в одну папку и подправил пути, бинарники вывел в ..\bin. Остался похоже один конфликт с Frac() и то, только в 3х консольных проектах а не в общем проекте с GUI и единым меню Apex.cbproj. Если не комментирую Frac в модуле  то получаю ambiquis, а если комментирую, то [ilink32 Error] Error: Unresolved external '__fastcall System::Frac(const long double)' referenced from D:\ASTROGEOSCENTER\ASTROBLOQ\ADDONS\APEX\CPP\APC_MOON.OBJ. Заколдованный круг. Такое бывает, можно выйти только изменив имя, кстати на frac с маленькой буквы, надо попробовать. 
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн Павел Васильев

  • *****
  • Сообщений: 1 083
  • Благодарностей: 34
  • БПЦ 20х60, HD 75x60
    • Сообщения от Павел Васильев
Re: Какой язык программирования учить
« Ответ #57 : 27 Ноя 2025 [14:14:49] »
 :D
А вообще имеет смысл всю эту ветвь дискуссии перенести в другую, более подходящую ветку.
Как раз это показывает, что надо сразу учить С++, и среды программирования, а не другие языки, кроме Delphi, естественно  :D
Программирование системы AstrobloQ https://gitverse.ru/astrogeoscenter/astrobloq

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #58 : 27 Ноя 2025 [14:40:10] »
Если не комментирую Frac в модуле  то получаю ambiquis, а если комментирую, то [ilink32 Error] Error: Unresolved external '__fastcall System::Frac(const long double)' referenced from D:\ASTROGEOSCENTER\ASTROBLOQ\ADDONS\APEX\CPP\APC_MOON.OBJ. Заколдованный круг. Такое бывает, можно выйти только изменив имя, кстити на frac, надо попробовать.
А вы найдите файл System.hpp - он где-то в компиляторе должен быть - если там есть функция или переменная Frac - то вот и ответ.
Тогда придется в APC_Math ( и в h и в cpp ) переименовывать ее - скажем на Frac1 или что-то еще - ну и во всех остальных файлах - потому что билдер забрал себе это слово.
Причем я не удивлюсь почему - потому что в Паскале есть библиотечная функция Frac, а у билдера библиотеки частично написаны ... на паскале. Разработчик APC не подумал что его код захотят использовать в билдере и назвал свою функцию также - в стандартных библиотеках С такой же нет.

И еще - я не вижу в проекте Eclipse чтобы там был APC_Math.cpp  - только заголовочный.

« Последнее редактирование: 27 Ноя 2025 [15:13:36] от yacc »

Оффлайн yacc

  • **
  • Сообщений: 57
  • Благодарностей: 1
  • Мне нравится этот форум!
    • Сообщения от yacc
Re: Какой язык программирования учить
« Ответ #59 : 27 Ноя 2025 [14:58:02] »
Как раз это показывает, что надо сразу учить С++, и среды программирования, а не другие языки, кроме Delphi, естественно 

Сначала нужно учиться программированию на алгоритмах - проще всего онлайн прямо на гугл колаб в Jypiter Notebook в Питоне - ничего даже ставить не надо.
А уже потом лезть в дебри других языков и тем более сборки модулей.

В 80-е самый простой был бейсик - в школе именно его учил.
В универе нам преподавали фортран. Турбо паскаль я выучил уже сам, но быстро с него слез - нашел книгу по компьютерной графике где алгоритмы были на С - проще было выучить С. Шел он не сразу.
С тупыми ошибками ввиду наследия паскаля или бейсика типа

char *myString; // ну это же типа тип "строка"
strcpy ( myString, " test string "  )

на ДОС - это зависание и перезагрузка компа после выполнения.

И уж позже, еще труднее, я освоил С++. Потому что он на порядок сложнее С, а сейчас - поди и на два порядка.
Уже позже, на старших курсах, почитав Хантер "Проектирование и конструирование компиляторов" мне в целом стало пофиг на чем писать, если понятно что с этим кодом будет делать компилятор - забавно было побаловаться - написать что-то скажем на Modula-2 или Аda или ocaml или Eiffel или fort.

Но сначала - что-то простое! Сейчас это пожалуй Питон. Тогда был бейсик. Фортран после бейсика легко учится.