Форум программистов, компьютерный форум, киберфорум
Проекты
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 1.80/5: Рейтинг темы: голосов - 5, средняя оценка - 1.80
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232

Опенсорс проект на Rust

18.05.2024, 21:02. Показов 35770. Ответов 385
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу написать на Rust свои: язык программирования, базу данных, сервер, возможно и другие модули.

Язык программирования будет интерпретируемым. Фишка языка в том, что в нём не будет зарезервированных слов, а будет только синтаксис из спецсимволов, все переменные и объекты это слова которые можно писать на кириллице\латинице. При инициализации можно подключать разные модули в зависимости от потребности, так же можно будет написать свои модули для языка на Rust и подключать их при необходимости.

План действий. Сначала создадим библиотеки для работы с диском, строками, сетью и др. при необходимости. Далее ядро самого языка. Затем тестирование и доработка. Как самое основное будет готово сделаем релиз, сайт проекта с документацией.

Кому интересно поучаствовать в разработке?

Git: https://github.com/arbnet/adiutor
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2024, 21:02
Ответы с готовыми решениями:

Rust - Visual Studio Code - Explorer - RUST TUTORIAL где?
здравствуйте, при создании проекта использовал Visual Studio Code слева в вертикальной панели 1-й элемент сверху Explorer как добиться,...

[Rust] Как привязывать WinAPI-функции к коду на Rust?
Может кто-нить дать код, КАК привязывать вин апишные функции к растовскому коду (на примере MesageBox). ...

[Rust] Обсуждение возможностей и предстоящей роли языка Rust
Psilon, чем он тебя так привлек? И почему именно "убийца плюсов"? Если напишешь развернутый ответ, обещаю вынести в отдельную тему и...

385
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 08:50  [ТС]
Студворк — интернет-сервис помощи студентам
Блин опять не удержался
Цитата Сообщение от voral Посмотреть сообщение
Не поленился для затравки нашел на ютубе видео
Ржу не могу Вы реально так бы стали делать? Это прошлый век, для очень простого синтаксиса ещё сгодится и то куча лишних телодвижений, кроме того так очень плохо обрабатывать вложенные конструкции. Всё делается намного быстрее и проще. А в этот раз я вообще хочу отказаться от регулярных выражений и сделать своё решение, что будет более гибче.
Цитата Сообщение от voral Посмотреть сообщение
Да ладно уж не криви душой: без меня твои темы быстрее загибаться будут
Я был бы только рад этому реально, пусть тут будет тишина, может найдутся те кто будет конструктивно обсуждать, предлагая свои(не нагугленные) решения и ни писать всякий бред..
Цитата Сообщение от voral Посмотреть сообщение
Не надо лгать. Я предложил решить за деньги эту задачу. Оформляем договор и я ее делаю по твоему ТЗ. (в т.ч. один из критериев может быть и "не использовать сторонние библиотеки").
За деньги Карл
Ты тут без денег то ничего путного не можешь решить, предложить хоть маломальски интересный подход, опять же не нагугленный, а рождённый в твоём мозгу(хотя там наверно вакуум..) Такие как ты это вроде коучей инфоцыган, рекламируют себя каке они крутые и просят деньги, кто-то ведётся и по итогу ожидания не оправдываются..
Цитата Сообщение от voral Посмотреть сообщение
Зачем мне помогать делать человеку, который считает, что он сам все может, делать задачу, которую понятно как делать, объемно, и при этом у меня есть действительно интересные задачи, в т.ч. по проекту у которого нет аналогов?
Затем, что ты тогда сам захотел со мной посотрудничать и совместно создать блог на моём фреймворке. Я тебе дал код который разрабатывал в течение нескольких лет, а ты плюнул на сотрудничество предложив сделать за деньги.
Цитата Сообщение от Катафалк Посмотреть сообщение
По фреймворку видно
А что по нему видно? Что я над ним работаю, да есть вопросы по работе с базой, я это дорабатываю один, без мега гуру тутошних, которые за деньги хотят, но я сильно сомневаюсь, что они способны это сделать.

К примеру у меня сейчас есть затруднения как на Rust сделать библиотеки .dll(для windows) и .so(для linux) с передачей данных, обменом сообщений, но я этот вопрос решу не сомневайтесь, а вот сможете ли вы это решить, это вряд-ли.
Цитата Сообщение от Катафалк Посмотреть сообщение
ты не умеешь доводить проекты до конца
То что я не забросил разработку своего фреймворка это наоборот говорит о том что я довожу свои проекты до конца. Даже те проекты которые у меня в стадии недоделок из-за багов в сторонних библиотеках и др. проблем я их вот хочу реанимировать и переписать на другом языке. Надеюсь Rust в этот раз меня не подведёт.
Цитата Сообщение от voral Посмотреть сообщение
В один из первых своих заходов он показал код своего фреймворка. Я ему указал что веб фреймворк жостко прибитый к виндус - такое себе.
Ну во-первых перенастроить PHP код на другую операционку никаких проблем не вызывает, дело нескольких минут. То что я тогда писал да и сейчас в основном пишу пока под windows это ни о чём не говорит, на linux я тоже работаю, но редко. Во-вторых тогда для кросплатформенности я использовал переменные конфигурации PHP. В третьих DIRECTORY_SEPARATOR использовал в функциях для загрузки файлов в том числе и файлов классов тогда ещё у меня не было автозагрузчика классов, по-моему не вышла ещё 8 версия PHP. Потом я всё переделал.
Сколько лет прошло, а вы всё вспоминаете это и восхваляете себя, какой умный. Карл, да вы великолепны
Цитата Сообщение от Celavesterys Посмотреть сообщение
Я все понял. Спасибо Вам ))
Действительно
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 09:26
Цитата Сообщение от pgb Посмотреть сообщение
Даже те проекты которые у меня в стадии недоделок из-за багов в сторонних библиотеках
Ты зарепортил эти баги в репозиториях этих сторонних библиотек? Кинь ссылки.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
30.05.2024, 09:37
Цитата Сообщение от pgb Посмотреть сообщение
Это прошлый век, для очень простого синтаксиса ещё сгодится и то куча лишних телодвижений, кроме того так очень плохо обрабатывать вложенные конструкции
Оставьте довод "это прошлый век" домохозяйкам. Поясните технически. Как раз таки со вложенностью здесь все отлично. Что за проблема со вложенностью?

