Author Topic: Кобол 21 века  (Read 1214 times)

0 Members and 1 Guest are viewing this topic.

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24128
  • Gender: Male
on: August 27, 2009, 13:07
Как же не хватает типов данных ФЯ во всяких этих C++ или C#.

Вот например нужен мне временный тип в одном месте -- только в одном, который может содержать ИЛИ строку, ИЛИ массив строк, ИЛИ быть нулём -- что-то одно -- чтобы этот тип параметризировать как V в Dictionary<K, V>. В С#'ах и прочих шедеврах быдломысли, где траблы с алгебраическими типами данных, мне придётся описывать несколько классов:

Quote
enum DicValueType
{
  Null,
  String,
  StringArray
}

struct DicValue
{
    public DicValueType Type;
   
   public String AsString;
   public String[] AsStringArray;
}

Можно ещё через наследование сделать*, но будет больший костыль.

В обычном си этот костыль обычно делается через юнионы, но это только экономит память, но не количество буков (нельзя делать анонимные юнионы, к примеру):

Quote
typedef struct
{
  enum ValueType type;
  union
  {
     char** as_str;
     char* as_str_arr;
  } p;
} DicValue;

Вот реально, по сравнению с языками с нормальной типизацией, эта писанина кажется прыжком обратно в 80-ые. Кобол какой-то раздутый с goto'ами. Потому что в функциональщине это обычно описывается примерно так:

data DicValue = Null | AsString String | AsStringArray [String]

Лол.

В ходе попытки написания синтаксического парсера человеческих языков на C# (номальная работа со строками была нужна), мне столько раз приходилось так костылить, эх... Могёт, на Окамле попробовать? На Хаскеле боязно.


* Хотя нет, наследование нельзя. Для экономии памяти я в C# использую для таких случаев structs, которые живут только в стеке, без выделения на куче, но они не наследуются.
肏! Τίς πέπορδε;

Offline Nevik Xukxo

  • Posts: 46690
  • Gender: Male
  • Смотрите аниме и сериалы
Reply #1 on: August 27, 2009, 13:13
Причёмтуткобол?

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24128
  • Gender: Male
Reply #2 on: August 27, 2009, 13:18
Quote from: Неодобренный в силу технических проблем Чукчо
Причёмтуткобол?

Hello, World в сравнении:

Quote from: C
#include <stdio.h>
 
int main(void) {
 
   printf("Hello World");
   return 0;
}

Quote from: COBOL
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300
000400*
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500     DISPLAY "Hello world!" LINE 15 POSITION 10.
100600     STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800     EXIT.
肏! Τίς πέπορδε;

Offline злой

  • Posts: 10948
  • Gender: Male
Reply #3 on: August 27, 2009, 17:42
Кобол: Наводите ПИСТОЛЕТ COLT 45 на НОГА.СТОПА, ТОГДА помещаете РУКА.КИСТЬ.ПАЛЕЦ на ПИСТОЛЕТ.КРЮЧОК и ПОЖАЛУЙСТА, НАЖИМАЕТЕ. ТОГДА возвращаете ПИСТОЛЕТ в КОБУРУ. ПОЖАЛУЙСТА, ПРОВЕРЬТЕ, нуждаются ли шнурки в повторном связывании.

А ведь на этом чуде написано ядро Oracle`а...
Разбейте проблемы на подпроблемы (с)

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24128
  • Gender: Male
Reply #4 on: August 27, 2009, 20:20
Скачал 20 мегов, думал F# установить (OCaml под .NET, уи-и-и), а он оказывается в отношении среды несовместим с Visual C# Studio 2008 Express, надо или полноценную версию студии брать, или 380 мб дополнительных качать для Visual Studio 2008 Shell. Как-то не хочется :'(
肏! Τίς πέπορδε;

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Note: this post will not display until it's been approved by a moderator.
Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: