Русскоязычное программирование

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Русскоязычное программирование » предложения работы » Написание комментариев для НЯ-компилятора


Написание комментариев для НЯ-компилятора

Сообщений 1 страница 30 из 63

1

Сегодня редкий день - я выкинул одну книгу в помойку (в ящик для сбора макулатуры). Редкая книга такого могла бы удостоиться. Пожалуй, помню только одну - там было полно либеральной пропаганды. На этот раз это была детская книга, которую дали в качестве подарка при покупке хороших книг. Казнена была за картинки. Я верю, что психические отклонения могут передаваться через произведения искусства, поэтому пусть эта книга превратится в бумажную массу - может быть, в следующий раз ей повезёт больше. Это к вопросу о «ликвидации».

Судя по твоей первой ссылке, в 2016 году г-н. Столяров (кстати, я как-то видел его на одном дне рождения) оценивает свой труд в 600 руб в час. Не хочешь ли, Лис, за 300 рублей в час подокументировать компилятор Компонентного Паскаля? Вот тебе русскоязычная среда программирования, с исходными текстами и документацией на русском языке. Она содержит компилятор в машинный код x86. Также она содержит линкер и систему сборки мусора. Её ближайшие родственники содержат отладчик и дизассемблер, RTTI и корутины. Существует версия для Linux (правда, не особо развитая, но всё же с графикой).

http://s9.uploads.ru/t/P3EnK.png

Теперь нужно развивать язык или хотя бы "освоить" технологию. Чтобы развивать и освоить, нужно перевести на русский язык хотя бы комментарии компилятора. Я не говорю о переводе исходников, потому что мои ресурсы очень скудны и я не вижу сейчас, как это осуществить (13000 строк, несколько сотен слов, причём явно придётся вычитывать каждую строку, да ещё и писать тесты для компилятора, чтобы постараться ничего не сломать).

Скидка 50%, потому что ты же не ради денег тут всем этим занимаешься, а Родине служишь. Согласись, если я, не имея никаких грантов, из своей зарплаты буду тебе платить 600 руб, то получится, что я Родину защищаю за двоих, а ты просто работаешь за зарплату. Если же я буду платить тебе 300 руб в час, то мы оба будем защищать Родину.

Здесь ключевое слово - компактность. Компилятор в 13000 строк - это очень компактный компилятор. Язык - простой, компилятор - простой. Такой компилятор легко изучать на уязвимости.

Отредактировано budden (2018-10-27 18:06:51)

0

2

Вот что мной достигнуто на сегодняшний день, точнее говоря, за пару сегодняшних часов: программирование-по-русски.рф/static/док-ня.html

Конечно, я этого не писал, это компиляция из разных источников. Моё здесь только то, как я переименовал файлы (они были названы по-английски).

Ну и структура документа моя фирменная (вы её уже видели раньше).

Отредактировано budden (2018-10-27 17:49:30)

0

3

или хотя бы "освоить" технологию.

Дайте ссылку.

программирование-по-русски.рф/static/док-ня.html

Что за CMS? Вот это static - псомотрите в настройках, оно должно где-то переводиться. Это просто полезно для раскрутки - поисковики поднимут рейтинг ресурса.

Отредактировано utkin (2018-10-27 18:00:08)

0

4

Это - школьная сборка blackboxcomponentbuilder, inr.ac.ru/~info21/software.htm#school - хрен тут дашь ссылку.

Отредактировано budden (2018-10-27 18:02:10)

0

5

Это мой сайт написанный на голом vue.js, нет никакой CMS, и ресурсов что-то исправлять тоже нет. Я уже наигрался в vue, следующим действием будет удаление этого сайта и переделка на html + mustache какой-нибудь, с генерацией на домашнем компьютере.

0

6

Спасибо.

0

7

300 руб в час

При этом непонятно какой объём работы должен лис в час :rolleyes:
Не проще определение цены комментариев в целом?
Ну тогда любой желающий сможет провести оценку плодотворности своего труда сам.

Отредактировано MihalNik (2018-10-27 18:53:17)

0

8

У Лиса лапки и нет рук. Поэтому вакансия предлагается всем желающим.

0

9

> Не проще определение цены комментариев в целом?
Не проще, потому что объём комментариев оценить нелегко. Я максимально беру риски на себя и иду навстречу исполнителю. Ну ладно, нет - так нет.

0

10

budden написал(а):

Я максимально беру риски на себя и иду навстречу исполнителю.

Какие там риски и какому исполнителю на встречу?
Трудоустройство по ТК РФ? :D

Компилятор в 13000 строк

Например. 100 строк/час. 130 часов x 300р/час = 39 т.р. Джуниорам платят лучше.
Или 500 строк/час. 26 часов x 1000р/час = 26 т.р.

Отредактировано MihalNik (2018-10-31 07:32:38)

0

11

Компилятор в 13000 строк

А у меня индусский код - я форматирую там по-своему, получается много пустых строк и комментариев, в результате общая длина кода увеличивается в 2-3 раза :).

0

12

MihalNik, как-то вы некреативно троллите. Желаю вам также некреативно продвигать Алфор - так он точно никуда не пробъётся :) И врёте, как эхо москвы, а то и хуже. С какого потолка вы взяли количество строк в час?
Правильно считать так: 300 руб * 8 часов * 21 день = 50400. Прожиточный минимум (он же - минимальная пенсия) - 8.500.

И не забываем, что я Лису предложил сделать мне скидку 50%, поскольку это делается не ради денег, а чтобы выправить наше отставание в ИТ и не пришлось бы воевать танками, ракетами, автоматами, вилами и лопатами. Если эту скидку учесть, то получается 100800 - вполне рыночная зарплата для ролей второго плана в ИТ.

Отредактировано budden (2018-10-31 14:17:40)

0

13

Объём работы по анализу и переводу всего компилятора - месяца, наверное, на два, это если буду этим заниматься я между делом. А при должном умении можно и на год растянуть (правда, это в нашем случае не прокатит).

0

14

Компилятор в 13000 строк

Пересчитал строки в своём компиляторе 13 481 у меня больше.  ;)

0

15

Если бы где-то был ещё меньший компилятор - я бы обрадовался. Тысяч этак на 5... На самом деле в КП куча лишних вещей, одно только отличие между объектами и указателями на них чего стоит.

Отредактировано budden (2018-10-31 13:31:39)

0

16

budden
Из-за указателей очень много сложностей. От структур меньше проблем.
А зачем вам на 5 тысяч?
Просто у меня одна только кодогенерация занимает 4725.
Целые, плавающие, Булевые, строки, структуры, указатели, массивы.

0

17

Потому что у меня проект хоббийный, малобюджетный. Плюс KISS Principle. Но если вы пишете на Дельфи, то Дельфи - тоже не образец выразительности и компактности.

0

18

budden

budden написал(а):

Дельфи - тоже не образец выразительности и компактности.

Я владею более чем 10 языками. За годы практике пришёл к выводу: что плохому танцору всегда, что-то мешает. А так да у Си++ выразительность больше.  У питона ещё больше.
Но для задач создания компилятора мне хватает. Да есть проблемы с выразительностью, но решаемые.  Так как я тоже придерживаюсь KISS, то рефакторинг у меня это вяло текущем процессе. От перехода на другой язык строчек существенно меньше не станет.
К примеру от 'LEA' и 'MOV' пришлось отказаться в сторону цифр так как они более наглядные.

procedure TPrinterAST.PrintVarAssignVar(const VarAssignAST: TVarAssignAST);
var
  TypeFamily:TTypeFamily;
begin
  Assert(VarAssignAST<> nil, '98');
  TypeFamily:=SignatureTypeFamily(VarAssignAST.Signature);
  case TypeFamily of
  tfUndefine:  Compiler.Error.Add(194, '');  // Недопустимый тип
  tfOrdinal:   PrintVarAssignVar_Ordinal(VarAssignAST);
  tfReal:      PrintVarAssignVar_Real(VarAssignAST);
  tfBoolean:   PrintVarAssignVar_Ordinal(VarAssignAST);
  tfPointer:   PrintVarAssignVar_Ordinal(VarAssignAST);
  tfString:    PrintVarAssignVar_String(VarAssignAST);
  tfStructure: PrintVarAssignVar_Structure(VarAssignAST);
  end;
end;

procedure TPrinterAST.PrintRegAssignString(const Reg:Integer; const ImmConst: TImmConstAST);
var
  RegName:String;
  IndentDecl:TConstDeclAST;
begin
  Assert(ImmConst<> nil, '99');
  IndentDecl:=GentIndentForImmString(ImmConst._String);
  AddConstImm(ImmConst, IndentDecl);

  RegName:=GetRegName(Reg, GetTypeSize(IndentDecl._Type));
  PrintCmdAssign2(-4, RegName, IndentDecl.Indent, ToReg);    // -2-2 для ссылки
//  PrintCmdAssign('MOV', RegName, IndentDecl.Indent, ToReg);
end;

procedure TPrinterAST.PrintVarAssignString(const VarAssignAST: TVarAssignAST);
var
  RegName:String;
  IndentDecl:TVarDeclAST;
  Ofs:Integer;
  Signature:TSignatureAST;
  Signature2:TSignatureAST;
  IndentDecl1:TVarDeclAST;
  IndentDecl2:TConstDeclAST;
begin
  Assert(VarAssignAST<> nil, '100');
  Signature:=VarAssignAST.Signature;
  IndentDecl1:=Signature.IndentDeclRef as TVarDeclAST;

       case Signature.Designator.Kind of
       dkSignature:
          begin
            if VarAssignAST.Expression.Factor1.Kind=fkImmConst then
               begin
               IndentDecl2:=GentIndentForImmString(VarAssignAST.Expression.Factor1.ImmConst._String);
               AddConstImm(VarAssignAST, IndentDecl2);
               PrintCmdAssign2(0, 'EAX', IndentDecl2.Indent, ToReg);
//               PrintCmdAssign('LEA', 'EAX', IndentDecl2.Indent, ToReg);
               PrintPush('EAX');
               end  else
               begin
               IndentDecl:= VarAssignAST.Expression.Factor1.Signature.IndentDeclRef as TVarDeclAST;

               PrintCmdAssign2(0, 'EAX', IndentDecl.Indent, ToReg);
//               PrintCmdAssign('LEA', 'EAX', IndentDecl.Indent, ToReg);
               PrintPush('EAX');
               end;

            PrintCmdAssign2(0, 'EAX', IndentDecl1.Indent, ToReg);
//            PrintCmdAssign('LEA', 'EAX', IndentDecl1.Indent, ToReg);
            PrintPush('EAX');

            WriteLn(FFile,#9#9'CALL AssignString');
            Dec(SubStack, 2*PointerSize);
          end;
       dkDesignature: ;
       dkDesignatureDot:
          begin
          PrintCmdAssign2(0, 'ESI', Signature.IndentDeclRef.Indent, ToReg);
//          PrintCmdAssign('LEA', 'ESI', Signature.IndentDeclRef.Indent, ToReg);
          Ofs:=0;
          Signature2:=Signature;
          While  Signature2.Designator.Kind= dkDesignatureDot do
             begin
             Signature2:=Signature2.Designator.Signature;
             Ofs:=Ofs+GetFildOfs(Signature2);
             end;

          IndentDecl2:=GentIndentForImmString(VarAssignAST.Expression.Factor1.ImmConst._String);
          AddConstImm(VarAssignAST, IndentDecl2);

          PrintCmdAssign2(1, 'EAX', IndentDecl2.Indent, ToReg);
//          PrintCmdAssign('MOV', 'EAX', IndentDecl2.Indent, ToReg);
          PrintPush('EAX');

          WriteLn(FFile,#9#9'LEA EAX, [ESI+EDI]');
          PrintPush('EAX');

          WriteLn(FFile,#9#9'CALL AssignString');
          Dec(SubStack, 2*PointerSize);
          end;
       end; // case

end;

А для парсинга у меня свой шаблон, изучен опыт других с применением таблиц и доработан. ErrorWay - для восстановления после ошибки.

{© 2017 Pavia. All Rights Reserved, by Pavia.}
unit UParserImplementation;

interface

uses UCompiler, UAST, UFSM, UASTFabric, USimvler, UGramAnaliser,
  UParserDeclarations, UParserStatement, UParserAsm;

type
  TImplemtSectionParser = class(TParser)
  private
    { private declarations }
  protected
    { protected declarations }
  public
     DeclSectionParser:TDeclSectionParser;
     StatementParser:TStatementParser;
     ForeignAsmParser:TForeignAsmParser;
     constructor Create(TheCompiler:TCompiler); Overload;
     function Parse(Anchor:TSimvol):TImplimentaionAST;
     procedure ErrorWay(Anchor:TSimvol);
     procedure MainBlock(var Node:TNodeAST);
     procedure ImplFunction(var Node:TNodeAST);
     procedure ImplProcedure(var Node:TNodeAST);
     procedure AsmBlock(var Node: TNodeAST);
     procedure ParseAsm(var Node: TNodeAST);
     procedure NOP(var Node:TNodeAST);
     function  IsNop(var Proc): Boolean;

    { public declarations }
  published
    { published declarations }
  end;

implementation

{ TImplementationsParser }

constructor TImplemtSectionParser.Create(TheCompiler: TCompiler);
begin
inherited Create(TheCompiler);
StatementParser:=TStatementParser.Create(TheCompiler);
ForeignAsmParser:=TForeignAsmParser.Create(TheCompiler);
end;

procedure TImplemtSectionParser.ErrorWay(Anchor: TSimvol);
begin
  repeat
     ReadSimvol;
  until SimvolInArray(CurrentSimvol,[Anchor, TS(';'), TS('.'), EOFSimvol]);
  if CheckSimvol(TS(';')) then
     ReadSimvol;
end;

procedure TImplemtSectionParser.ImplFunction(var Node: TNodeAST);
var
  NHeading:TNodeAST;
  FuncImpAST:TFuncImpAST;
  LocalDecl:TDeclarationAST;
  CompaundStatement:TNodeAST;
  NAsmBlock:TNodeAST; 
begin
  FuncImpAST:=ASTFabric.FuncImpCreate;
    ASTFabric.ActivLeaf:=FuncImpAST;
      DeclSectionParser.FunctionHeading(NHeading);

      DeclSectionParser.ResultExist:=True;
      DeclSectionParser.ResultType:=(NHeading as TFuncDeclAST).result;
  FuncImpAST.FuncDecl:=NHeading as TFuncDeclAST;
      if  FuncImpAST.FuncDecl.Attr.Imp=faHoha then
          begin
          LocalDecl:=DeclSectionParser.Parse(TS('Begin'));
          FuncImpAST.LocalDec:=LocalDecl;
          StatementParser.ParseCompaundStatement(CompaundStatement);
          FuncImpAST.CompaundStatement:=CompaundStatement as TCompaundStatementAST;
          end;
      if  FuncImpAST.FuncDecl.Attr.Imp=faAssemble then
          begin
          LocalDecl:=DeclSectionParser.Parse(TS('asm'));
          FuncImpAST.LocalDec:=LocalDecl;
          ParseAsm(NAsmBlock);
          FuncImpAST.AsmBlock:=NAsmBlock as TForeignAsmAST;
          end;
      NeedSimvol(TS(';'));
    ASTFabric.LevalUp;
  Node:=FuncImpAST;

end;

procedure TImplemtSectionParser.ImplProcedure(var Node: TNodeAST);
var
  NHeading:TNodeAST;
  FuncImpAST:TFuncImpAST;
  LocalDecl:TDeclarationAST;
  CompaundStatement:TNodeAST;
  NAsmBlock:TNodeAST;
begin
  FuncImpAST:=ASTFabric.FuncImpCreate;
    ASTFabric.ActivLeaf:=FuncImpAST;
      DeclSectionParser.ProcedureHeading(NHeading);
      DeclSectionParser.ResultExist:=False;
      DeclSectionParser.ResultType:=Nil;
  FuncImpAST.FuncDecl:=NHeading as TFuncDeclAST;
      if  FuncImpAST.FuncDecl.Attr.Imp=faHoha then
          begin
          LocalDecl:=DeclSectionParser.Parse(TS('Begin'));
          FuncImpAST.LocalDec:=LocalDecl;
          StatementParser.ParseCompaundStatement(CompaundStatement);
          FuncImpAST.CompaundStatement:=CompaundStatement as TCompaundStatementAST;
          end;
      if  FuncImpAST.FuncDecl.Attr.Imp=faAssemble then
          begin
          LocalDecl:=DeclSectionParser.Parse(TS('asm'));
          FuncImpAST.LocalDec:=LocalDecl;
          ParseAsm(NAsmBlock);
          FuncImpAST.AsmBlock:=NAsmBlock as TForeignAsmAST;
          end;
      NeedSimvol(TS(';'));
    ASTFabric.LevalUp;
  Node:=FuncImpAST;
end;

function TImplemtSectionParser.IsNop(var Proc): Boolean;
var Ptr:Pointer;
  Proc2:TParserProcedure;
begin
  Ptr:=Pointer(Proc);
  Proc2:=Nop;
  Result:= (Ptr=@Proc2);
end;

procedure TImplemtSectionParser.MainBlock(var Node: TNodeAST);
begin
  StatementParser.ParseCompaundStatement(Node);
  //NeedSimvol(TS('.'));
end;
{var
  CompaundStatement:TNodeAST;
  MainBlockAST:TMainBlockAST;
begin
  MainBlockAST:=TMainBlockAST.Create;

    StatementParser.ParseCompaundStatement(CompaundStatement);
    NeedSimvol(TS('.'));

  MainBlockAST.CompaundStatement:=CompaundStatement;
  Node:=MainBlockAST;
end;  }

procedure TImplemtSectionParser.NOP(var Node: TNodeAST);
begin
// нечиго не делаем
end;

function TImplemtSectionParser.Parse(Anchor: TSimvol): TImplimentaionAST;
// Машина конечного числа состояний
const
  CommandCount=5;
var
  Prog:array [0..CommandCount-1] of TCaseCommand;
  procedure Init;
  begin
    Prog[0].Value:='function'; Prog[0].Woker:=ImplFunction;
    Prog[1].Value:='procedure'; Prog[1].Woker:=ImplProcedure;
    Prog[2].Value:='Begin'; Prog[2].Woker:=MainBlock;
    Prog[3].Value:='End';   Prog[3].Woker:=Nop;
    Prog[4].Value:='asm';   Prog[4].Woker:=AsmBlock;
  end;
var
  Woker:TParserProcedure;
  NodeAST:TNodeAST;
begin
Init;
Self.Anchor:=Anchor;

Result:=ASTFabric.ImplimentaionCreate;
ASTFabric.ActivLeaf:=Result;
NeedSimvol(TS('Implementation'));
  repeat
    NodeAST:=Nil;
    Woker:=ChooseOfWork(CommandCount,@Prog, CurrentSimvol());

    if @Woker=nil then
       begin
       Compiler.Error.Add(114, CurrentSimvol().Value);
       ErrorWay(Anchor);
       end else
       if Not IsNop(Woker) then
          begin
          Woker(NodeAST);
          Result.Add(NodeAST);
          end;

  until  (IsAnyAnchor) or (IsNop(Woker));
  if  Result.MainBlock=nil then
      NeedSimvol(TS('end'));
  ASTFabric.LevalUp;
  //  if (Result.ListFunc=Nil) and (Result.MainBlock=nil) then
//      FreeAndNil(Result);
end;

procedure TImplemtSectionParser.ParseAsm(var Node: TNodeAST);
begin
  Node:=ForeignAsmParser.Parse;
end;

procedure TImplemtSectionParser.AsmBlock(var Node: TNodeAST);
begin
  ParseAsm(Node);
  NeedSimvol(TS(';'));
end;

end.

0

19

budden написал(а):

С какого потолка вы взяли количество строк в час?

Читать умеете? Написано что?

Например

Оно же будет разное у разных людей, так? Или Вы полагаете, что Джун за 50к/месяц напишет даже половину от спеца за 100к? Не говоря уже о качестве.
Так что вполне возможно, что Ваш патриотизм Вам может выйти дороже, потому что Вы не указываете ни качества труда, ни продуктивности, ни скорости)

И не забываем, что я Лису предложил сделать мне скидку 50%, поскольку это делается не ради денег, а чтобы выправить наше отставание в ИТ

И вообще - почему Лису? Что это такой за финт? Нужен качественный перевод или просто акт патриотизма? Или [ф]акт лиса на втором плане?

Правильно считать так: 300 руб * 8 часов * 21 день = 50400.<...>Объём работы по анализу и переводу всего компилятора - месяца, наверное, на два, это если буду этим заниматься я между делом.

300 р/час - это работа на просиживание штанов, м/у делом.
Кто вообще сказал что:
1) У лиса нет высокооплачиваемой работы, когда он вроде писал, что работает в одном из крупнейших агрегаторов в рунете и что такие рыжие стоят 200+т.р/месяц.
2) Имеются навыки чтения, анализа и комментирования кода вообще и оберона в частности, когда лис вообще чихал на Паскали.

Дельфи - тоже не образец выразительности и компактности.

Как и синтаксис AL-IV, например. И лисп. И перл.

также некреативно продвигать Алфор

Почему Вы считаете, что я должен это или другое? Кто сказал что анализ - это продвижение или пропаганда?

Из-за указателей очень много сложностей.

Но без них невозможно на низком уровне. За сведение к минимуму придётся чем-то платить.

Отредактировано MihalNik (2018-10-31 16:32:57)

0

20

MihalNik написал(а):

Но без них невозможно на низком уровне.

Возможно. На низком уровне вместо указателей, просто относительная адресация.
Понятие указатель было придумано ...

Harold Lawson is credited with the 1964 invention of the pointer.[2] In 2000, Lawson was presented the Computer Pioneer Award by the IEEE “[f]or inventing the pointer variable and introducing this concept into PL/I, thus providing for the first time, the capability to flexibly treat linked lists in a general-purpose high level language”.[3] His seminal paper on the concepts appeared in the June, 1967 issue of CACM entitled: PL/I List Processing. According to the Oxford English Dictionary, the word pointer first appeared in print as a stack pointer in a technical memorandum by the System Development Corporation.

Компьютеры создавались ещё до 1964 в 40-60. Тот же компьютер миссии Аполлон.

0

21

MihalNik написал(а):

За сведение к минимуму придётся чем-то платить.

Это верно я ввёл указатели чисто для скорости передачи параметров. Если верить интернету то вызов функции в библиотеках Си занимает 40% вычислительного времени процессора.
Если бы я оставил структуры без указателей, то передача их функции съедало бы много времени.  Ещё больше тех 40%.

0

22

MihalNik написал(а):

Кто сказал что анализ - это продвижение или пропаганда?

Я - не я и лошадь не моя :)

Например

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

У лиса нет высокооплачиваемой работы, когда он вроде писал, что работает в одном из крупнейших агрегаторов в рунете и что такие рыжие стоят 200+т.р/месяц.

Я тоже стою довольно дорого. Но, вместо того, чтобы зарабатывать свои 200+, я занимаюсь проектами. Я сделал довольно много прототипов в области русификации и пару законченных решений. Если я работаю не один, то мои работники получают от 1000 до 1600 рублей в час из моих кровных (в реальности они получают меньше, т.к. в счёте выставляют меньше часов, чем реально отрабатывают, но это их личный выбор). Теперь я русифицирую КП. А чем занимается Лис, кроме пустословия на форумах? Что конкретного, полезного сделал Лис за все эти годы? Кому он заплатил за работу по русификации чего-либо хоть копейку? Какой деятельности он оказал добровольную помощь? Дал ли он платную рекламу хоть какой-то темы? Если он такой богатый и только лапки, то пусть тогда скинется на документирование компилятора КП. Потому что я не только недополучаю деньги, я ещё имею проблемы с менеджментом из-за того, что не отрабатываю свои положенные часы, и с семьёй, т.к. всё время работаю. Почему я должен работать за всех и терпеть лишения, а Лис будет весь в шоколаде искать добровольцев на любой чих?

И вообще - почему Лису?

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

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

По сути, своим отказом мне помогать Лис расписался в том, что на самом деле ему не нужен русскоязычный ЯП. Если, допустим, Лису не нравлюсь лично я, то он был бы должен хоть как-то объяснить, чем ему не нравится Блекбокс и КП. Он уж явно не хуже, чем 1Скрипт.

Но без них невозможно на низком уровне.

В лиспе указателей нет, а FFI при этом есть. Одно дело, указатели специально для низкого уровня, а другое дело - указатели, загнанные в узкую область применения. Но это, к сожалению, нам с вами обсудить не выйдет, т.к. я, как известно, некомпетентен.

0

23

budden написал(а):

Если он такой богатый и только лапки, то пусть тогда скинется на документирование компилятора КП.

Так мы не знаем стоимость этой работы.

budden написал(а):

Я тоже стою довольно дорого.

Я не об этом. Это совершенно не важно. Экономические задачи требуют решения как экономические.
Т.е. дана задача: глубокое комментирование исходников. Тут уже по-хорошему нужен критерий качества работы, но по факту достаточно пробы конкретного исполнителя.
Далее цена вопроса. Нужно как можно дешевле. Т.е. с точки зрения грамотной экономики - минимум произведения кол-ва часов на цену одного часа труда.
И совершенно очевидно что люди отличаются по продуктивности и самооценке. Также совершенно очевидно, что эти отличия непропорциональны.
Вы же вряд ли выбираете стоматолога по принципу, чтобы он зарабатывал менее, чем Вы? Вам скорее всего нужно будет от него возможности решения конкретных задач и цена этого решения.

budden написал(а):

Почему я должен работать за всех и терпеть лишения, а Лис будет весь в шоколаде искать добровольцев на любой чих?

Потому что конкретно Лис Вам ничего не должен. И если Вы конкретно настаиваете на Лисе - Вам скорее нужно развлечение в виде подергивания Лиса за хвостязык, а не перевод исходников.

budden написал(а):

Но думаю, что нет иного пути, как тщательно разобраться в коде.

Вот и я так думаю про AL-IV. В тоже время кто-то считает, что мы не правы и в этом возможна доля правды - мы же не знаем результат анализа до его проведения.

budden написал(а):

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

Лис ни в чём не расписывался. Написал бы тоже самое про его требования deb-пакетов AL-IV - но это же некорректно.
Очевидно, Лис - не проф. программист (Utkin, например, тоже самоучка), иначе бы такое его требование выглядело просто странно.

допустим, Лису не нравлюсь лично я

Допустим, Лису не по нраву Ваши требования к нему, взятые с потолка. С таким же успехом он лично должен Вам пирожков и пива.
Далее, Лису (и мне, например) не по нраву Ваше отношение к оценке труда, когда люди просто не имеют права на менее или более продуктивную работу.

Отредактировано MihalNik (2018-10-31 18:23:09)

0

24

> но по факту достаточно пробы конкретного исполнителя
Я с этого и начал, а вы пытались что-то из этого замутить. Хорошо, что мы пришли к консенсусу.

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

> Допустим, Лису не по нраву Ваши требования к нему, взятые с потолка.
Думаю, он сам может об этом сказать.

> подергивания Лиса за
За совесть, за совесть.

> Вы же вряд ли выбираете стоматолога по принципу, чтобы он зарабатывал менее, чем Вы?
Я знаю, что я сделаю лучше и быстрее, чем большинство сторонних людей. Поэтому мне выгоднее самому поделать час, чем работать час на работе и отдать заработанное почти любому стороннему человеку. За исключением варианта, когда тот человек знает предмет намного лучше меня, или если он мотивирован получить результат, а не только деньги, или варианта, когда меня взяли за горло и заставляют на работе отрабатывать часы.

Но ведь Лис не выдвигал требований по оплате - он просто отказался.

> И если Вы конкретно настаиваете на Лисе
Вы кого-то конкретного предлагаете? Тут на форуме нет никого.

0

25

> и мне, например
Я так понял, что от "например" до точки идёт комментарий к исходному тексту вашей мысли, который можно игнорировать? Если хотите сказать что-то конкретное, то скажите это. Вы хотите попереводить компонентный Паскаль по цене 3 рубля за строчку? Это очень опрометчиво, поскольку там речь идёт не о переводе, а об деобфускации и reverse engineering :)

0

26

budden написал(а):

> но по факту достаточно пробы конкретного исполнителя
Я с этого и начал, а вы пытались что-то из этого замутить. Хорошо, что мы пришли к консенсусу.

Вы начали с указания Лису, что само по себе не вежливо, особенно указания про оплату - не сама сумма, а её аргументация. Лис же просто сразу вежливо отказался.

Вы кого-то конкретного предлагаете? Тут на форуме нет никого.

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

Эта задача - не экономическая.

А подзадача оплаты труда такой подзадачи "сохранить нашу страну" как написание комментариев для документирования КП - экономическая.

budden написал(а):

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

Вы этого не знаете наверняка. Чтобы были исполнители нужна какая-то оценка, способ оценки. Для этого, например, нужно фикс. бюджет или время. Например (а не именно так!), 160 часов по 300р/ч = 48т.р. на всю работу. Как по мне это неэффективный труд - слишком много времени для 13 тыс строк исходника и слишком низкая оплата труда в час, но вдруг кто-то предложит свой труд даже дешевле, но медленее, или по 20 часов в неделю там и т.д. Ну мало ли. Разрыв м/у Москвой и регионами - ужас.
Тогда и Вы и любой желающий на это дело могут провести независимые оценки. А лучше бы Вы сразу дали пример качества работы, которую хотите, на пару страниц - чтобы не было недопонимания.

budden написал(а):

попереводить компонентный Паскаль по цене 3 рубля за строчку? Это очень опрометчиво, поскольку там речь идёт не о переводе, а об деобфускации и reverse engineering

Вот именно про это я говорю - нужны критерии и примеры. А реинжиниринг это не $1-2/месяц. Это же просто бред. Намного вероятнее что существуют люди способные это за неделю (суммарной работы, необязательно за раз), но за ту же $1, чем способные это за месяц и за $1.
Ну просто потому что когда-то люди писали на паскалях и ассемблерах и они ещё м.б. живы, скучают себе на пенсии) :rolleyes:

Вы хотите

Конкретно я вообще не видел исходников КП. И если меня, вдруг, сразу же стошнит, это же ничего не говорит о других, а может для кого-то это беллетристика или ностальгия)

Отредактировано MihalNik (2018-10-31 20:51:25)

0

27

Ну, если вам лично, и никому другому на этом форуме данная задача неинтересна, то зачем мы тратим деньги на обсуждение? (хотел написать "время", но это одно и то же, поэтому описку исправлять не буду :) )

0

28

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

https://zx.oberon2.ru/forum/viewforum.php?f=37

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

Отредактировано budden (2018-10-31 21:30:04)

0

29

budden написал(а):

данная задача неинтересна, то зачем мы тратим деньги на обсуждение? (хотел написать "время", но это одно и то же, поэтому описку исправлять не буду  )

Почему не интересна? Данный класс задач важен, потому что многое требует в первую очередь качественного перевода. Значит, нужны эффективные техники.
MihalNik читает исходники AL-IV вообще бесплатно) Правда, качество их соответствует его уровню понимания. Что ни в коем случае не значит, что ему нравится его синтаксис.

Вот глянул по ссылкам на исходник парсера - в строках много где более двух операторов.
Тем не менее: парсер - 1872 строки, но 1362 ";" + 473 END. 60 процедур. Т.е. число строк даёт адекватную оценку.
Из обфускации имеется магия вроде "err(64)". Но это формализованными методами преобразуется.
НяФс, НяД, НяМ - также нечитаемо и непонятно зачем сокращение. Вы же их не каждую вручную вписываете, так?
НяГ486Ну - такие названия в код вообще низзя. Для глаз просто ужас. Н486 не достаточно что ли?

На вскидку - код парсера КП не сложен. Другое дело, что сам процесс документирования/перевода/комментирования м.б. тяжеловесным.

Задача состоит в продолжении этой работы. В конечном итоге хочу добиться следующих целей:

- понятное описание каждой процедуры на русском языке

Обычно достигается комментированием каждой строчки ежу понятным языком (уровня понимания ленивым первокурсником).
А в КП однострочные комментарии можно?
Также решается самодокументированным кодом по-русски. Кириллица свободно работает? Идентификаторы заменимы, так? А ключевые слова? Лексер вроде простой.

- константы разбиты на прямую сумму из групп. Я столкнулся с тем, что группа (* symbol values and ops *) и группа (* symbol values or ops *) пересекаются. Нужно разбить на непересекающиеся группы.
- константы разбиты на прямую сумму из групп. Я столкнулся с тем, что группа (* symbol values and ops *) и группа (* symbol values or ops *) пересекаются. Нужно разбить на непересекающиеся группы.

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

Надо см. исходники. Но это - разноуровневые цели.
Также они не выглядят как конечные.

Ещё потыкав 3-4 исходника MihalNik заметил что язык сокращается форм. методами примерно на 10-20%

Отредактировано MihalNik (2018-11-01 01:58:40)

0

30

НяФс, НяД, НяМ - также нечитаемо и непонятно зачем сокращение. Вы же их не каждую вручную вписываете, так?
НяГ486Ну - такие названия в код вообще низзя. Для глаз просто ужас. Н486 не достаточно что ли?

Вы уже четвёртый, кто это ругает, и мой ответ читайте тут:

https://forum.oberoncore.ru/viewtopic.p … 59#p105259

и там выше по теме. Насчёт err - есть таблица кодов, просто нужно знать, где. В нормальном ЯП это было бы перечисление, но в КП сказано, что перечисления - это соблазн и разслабление духа. Названия модулей взяты так, чтобы не нарушить традиции оригинала (см. исходные названия).

> А в КП однострочные комментарии можно?
Нет, хотя я хочу добавить.

Отредактировано budden (2018-11-01 11:33:15)

0


Вы здесь » Русскоязычное программирование » предложения работы » Написание комментариев для НЯ-компилятора