Цитата Сообщение от pgb Посмотреть сообщение
Затем, что ты тогда сам захотел со мной посотрудничать и совместно создать блог на моём фреймворке. Я тебе дал код который разрабатывал в течение нескольких лет, а ты плюнул на сотрудничество предложив сделать за деньги.
И опять вранье. Я сходу сказал, что я хочу протестировать фреймворк. Вести совместную разработку с тобой? Для этого придется забивать на опыт реальных проектов. Вкладывать время в написание велосипеда, который гарантировано будет тормознее. При этом этот велосипед будет выполнять только 1% от функционала любого прочего... По этому да: доработки за деньги. Протестировать - бесплатно. К тому же, повторюсь, ты даже помощи просить не умеешь. Ты именно начала с того "я конечно могу, ну ка ты покажи или слабо"... Да нахрен мне кому то что то доказывать?


Цитата Сообщение от pgb Посмотреть сообщение
Ну во-первых перенастроить PHP код на другую операционку никаких проблем не вызывает, дело нескольких минут
Во первых имеющий реальный опыт сделает так изначально, что не надо ни чего "перенастраивать" это вообще не проблема.
Цитата Сообщение от pgb Посмотреть сообщение
файлов в том числе и файлов классов тогда ещё у меня не было автозагрузчика классов, по-моему не вышла ещё 8 версия PHP
Это тут не причем. Вообще. Точно так же было с момента как появились неймспейсы в PHP c 5.3 и DIRECTORY_SEPARATOR в php с версии 5.4.

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

Цитата Сообщение от pgb Посмотреть сообщение
Ты тут без денег то ничего путного не можешь решить,
Ну ты же понимаешь, что договор это ответсвенность. Если ты боишься, что я не осилю описываешь необходимые критерии и если я не создаю решение за определенный срок и по удвлетворяющий определенным критериям - я плачу неустойку (это тоже в договоре можно описать).... т.е. какие тут проблемы то?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 09:41  [ТС]
Цитата Сообщение от Celavesterys Посмотреть сообщение
Ты зарепортил эти баги в репозиториях этих сторонних библиотек? Кинь ссылки.
Ничего не репортил. Давно писал на Lazarus свои реализации своего языка, базы, сервера, работало, но из-за какого-то бага в этих библиотеках(blcksock, winsock) сервер иногда падал, то есть не срабатывала обработка запросов. Искал проблему и выяснилось, что это из-за winsock, где-то читал об этой проблеме, уже не помню где.
Кликните здесь для просмотра всего текста
Pascal
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
library connector;
 
{$mode objfpc}{$H+}
 
uses
  Classes, SysUtils, blcksock, winsock, dynlibs, IniFiles;
 
type // тип сервера
  TServer=class(TThread)
  private
    MyIP: String;         // IP компьютера
    Port: String;         // порт сервера
    Tout: Integer;        // таймоут
    Sock: TTCPBlockSocket;// сокет сервера
  public
    procedure Execute; override;            // прослушивание сервером
    constructor Create(ip: String='0.0.0.0';// IP сервера   > конструктор
                       pt: String='80';     // порт сервера > создания
                       tt: Integer=1000);   // таймоут      > сервера
    destructor Destroy; override;           // уничтожение сервера
end;
type // тип обработчика запроса
  Vestibulum=class(TThread)
  private
    Sock: TTCPBlockSocket;              // сокет обработки запроса
  public
    ReAn: TStringList;
    constructor Create(MSock: TSocket); // создание обработчика запроса
    procedure Execute; override;        // обработка запроса
    procedure Publisher;                // публикатор сайта
    procedure Transfer(act,wfl: String);// передача файла
    function Authorization(ses: String): Boolean;// авторизация
    destructor Destroy; override;       // уничтожение обработчика запроса
end;
type // тип функции вызова обработки модулем
  TModProcessus=procedure(var ReAn: TStringList); stdcall;
const
  TITL='CONNECTOR';
  //CRLF=#13+#10;    // перевод строки
var
  test: String;
  ExfC: String;         // расширение файлов скриптов
  Name: String;         // имя сервера
  Ling: Integer;        // задержка
  Basic: String;        // основной сайт
  Scripts: String;      // директория скриптов
  Server: TServer;      // поток сервера
  Sessions: String;     // директория сессий
  Modules: TStringList; // модули
  Settings: TStringList;// настройки
//*******************************************************************
// загрузка настроек
procedure SettingsLoad;
var
  Ifl: TIniFile;
  ns,nv: Integer;
  lsc,lvl: TStringList;
begin
  if Settings.Count>0 then Settings.Clear;
  Ifl:=TIniFile.Create(GetCurrentDir+'\settings.ini');
  lsc:=TStringList.Create;lvl:=TStringList.Create;
  Ifl.ReadSections(lsc);
  for ns:=0 to lsc.Count-1 do begin
    Ifl.ReadSectionValues(lsc.Strings[ns],lvl);
    for nv:=0 to lvl.Count-1 do begin
      if lvl.Strings[nv][1]<>'#' then
        Settings.Add(lsc.Strings[ns]+'_'+lvl.Strings[nv]);
    end;
  end;
  lvl.Destroy;lsc.Destroy;
  Ifl.Destroy;
end;
// установка настроек
procedure SetSettings(key,val: String); stdcall;
var
  nx: Integer;
begin
  nx:=Settings.IndexOfName(key);
  if nx<>-1 then
    Settings.ValueFromIndex[nx]:=val
  else
    Settings.Add(key+'='+val);
end;
// получение настроек
function GetSettings(mdl,key: String): String; stdcall;
var
  nx: Integer;
begin
  nx:=Settings.IndexOfName(mdl+'_'+key);
  if nx<>-1 then
     Result:=Settings.ValueFromIndex[nx]
  else
     Result:='';
end;
// получение хендла модуля
function GetMhndl(mdl: String): TLibHandle; stdcall;
var
  nx: Integer;
begin
  if Modules<>nil then begin
    nx:=Modules.IndexOf(mdl);
    if nx<>-1 then Result:=TLibHandle(Modules.Objects[nx])
    else Result:=0;
  end else Result:=0;
end;
// локальный IP
function GetLocalIP: String;
var
  WSAData: TWSAData;
  HostEnt: PHostEnt;
  Buf: array [0..63] of Char;
begin
  Result:='';WSAData.wHighVersion:=65535;
  if WSAStartup(WINSOCK_VERSION,WSAData)=0 then begin
    if GetHostName(@Buf,SizeOf(Buf))=0 then begin
      HostEnt:=GetHostByName(@Buf);
      if HostEnt<>nil then Result:=inet_ntoa(PInAddr(HostEnt^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;
// запись лога
procedure RecLog(msg: String; pfx: String=''); stdcall;
var
  wfl: String;
  Flog: TextFile;
begin
  wfl:=GetSettings(TITL,'LogDir');
  if DirectoryExists(wfl) then begin
    if wfl[Length(wfl)]<>'\' then wfl:=wfl+'\';
    wfl:=wfl+pfx+'_'+FormatDateTime('ddmmyy',Now)+'.log';
    AssignFile(Flog,wfl);
    if FileExists(wfl) then Append(Flog) else ReWrite(Flog);
    WriteLn(Flog,FormatDateTime('hh:nn:ss',Now)+' '+msg);
    CloseFile(Flog);
  end;
end;
// загрузка модуля
function LoadMod(mdl: String): Boolean;
var
  nm: Integer;
  Hndl: TLibHandle;
begin
  Result:=true;
  if Modules=nil then begin
    Modules:=TStringList.Create;
    nm:=-1;
  end else nm:=Modules.IndexOf(mdl);
  if nm=-1 then begin
    Hndl:=LoadLibrary(PChar(mdl+'.dll'));
    if Hndl<>0 then begin
      Modules.AddObject(mdl,TObject(Hndl));
    end else Result:=false;
  end;
end;
// выгрузка модуля
function KillMod(mdl: String): Boolean;
var
  nm: Integer;
  Hndl: TLibHandle;
begin
  Result:=true;
  if Modules<>nil then begin
    nm:=Modules.IndexOf(mdl);
    if nm<>-1 then begin
      Hndl:=TLibHandle(Settings.Objects[nm]);
       if FreeLibrary(Hndl) then begin
         Settings.Delete(nm);
         if Modules.Count=0 then
           Modules.Free;
       end else Result:=false;
    end
  end;
end;
// запуск модуля
procedure ModuleRun(mdl: String; var ReAn: TStringList); stdcall;
var
  Hndl: TLibHandle;
  Processus: TModProcessus;
begin
  Hndl:=GetMhndl(mdl);
  if Hndl<>0 then begin
    Processus:=TModProcessus(GetProcAddress(Hndl,'Processus'));
    if Processus<>nil then Processus(ReAn)
    else begin
      ReAn.Clear;ReAn.Add(Name+' ['+TITL+'] > no processus '+mdl);
    end;
  end else begin
    ReAn.Clear;ReAn.Add(Name+' ['+TITL+'] > no module '+mdl);
  end;
end;
// перезапуск
procedure ReStart(fs: Boolean=true); stdcall;
var
  nx: Integer;
  ip,pt: String;
  lmd: TStringList;
begin
  if Server<>nil then
    Server.Terminate;
  SettingsLoad;
  lmd:=TStringList.Create;lmd.Delimiter:=',';
  lmd.CommaText:=UpperCase(GetSettings(TITL,'Modules'));
  for nx:=0 to lmd.Count-1 do
    if KillMod(lmd.Strings[nx]) and fs then LoadMod(lmd.Strings[nx]);
  lmd.Free;
  Sessions:=GetSettings('CONNECTOR','Sessions');
  if Sessions<>'' then
    if Sessions[Length(Sessions)]<>'\' then Sessions:=Sessions+'\';
  Scripts:=GetSettings('CEREBRUM','Scripts');
  if Scripts[Length(Scripts)]<>'\' then Scripts+='\';
  Ling:=StrToIntDef(GetSettings(TITL,'Ling'),100000);
  ExfC:=GetSettings('CEREBRUM','Extension');
  Basic:=GetSettings('CEREBRUM','Basic');
  Name:=GetSettings(TITL,'Alias');
  ip:=GetSettings(TITL,'MyIP');
  if ip='' then begin
    ip:=GetLocalIP;
    SetSettings(TITL+'_MyIP',ip);
  end;
  pt:=GetSettings(TITL,'Port');
  nx:=StrToIntDef(GetSettings(TITL,'Tout'),5000);
  if fs then Server:=TServer.Create(ip,pt,nx);
end;
// ****************************** Сервер *****************************
// создание сервера
constructor TServer.Create(ip: String='0.0.0.0';
                          pt: String='80';
                          tt: Integer=1000);
begin
  inherited Create(False);
  MyIP:=ip;Port:=pt;Tout:=tt;
  Sock:=TTCPBlockSocket.Create;
  FreeOnTerminate:=true;
  Priority:=tpHighest;
end;
// прослушивание сервером
procedure TServer.Execute;
begin
  with Sock do begin
    CreateSocket;
    SocksResolver:=False;  Sock.
    SetLinger(true,Ling);
    Bind(MyIP,Port);Listen;
    repeat
      if CanRead(Tout) then
        if LastError=0 then
          Vestibulum.Create(Accept);
    until Terminated;
  end;
end;
// уничтожение сервера
destructor TServer.Destroy;
begin
  Sock.Free;
  inherited Destroy;
end;
//************************** Обработка запроса *********************
// создание обработчика запроса
Constructor Vestibulum.Create(MSock: TSocket);
begin
  inherited Create(False);
  FreeOnTerminate:=True;
  Priority:=tpHigher;
  Sock:=TTCPBlockSocket.Create;
  ReAn:=TStringList.Create;
  Sock.Socket:=MSock; //Sock.GetRemoteSinIP  Round((now-25569)*86400);
end;
// обработка запроса
procedure Vestibulum.Execute;
var
  mdl,ses: String;
begin
  ReAn.Text:=Sock.RecvPacket(10);
  mdl:=ReAn.Strings[0];
  if Pos('HTTP/',mdl)<>0 then Publisher // публикация сайта
  else begin
    ReAn.Delete(0);
    ses:=ReAn.Strings[0];
    if Authorization(ses) then
      ModuleRun(mdl,ReAn);              // обработка модулем
    Sock.SendString(ReAn.Text);         // отправка ответа
  end;
end;
// авторизация пользователя
function Vestibulum.Authorization(ses: String): Boolean;
var
  nx: Integer;
  lgn,psw: String;
  ldat: TStringList;
begin
  Result:=false;
  nx:=Pos('#',ses);
  if nx<>0 then begin
    lgn:=Copy(ses,1,nx-1);
    psw:=Copy(ses,nx+1,Length(ses)-nx);
    //ldat:=TStringList.Create;
    //ldat.Add();
    //ModuleRun('CUSTODEM',ldat);
    ReAn.Clear;ReAn.Add('session=bnbgfbu');
  end else if not FileExists(Sessions+ses) then begin
    ReAn.Clear;ReAn.Add('answer=no access');
  end else Result:=true;
end;
// публикация сайта
procedure Vestibulum.Publisher;
var
  np: integer;
  tst: String;
  lpar: TStringList;
begin
  lpar:=TStringList.Create;
  lpar.Delimiter:=' ';
  lpar.DelimitedText:=ReAn.Strings[0];
  ReAn.Text:=StringReplace(ReAn.Text,': ','=',[rfReplaceAll]);
  ReAn.Strings[0]:='Method='+lpar.Strings[0];
  ReAn.Insert(1,'HTTPv='+lpar.Strings[2]);
  tst:=lpar.Strings[1];
  lpar.Delimiter:='/';
  np:=Pos('?',tst);
  if np<>0 then begin
    lpar.DelimitedText:=Copy(tst,1,np-1);
    tst:=Copy(tst,np+1,Length(tst)-np);
    np:=ReAn.Count-1;
    if ReAn.Strings[np]='' then ReAn.Add(tst)
    else ReAn.Strings[np]:=tst+'&'+ReAn.Strings[np];//URLDecode(
  end else lpar.DelimitedText:=tst;
  lpar.Delimiter:='\';
  if lpar.Strings[1]='' then lpar.Strings[1]:=Basic
  else if Pos('.',lpar.Strings[1])<>0 then lpar.Insert(1,Basic);
  if lpar.Count<3 then lpar.Add('main'+ExfC);
  ReAn.Insert(3,'Script='+lpar.Strings[1]);
  lpar.Delete(1);
  tst:=ExtractFileExt(lpar.DelimitedText);
  if tst='' then begin
    tst:=ExfC;lpar.DelimitedText:=lpar.DelimitedText+tst;
  end;
  ReAn.Insert(4,'File='+lpar.DelimitedText);
  ReAn.Insert(5,'Extension='+tst);
  lpar.Clear;lpar.Add(ReAn.Values['HTTPv']);
  if tst<>Exfc then begin
    lpar.Add(Scripts+ReAn.Values['Script']+ReAn.Values['File']);
    ReAn.Clear;test:=lpar.Strings[1];
    if FileExists(lpar.Strings[1]) then begin
      ReAn.Add(lpar.Strings[0]+' 200 OK');
      case tst of
        'css': tst:='text/css';
        'js':  tst:='text/javascript';
        else   tst:='image/'+tst;
      end;
      ReAn.Add('Content-type: '+tst);
      tst:='PUT';
    end else begin
      ReAn.Add(lpar.Strings[0]+' 204 No Content');
      tst:='';
    end;
    ReAn.Add('');
  end else begin
    ModuleRun('CEREBRUM',ReAn);
    if ReAn.Count=0 then begin
      ReAn.Add(lpar.Strings[0]+' 206 Partial Content');
      ReAn.Add('');
      ReAn.Add(Name+' ['+TITL+'] > CEREBRUM no content');
      tst:='';
    end else begin
      if ReAn.Strings[0]='Transfer' then begin
        ReAn.Delete(0);
        tst:=ReAn.Strings[0];
        ReAn.Delete(0);
        lpar.Add(ReAn.Strings[0]);
        ReAn.Delete(0);
      end else tst:='';
    end;
  end;
  ReAn.Insert(1,'Server: '+Name);
  Sock.SendString(ReAn.Text);
  if tst<>'' then Transfer(tst,lpar.Strings[1]);
  lpar.Free;
end;
// передача файла
procedure Vestibulum.Transfer(act,wfl: String);
var
  StFl: TFileStream; // поток файла
begin
  case act of
    'GET': begin // получаем
             StFl:=TFileStream.Create(wfl,fmCreate);
             Sock.RecvStreamRaw(StFl,Ling);
             StFl.Free;
           end;
    'PUT': begin // передаём
             StFl:=TFileStream.Create(wfl,fmOpenRead or fmShareDenyNone);
             StFl.Seek(0,soFromBeginning);
             Sock.SendStreamRaw(StFl);
             StFl.Free;
           end;
  end;
end;
// уничтожение потока обработки запроса
destructor Vestibulum.Destroy;
begin
  ReAn.Free;Sock.Free;
  inherited Destroy;
end;
 
exports SetSettings,GetSettings,GetMhndl,ModuleRun,RecLog,ReStart;
 
begin
  Settings:=TStringList.Create;
  ReStart;
end.
0
3061 / 1463 / 265
Регистрация: 16.03.2008
Сообщений: 6,510
Записей в блоге: 2
30.05.2024, 09:43
Цитата Сообщение от Celavesterys Посмотреть сообщение
Ты зарепортил эти баги в репозиториях этих сторонних библиотек? Кинь ссылки.
Для ТС это слишком сложный вопрос. Я бы для начала спросил: "Можешь привести хоть один пример бага?"... мне он на подобные вопросы так ни разу и не ответил

Добавлено через 1 минуту
о, смотри ка. все же хоть что то выдал
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 09:52
Цитата Сообщение от pgb Посмотреть сообщение
Искал проблему и выяснилось, что это из-за winsock
Я правильно понимаю, что с использованием winsock из-за этого бага невозможно было написать сервер, который не падает? А через что работали все сервера на винде на тот момент?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 10:39  [ТС]
Цитата Сообщение от Celavesterys Посмотреть сообщение
Я правильно понимаю, что с использованием winsock из-за этого бага невозможно было написать сервер, который не падает? А через что работали все сервера на винде на тот момент?
Слушайте более 10 лет прошло с того времени, я уже и не помню точно что и как. Покопался немного в архивах, нашёл ещё более раннюю реализацию, скорее всего это проблема была не в winsock, а в lNet после обнаружения этой проблемы я переписал наверно на winsock
Кликните здесь для просмотра всего текста
Python
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
library bucinator; // Модуль Распространитель Данных
 
{$mode objfpc}{$H+}
 
uses
  Classes, CustApp, SysUtils, StrUtils, dynlibs, lNet;
 
type // тип передачи адреса
  TbInt64=packed record
  case byte of
    0:(I: Int64);
    1:(b1,b2,b3,b4,b5,b6,b7,b8: Byte);
end;
type // флаг состояния
  TFlag=(_nil,_get,_put);
type // тип подключения клиента
  TClient=record
  Flag: TFlag;               // флаг состояния
  Tlcn: LongWord;            // время запроса
  Dses: TStringList;         // данные сессии
  DtFl: TFileStream;         // поток файла
  Addr: array[1..4] of Byte; // IP адрес клиента
end;
type // тип запроса
  TRequest=record
  Inqr: TStringList;         // запрос
  aSocket: TLSocket;         // сокет
end;
type // тип процедуры вызова обработки данных модулем
  TDllCuratio=procedure(udt: Pointer); stdcall;
type // тип потока получения файла
  TFlowGf=class(TThread)
  private
    aSocket: TLSocket;
  protected
    procedure Execute; override;
  public
    constructor Create(aSoc: TLSocket);
    destructor Destroy; override;
end;
{
  type // Поток передачи файла
    TFlowPf=class(TThread)
      private
        destructor Destroy; override;
      protected
        procedure Execute; override;
      public
        aSocket: TLSocket;
        Client,Connection: Word;
        constructor Create(cSuspended: Boolean);
  end;
}
type // Поток выполнения запроса
  TFlowEX=class(TThread)
    private
      Client: ^TClient;
    protected
      procedure Execute; override;
    public
      Request: TRequest;
      constructor Create(inq: String; aSoc: TLSocket);
      destructor Destroy; override;
end;
type // тип Распространителя
  TBucinator=class(TCustomApplication)
    private
      FlowGf: TFlowGf;
      FlowEX: TFlowEX;
    protected
      function  SeCl(aSocket: TLSocket): Word;
      procedure SetAddrIP(adr: String; nu: Word);
      procedure AcServer(aSocket: TLSocket);
      procedure CnServer(aSocket: TLSocket);
      procedure CsServer(aSocket: TLSocket);
      procedure ReServer(aSocket: TLSocket);
      procedure DsServer(aSocket: TLSocket);
      procedure ErServer(const msg: String; aSocket: TLSocket);
    public
      constructor Create;
      destructor  Destroy; override;
end;
 
//procedure INIload(way,sec: String; var res: TStringList); stdcall; external 'auxiliaris';
procedure RecLog(sub: String; pfx: String=''); stdcall; external 'auxiliaris';
function SettingsRead(mdl,key: String): String; stdcall; external 'auxiliaris';
function GetMhndl(mdl: String): TLibHandle; stdcall; external 'auxiliaris';
function FileMD5(way: String): String; stdcall; external 'auxiliaris';
 
const // константы
  TITL='BUCINATOR';
var // переменные
  Flows: Byte;
  Server: TLTCP;
  Duration: Word;            // время сессии
  Clients: Array of TClient;
  // ********************************** вспомогательные функции и процедуры
// получение адреса, порта клиента
function GetAddrIP(nc: Word): String;
begin
  Result:=IntToStr(Clients[nc].Addr[1]);
  Result:=Result+'.'+IntToStr(Clients[nc].Addr[2]);
  Result:=Result+'.'+IntToStr(Clients[nc].Addr[3]);
  Result:=Result+'.'+IntToStr(Clients[nc].Addr[4]);
end;
// получение поинтера Clients
function Gpnt(): Pointer; stdcall;
var
  nx: Word;
begin
  for nx:=0 to Server.Count-1 do
    writeln(Server.Socks[nx].LocalAddress,'\/',Server.Socks[nx].PeerAddress,'\/',Server.Socks[nx].PeerPort);
  writeln;
  for nx:=0 to Length(Clients)-1 do
    writeln(GetAddrIP(nx));
  Result:=@Clients
end;
// присвоение адреса, порта клиента
procedure TBucinator.SetAddrIP(adr: String; nu: Word);
var
  pb,pe: Integer;
begin
  pb:=1;pe:=Pos('.',adr);
  Clients[nu].Addr[1]:=StrToInt(Copy(adr,pb,pe-pb));
  pb:=pe+1;pe:=PosEx('.',adr,pb);
  Clients[nu].Addr[2]:=StrToInt(Copy(adr,pb,pe-pb));
  pb:=pe+1;pe:=PosEx('.',adr,pb);
  Clients[nu].Addr[3]:=StrToInt(Copy(adr,pb,pe-pb));
  pb:=pe+1;pe:=Length(adr)+1;
  Clients[nu].Addr[4]:=StrToInt(Copy(adr,pb,pe-pb));
end;
// FlowFG ****************************************************** получение файла
// создание потока получения файла
constructor TFlowGf.Create(aSoc: TLSocket);
begin
  inherited Create(False);
  FreeOnTerminate:=True;
  aSocket:=aSoc;
  Client:=aSocket.UserData;
  Inc(Flows);
end;
// обработка получения файла
procedure TFlowGf.Execute;
var
  len: Word;
  pos: TbInt64;
  name: String;
  buf: Array[1..65536] Of Byte;
begin
  len:=aSocket.Get(buf,65528);
  if len>0 then begin
    Dec(len);pos.b8:=buf[len];
    Dec(len);pos.b7:=buf[len];
    Dec(len);pos.b6:=buf[len];
    Dec(len);pos.b5:=buf[len];
    Dec(len);pos.b4:=buf[len];
    Dec(len);pos.b3:=buf[len];
    Dec(len);pos.b2:=buf[len];
    Dec(len);pos.b1:=buf[len];
    Client^.DtFl.Seek(pos.I,soFromBeginning);
    Client^.DtFl.WriteBuffer(buf,len);
    if Client^.DtFl.Size=Client^.DtFl.Position then begin
      name:=Client^.DtFl.FileName;
      Client^.DtFl.Destroy;
      if FileMD5(name)<>Client^.Dses.Values['fHash'] then begin
        DeleteFile(name);
        aSocket.SendMessage('disparity'); // несоответствие
      end else begin
        Client^.Dses.Delete(Client^.Dses.IndexOfName('fHash'));
        aSocket.SendMessage('recd='+ExtractFileName(name));// принято
      end;
      Client^.Flag:=_nil;
    end else
      aSocket.SendMessage(IntToStr(Client^.DtFl.Position));
  end;
end;
// закрытие потока получения файла
destructor TFlowGf.Destroy;
begin
  Dec(Flows);
end;
{
// FlowFP ******************************************************* передача файла
// создание потока передачи файла
constructor TFlowPf.Create(cSuspended: Boolean);
begin
  inherited Create(cSuspended);
  FreeOnTerminate:=True;
  Inc(Flows);
end;
// обработка передачи файла
procedure TFlowPf.Execute;
var
  PackPos: TbInt64;
  cnt,size: Integer;
  buf: Array[0..2055] Of Byte;
begin
  with Clients[Client].Conn[Connection] do begin
       if Flag=_out then begin
         PackPos.I:=Data.Position;
         size:=Data.Read(buf,2048);
         if size>0 then begin
           buf[size]:=PackPos.b1;Inc(size);
           buf[size]:=PackPos.b2;Inc(size);
           buf[size]:=PackPos.b3;Inc(size);
           buf[size]:=PackPos.b4;Inc(size);
           buf[size]:=PackPos.b5;Inc(size);
           buf[size]:=PackPos.b6;Inc(size);
           buf[size]:=PackPos.b7;Inc(size);
           buf[size]:=PackPos.b8;Inc(size);
           cnt:=aSocket.Send(buf,size);
           if size<>cnt then
              Data.Seek(cnt-size,soFromCurrent);
           if Size=Data.Position then begin
             Data.Destroy;
             Flag:=_nil;
             Name:='';
             Hash:='';
             Size:=0;
             Fpos:=0;
           end;
         end;
       end;
  end;
end;
// закрытие потока передачи файла
destructor TFlowPf.Destroy;
begin
  Dec(Flows);
end;
}
// FlowEX *************************************************** выполнение запроса
// создание потока выполнения запроса
constructor TFlowEX.Create(inq: String; aSoc: TLSocket);
begin
  inherited Create(False);
  FreeOnTerminate:=True;
  Request.Inqr:=TStringList.Create;
  Request.Inqr.Text:=inq;
  Request.aSocket:=aSoc;
 
  Inc(Flows);
end;
// обработка выполнения запроса
procedure TFlowEX.Execute;
var
  mdl: String;
  Hndl: TLibHandle;
  CURATIO: TDllCuratio;
begin
  mdl:=Request.Inqr.Text;
  if Pos('User-Agent: ',mdl)<>0 then
    mdl:='PUBLISHER'
  else
    mdl:='CUSTODEM';
  Hndl:=GetMhndl('Hndl_'+mdl);
  if Hndl<>0 then begin
    CURATIO:=TDllCuratio(GetProcAddress(Hndl,'Curatio'));
    if CURATIO<>nil then CURATIO(@Request);
  end else begin
    Request.aSocket.SendMessage('ARBITRIUM '+TITL+' > '+mdl+' is not included');
    Request.aSocket.Disconnect();
  end;
end;
// закрытие потока выполнения запроса
destructor TFlowEX.Destroy;
begin
  Request.Inqr.Destroy;
  Dec(Flows);
end;
// Bucinator ***************************************************** СЕРВЕР
// Сервер - подключение клиента
procedure TBucinator.AcServer(aSocket: TLSocket);
var
  nc: Word; // номер подключения клиента
begin
  nc:=SeCl(aSocket);
  if nc=65535 then begin
    nc:=Length(Clients);
    SetLength(Clients,nc+1);
    Clients[nc].Flag:=_nil;
    Clients[nc].Dses:=TStringList.Create;
    Clients[nc].Dses.Delimiter:='|';
    SetAddrIP(aSocket.PeerAddress,nc);
    RecLog('Клиент '+aSocket.PeerAddress+' подключился',TITL);
  end;
  Clients[nc].Tlcn:=Round((Now-25569)*86400);
  aSocket.UserData:=@Clients[nc];
end;
// Сервер - подключение
procedure TBucinator.CnServer(aSocket: TLSocket);
begin
  RecLog('Сервер подключился к '+aSocket.PeerAddress+':'+IntToStr(aSocket.PeerPort),TITL);
end;
procedure TBucinator.CsServer(aSocket: TLSocket);
var
  txt: String;
begin
  if aSocket.GetMessage(txt)>0 then
    writeln(txt)
  else
    writeln('NNNNNooooo');
  //if ServerFile.Flag=_out then PutFile(aSocket,ServerFile);
end;
// поиск данных клиента
function TBucinator.SeCl(aSocket: TLSocket): Word;
var
  ln,nx: Word;
begin
  Result:=65535;
  ln:=Length(Clients);
  if ln>0 then
    for nx:=0 to ln-1 do
      if GetAddrIP(nx)=aSocket.PeerAddress then begin
        Result:=nx;Break;
      end;
end;
// Сервер - получение запроса
procedure TBucinator.ReServer(aSocket: TLSocket);
var
  inq: String;
  Client: ^TClient;
begin
  Client:=aSocket.UserData;
  case Client^.Flag of
      _get: FlowGf:=TFlowGf.Create(aSocket);
      _put: writeln('_put');
      else  begin
              if aSocket.GetMessage(inq)>0 then
                FlowEX:=TFlowEX.Create(inq,aSocket);
            end;
    end;
  Client^.Tlcn:=Round((Now-25569)*86400);
end;
// Сервер - отключение клиента
procedure TBucinator.DsServer(aSocket: TLSocket);
var
  nc,ns,ln: Word;
begin
  {
  SClCon(nc,ns,aSocket);
  if nc<65535 then begin
    ln:=Length(Sockets)-1;
    if ns<ln then Sockets[ns]:=Sockets[ln];
    SetLength(Sockets,ln);
  end;
  }
end;
// Сервер - ошибка
procedure TBucinator.ErServer(const msg: string; aSocket: TLSocket);
begin
  RecLog('Ошибка '+aSocket.PeerAddress+':'+IntToStr(aSocket.PeerPort)+' > '+Utf8ToAnsi(msg),TITL);
end;
 
// создание потока
constructor TBucinator.Create;
var
  prt: Word=0;
begin
  Server:=TLTCP.Create(nil);
  Server.OnAccept:=@AcServer;
  Server.OnConnect:=@CnServer;
  Server.OnCanSend:=@CsServer;
  Server.OnError:=@ErServer;
  Server.OnDisconnect:=@DsServer;
  Server.OnReceive:=@ReServer;
  Server.ReuseAddress:=True;
  Server.Timeout:=0;
  prt:=StrToIntDef(SettingsRead(TITL,'Port'),5000);
  if Server.Listen(prt) then begin
    Writeln('Прослушивание порта: ',prt);
    RecLog('Сервер запущен [порт:'+IntToStr(prt)+']',TITL);
  end else
    RecLog('Сервер не запустился [порт:'+IntToStr(prt)+']',TITL);
end;
// закрытие потока
destructor TBucinator.Destroy;
begin
  inherited Destroy;
  Server.Destroy;
  RecLog('Сервер остановлен',TITL);
end;
 
// прослушивание сервера
procedure MainProc; stdcall;
var
  nc,ln: Word;
  tnow: LongWord;
  aSocket: ^TLSocket;
begin
 
  if Server.Active then Server.CallAction;
  {
  tnow:=Round((Now-25569)*86400);
  ln:=Server.Count;
  if ln>1 then begin
 
    nc:=0;
    while nc<ln do begin
      if tnow-Clients[nc].Tlcn>Duration then Break;
      Inc(nc);
    end;
    if nc<ln then begin
      //Clients[nc].Psct^.Disconnect();
      Dec(ln);
      RecLog('Клиент '+GetAddrIP(Clients[nc].Addr)+' отключился',TITL);
      if nc<ln then Clients[nc]:=Clients[ln];
      SetLength(Clients,ln);
    end;
  end;
  }
end;
 
exports Gpnt,MainProc;
 
begin
  WriteLn('Передача данных по сети');
  WriteLn('Псевдоним сервера: ',SettingsRead(TITL,'Alias'));
  Duration:=StrToIntDef(SettingsRead(TITL,'Duration'),600);
  WriteLn('Лимит времени сессии: ',Duration);
  TBucinator.Create;
end.

ЗЫ.
Я называл модули на латинском, был bucinator, connector и др. bucinator - работа с сетью, connector - соединитель модулей. Потом после переделки я их совместил, сделал всё в connector`е тоже модулем, а первоначально он был консольным, ну не суть. Потом я подключал эти модули в других приложениях, по типу опенсервера, указывал какие модули нужны с сетью, база данных, язык программирования и тд. по сути было как микросервис, также делал приложение по типу 1C в котором тоже использовал эти модули и на одном компе был сервер, другие к нему подключались и получали с него данные, обменивались данными между собой.

Позже хотел повторить это на C++, а сейчас хочу на Rust
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 10:41
Не, погоди, ты писал про текущие проекты, которые в стадии недоделок из-за багов в сторонних библиотеках. Какие баги-то? И при чем тут INet более 10 лет назад?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 10:54  [ТС]
Цитата Сообщение от Celavesterys Посмотреть сообщение
Не, погоди, ты писал про текущие проекты, которые в стадии недоделок из-за багов в сторонних библиотеках. Какие баги-то? И при чем тут INet более 10 лет назад?
Вот вы(имеется ввиду и другие) постоянно всё куда-то не туда пытаетесь докопаться, что к теме никакого отношения не имеет. Это мои не текущие, а очень давние проекты. В lNet действительно есть какая-то ошибка, можете погуглить. При том что это было давно, и сейчас это обсуждать не имеет смысла, но я тот урок усвоил, что лучше по минимуму использовать сторонние решения.
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 11:03
Я правильно понял, ты когда-то давно словил багу в какой-то библиотеке и решил все библиотеки переписать сам? Тебя не смущает, что твои же собственные "библиотеки", которые без багов, базируются на функциях из библиотек? Почему не начать хотя бы с загрузчика ОС?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 11:18  [ТС]
Цитата Сообщение от Celavesterys Посмотреть сообщение
Почему не начать хотя бы с загрузчика ОС?
Загрузчик для ОС я сделал на ассемблере, даже вроде свою файловую систему тоже делал
Но меня остановило незнание архитектуры компьютера, там есть несколько разделов ПЗУ и в ОЗУ есть системные области, и вот как с ними работать я не понимаю.
Цитата Сообщение от Celavesterys Посмотреть сообщение
Я правильно понял, ты когда-то давно словил багу в какой-то библиотеке и решил все библиотеки переписать сам? Тебя не смущает, что твои же собственные "библиотеки", которые без багов, базируются на функциях из библиотек?
Я не отказываюсь совсем, я говорю, что стараюсь использовать их по минимуму, там где могу написать по своему так и сделаю, чем подключать стороннее.
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 11:37
Цитата Сообщение от pgb Посмотреть сообщение
Я не отказываюсь совсем, я говорю, что стараюсь использовать их по минимуму, там где могу написать по своему так и сделаю, чем подключать стороннее.
А ты понимаешь, что в одно лицо, с закрытым кодом, без автоматических тестов, ты создаешь еще больше багов, чем любая существующая библиотека?
0
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 11:43  [ТС]
Цитата Сообщение от Celavesterys Посмотреть сообщение
А ты понимаешь, что в одно лицо, с закрытым кодом, без автоматических тестов, ты создаешь еще больше багов, чем любая существующая библиотека?
По крайне мере я их могу исправить если обнаружатся, а вот в случае с сторонними решениями все труды многолетней работы пойдут просто в мусорное ведро. Вы это понимаете?

ЗЫ. Сейчас конечно проще стало, многие проекты с открытым кодом, при желании можно конечно покопаться и исправить, но меня сразу раздражать начинает, то как там всё написано, хочется просто взять и переписать по своему.
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 12:06
Цитата Сообщение от pgb Посмотреть сообщение
По крайне мере я их могу исправить если обнаружатся
Они не обнаружатся даже. Потому что нет пользователей, которые бы их обнаружили. Ты живешь и разрабатываешь в своем пузыре и думаешь, что все ок. Как только твой код попадет к кому-то со стороны, все сразу развалится.
Цитата Сообщение от pgb Посмотреть сообщение
а вот в случае с сторонними решениями все труды многолетней работы пойдут просто в мусорное ведро
Нет. Багу всегда можно зарепортить/пофиксить/обойти. Да и, как я понял, у тебя сейчас нет проблем с использованием, например, браузера, через который ты пишешь сюда, который использует десятки библиотек. На форум, который работает на фреймворке, который создатель форума не писал. Зато это все уже есть и оно уже работает. А у тебя пока только фантазии о том, что твой код будет без багов и очень быстрый. Код, который никто не использует, и правда, без багов и очень быстрый.

Добавлено через 29 секунд
Цитата Сообщение от pgb Посмотреть сообщение
но меня сразу раздражать начинает, то как там всё написано, хочется просто взять и переписать по своему.
Это называется NIH-синдром.
3
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
30.05.2024, 12:11
Классический The “Not Invented Here” (NIH) syndrome

Пациент неизлечим.
Катафалк, увозите.
4
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
30.05.2024, 12:15
Цитата Сообщение от pgb Посмотреть сообщение
А что по нему видно?
Видно, что ты пилишь его уже несколько лет, всё обещаешь зарелизить, а воз и ныне там.

Цитата Сообщение от pgb Посмотреть сообщение
То что я не забросил разработку своего фреймворка это наоборот говорит о том что я довожу свои проекты до конца.
Это говорит о том, что ты можешь бесконечно играться в программиста в песочнице, а по факту ни одного законченного проекта с реальными пользователями у тебя нет. Только срачи на форумах разводишь.

Цитата Сообщение от pgb Посмотреть сообщение
Даже те проекты которые у меня в стадии недоделок из-за багов в сторонних библиотеках и др. проблем я их вот хочу реанимировать и переписать на другом языке.
Удивительное дело. Почему то у людей, которых ты считаешь говнокодерами, не умеющими думать своей головой (т.е. буквально у всех остальных кроме тебя) получается выпускать продукты с использованием сторонних библиотек в том числе. А у такого супергуру как ты - почему то нет. Возможно, дело тут не в библиотеках. Плохому танцору сам знаешь что мешает.

Добавлено через 1 минуту
Цитата Сообщение от pgb Посмотреть сообщение
По крайне мере я их могу исправить если обнаружатся, а вот в случае с сторонними решениями все труды многолетней работы пойдут просто в мусорное ведро. Вы это понимаете?
Я думаю, тут все люди с практическим опытом разработки и отлично понимают что такое поддержка большого проекта, где сторонних библиотек может быть тысячи буквально. А вот ты, очевидно, даже и близко понятия не имеешь.
4
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 12:18  [ТС]
Цитата Сообщение от Celavesterys Посмотреть сообщение
Они не обнаружатся даже. Потому что нет пользователей, которые бы их обнаружили. Ты живешь и разрабатываешь в своем пузыре и думаешь, что все ок. Как только твой код попадет к кому-то со стороны, все сразу развалится.
Ещё как обнаруживаются. И пользователи моего фреймворка есть, даже если они этого и не подозревают, тот же voral к примеру. Я сам что-то начинаю писать на своём инструменте и обнаруживаю недоработки, исправляю их. Проект большой, за всем конечно уследить не реально, наглядный пример с DIRECTORY_SEPARATOR, написал некий код, он выполняет свою функцию, двигаешься дальше, дальше и дальше, как говорится работает не трогай, появился пользователь, возникла ошибка, исправил. Сам пробую, создавать сайты на своём инструменте и тоже обнаруживаю ошибки. Сейчас уже многое отлажено, да после запуска могут ещё ошибки всплыть, но это уже не критично, глобальных переделок как у меня были уже не будет, ядро отлажено, а ранее мне приходилось его переделывать несколько раз.

ЗЫ. Короче если бы вы создали когда нибудь подобный проект в одиночку, тогда не задавали бы тут сейчас мне этих глупых вопросов.
0
25 / 43 / 4
Регистрация: 18.12.2023
Сообщений: 184
Записей в блоге: 2
30.05.2024, 12:22
Цитата Сообщение от pgb Посмотреть сообщение
ЗЫ. Короче если бы вы создали когда нибудь подобный проект в одиночку, тогда не задавали бы тут сейчас мне этих глупых вопросов.
Я создавал проекты в команде. И прекрасно понимаю, что до выхода в открытый мир даже половины критичных багов не найдется. Даже с тестами. Потому что пользователи делают так, как никто даже не представлял. Но я тебя понял. Удачи и дальше существовать в своем пузыре с написанными без тестов безбажными либами на каждый чих.
Цитата Сообщение от pgb Посмотреть сообщение
тогда не задавали бы тут сейчас мне этих глупых вопросов
Да-да, ты тут самый умный. Поэтому с тобой никто работать и не хочет, и софт твой никто не юзает, кроме тебя самого Поэтому ты везде носишься с просьбой подключиться в твоему маня-мирку. Что ж, такова доля непризнанных гениев.
2
Эксперт .NET
 Аватар для Rius
13398 / 7852 / 1700
Регистрация: 25.05.2015
Сообщений: 23,869
Записей в блоге: 14
30.05.2024, 12:26
Определение не изобретенного здесь синдрома (NIH)

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

Синдром НИЗ проявляет несколько характерных черт:

1. Устойчивость к внешнему вводу
Отдельные лица или команды, страдающие синдромом НИЗ, сопротивляются внешнему вкладу, идеям или инновациям, даже если они доказали свою успешность в других местах.

2. Чрезмерный упор на внутренний опыт
Чрезмерное внимание уделяется знаниям и опыту внутреннего персонала, что приводит к убеждению, что внутренние решения всегда превосходят внешние.

3. Неэффективность и избыточность
Организации, страдающие синдромом НИЗ, часто предпринимают избыточные усилия по воссозданию решений, которые уже существуют извне. Это может привести к неэффективности и напрасной трате ресурсов.

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

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

Последствия синдрома НИЗ
Синдром НИЗ может оказывать пагубное воздействие на людей и организации:

1. Подавленные инновации
Могут быть упущены ценные инновации и идеи, потому что они зациклены на внутренних решениях.

2. Потраченные впустую ресурсы
Воссоздание решений или идей, которые уже существуют извне, может привести к напрасной трате времени, денег и усилий.

3. Снижение конкурентоспособности
Нежелание внедрять внешние инновации может привести к снижению конкурентоспособности на рынке, поскольку конкуренты могут быстрее внедрять внешние решения.

4. Сокращение сотрудничества
Синдром NIH может препятствовать сотрудничеству с внешними партнерами, ограничивая возможности для роста и расширения.

5. Неэффективное решение проблем
Может быть сложно эффективно решать сложные проблемы, когда они ограничивают себя внутренним опытом и решениями.
1
 Аватар для pgb
-508 / 32 / 0
Регистрация: 22.09.2015
Сообщений: 1,232
30.05.2024, 12:27  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
где сторонних библиотек может быть тысячи буквально. А вот ты, очевидно, даже и близко понятия не имеешь.
Я как раз имею понятие в отличие от вас. Даже все крупные фирмы создают свои продукты и прикладное ПО не с проста, зачем тогда по вашему если есть уже скажем React создали ещё Angular, Vue и др. даже в крупных компаниях понимают, лучше иметь свой инструмент и развивать его, чем использовать стороннее решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2024, 12:27

Питон и опенсорс
Дорогие форумчане, подскажите какой нибудь интересный опенсорс проект, интересует разработка десктопных приложений(все кроме django я...

Хостинг опенсорс проектов
Приглашаем принять участие в русскоязычном и бесплатным хостинге опенсорс проектов https://codingvault.org Вы можете здесь завести...

Кастомизация опенсорс проекта и создание инструкции
Приветствую дамы и господа. нужна помощь сильного программиста. Задача, как сказал один товарищ на консультации, много времени не съест. ...

DIY опенсорс контроллер "умного дома" - код в студии!
Всем привет! UPD от 19.08.16 Выложил первые исходники Хаба и нескольких исполнительных устройств. Тут такое дело - чуть менее...

запуск системных процедур через линк или опенсорс
Добрый день. Есть 20 из них 1 управляющий. с управляющего на все остальные есть линки. пытаюсь через линки узнать свободное место...


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

Или воспользуйтесь поиском по форуму:
200
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru