Najkrótszy język programowania

W jakim języku, ogólnie ujmując, można tworzyć najkrótsze w ilości znaków programy? Słyszałem o Prologu, ale: może mylę, a może też są jakieś krótsze? Mam nadzieję, że rozumiecie, czego potrzebuję. Mam tylko nadzieję na język z dobrą dokumentacją, ale podawajcie wszystkie wasze typy. Mogą to oczywiście być języki wyspecjalizowane w konkretnych zadaniach. Nieistotny jest poziom skomplikowania języka, oraz ogólnie jego typ.

Chodzi o _ code golf _. Jak najmniejsza ilość znaków do napisania tego samego algorytmu, a nie o najmniejszą ilość komend.

HQ9+

lub

HQ9++

Jeśli chcesz się nauczyć obiektówki.

Obczaj to:

http://pl.wikipedia.org/wiki/Brainfuck

Ba pełna dokumentacja mieści się w kilku wierszach.

Perl jest dość popularny do code golfa.

@[alex]

Znam Brainfucka dość dobrze i jest to najprostszy język pod względem składni, ale i najtrudniejszy pod względem logicznym. Jednakże z całą pewnością nie jest najkrótszy, więc niczym się nie popisałeś.

Perl - do code golfa jest popularny, ale to dlatego, że on sam jest jest prekursorem tego typu zawodów, ze względu na dość dużą dowolność składni.

Bynajmniej mi nie pomogłeś też Ty, linux_to_syf_^^. Ten język niestety nie jest nawet kompletny. Mi nie chodzi o ilość komend, tylko o ilość znaków potrzebną do napisania tego samego programu.

Jeżeli chodzi ci o ilość znaków to da się wymyślić zadania tak żeby dla rozwiązania każdego zadania potrzebny był inny język.

Jeżeli zaś nie masz specjalnie wymyślonych zadań to C++ o ile nie masz ograniczeń co do bibliotek.

Jestem hobbystą, po prostu chcę się nauczyć języka, za pomocą którego, będę w stanie jak najszybciej pisać programy - mniejsza ilość znaków = mniejszy czas. Więc szukam języka maksymalnie inteligentnego/rozbudowanego w swojej prostocie. Rozumiesz mnie już? Bo nadal nie udzielasz mi odpowiedzi, a C++ zdecydowanie to najkrótszych nie należy.

Wiem, że Prolog służy do rozwiązywania problemów logicznych, ale faktycznie jest na tyle ciekawy, że dodałem go do listy najkrótszych języków programowania. Jakieś inne propozycje?

Poza tym czuję trochę dyskomfort przy używaniu języków kompilowanych, ale ciekawe propozycję rozważę i będę za nie wdzięczny.

To zależy od typu programu. Inne języki będą zwięźlejsze w przypadku operacji na tekście, inne w przypadku obsługi plików, inne dla wielowątkowości, inne dla obliczeń matematycznych, inne dla statystycznych, inne w www, inne w desktopowym GUI. A i tak wszystko zależy od umiejętności programisty, no i od długości nazw zmiennych. :wink:

Twoje pytanie jest zbyt mało precyzyjne.

Dodane 11.03.2013 (Pn) 23:14

Bzdura. Programowanie polega na myśleniu, a nie na uderzaniu w klawisze.

Zgadzam się. Nie chodzi tu o precyzję. Po prostu proszę o Wasze typy. Niech będzie w różnych kategoriach, dostajecie wolną rękę i właśnie to jest najpiękniejsze. Można się popisać wiedzą, a ja z tego sporo wyniosę. Jeśli jesteś obeznany w wielu językach programowania, będziesz mógł podać kilka języków i ich najlepsze zastosowanie. Ja jestem typem interdyscyplinisty (ah, to słowotwórstwo!)

Dodane 11.03.2013 (Pn) 23:52

@somekind

Ależ oczywiście, że polega na myśleniu! Jednak opierając się jedynie na tej zasadzie, mogę pozostać przy Brainfucku. Jest to doskonały przykład (acz skrajny), że narzędzie też jest ważne. Pierwiastki też mogę obliczać przecież jedynie za pomocą mojego mózgu, ale od tego są odpowiednie narzędzia, czytaj procesory. Narzędzia wyspecjalizowane w obliczeniach. Na takich samych zasadach działają języki programowania, też są wyspecjalizowane w różnych dziedzinach. Jeśli język programowania jest wyspecjalizowany w renderowaniu grafiki (czysto teoretyczny przykład), to na pewno będzie miał najlepsze (co za tym idzie - najkrótsze i najprostsze) rozwiązania właśnie w tej dziedzinie. Więc - albo pomóż, stwórz krótką listę języków, które uważasz za godne polecenia, wraz z ich zastosowaniem i nie odbiegaj od tematu; albo zamilcz. Nie lubię być pouczany, kiedy o to nie proszę, tym bardziej w sprawach, o których pojęcie mam.

No i nareszcie zaczynają się poważne odpowiedzi.

Na grzyba? Jestem znudzonym człowiekiem, z ciekawości ludzkiej zwyczajnej, już i tak dawno spadłem poniżej pierwszego stopnia do piekła. Kiedy mogę poszerzam w ciekawy sposób swoją wiedzę na różne tematy.

To co piszesz o programowaniu

to bzdura do potęgi entej. To tak tylko dla potomnych, przyszłych informatyków itd.

Programy najszybciej piszę się w językach, w których bynajmniej nie są one najkrótsze. Skoro się “znasz”, jak to sam piszesz, to jakie języki programowania już “znasz”(w sensie, w których kalkulator już zrobiony)?

Zgadzam się w 100% z kolegą. Im mniej znaków tym kod jest bardziej zaciemniony i zazwyczaj jest tylko zrozumiały w momencie pisania. Chwilę później już trzeba analizować logikę od początku. W języku c istnieją konkursy, w których liczy się liczba znaków - im mniej tym lepiej.

Ja osobiście pisze w C#. Pod względem liczby znaków pewnie jeden z języków o największej liczbie znaków na dany problem. Ja do tego okraszam go długimi nazwami zmiennych (może nie tyle długimi co dokładnie opisującymi przeznaczenie). To samo dla nazw funkcji i innych bytów. Natomiast dzięki InteliSense i innym udogodnieniom ze strony IDE nie sądzę by można było powiedzieć że dany problem piszę dłużej niż program który będzie zawierał 10 razy mniej znaków. Natomiast w przypadku błędu i odnalezieniu go i poprawieniu, to czas potrzebny w pierwszym przypadku będzie nie porównywalnie krótszy niż w drugim.

To tylko moje zdanie, a wypowiedziałem się, żeby podkreślić jak bardzo mylnym stwierdzeniem jest, że mniejsza ilość znaków = mniejszy czas. Jeśli kolega szuka języka w celach hobbistyczny to super, życzę powodzenia, ale proszę nie stawiać tez które mogą bardzo zaszkodzić wielu mniej doświadczonym programistom.

Jak masz dobre środowisko to wszystkie nawet przydługawe komendy jesteś w stanie wklepać w kilka znaków.

Ja dzisiaj oglądałem cóż to za cudo F# i wydawało mi się że składnia była znacznie krótsza niż dotychczas widziałem. Ale nie znam w ogóle tego języka więc to może być źle trafiony przykład.

Znam w stopniu przynajmniej pozwalającym napisać tzw. i ww. “kalkulator”:

  • PHP

  • JS

  • Ruby

  • Pascal na kompilatorze Turbo

  • Perl

  • Python

  • Java

  • Cpp

  • Brainfuck (ale rzecz jasna tylko dodawanie i odejmowanie, ale oparte o dane wprowadzane przez użytkownika ^^)

  • Batch

  • Lisp

  • Delphi

  • BASIC na środowisku Turbo

Możliwe, że kilku, których się chwytałem nie wymieniłem. Ale nie wiem, co pytanie pana wyżej (o języki jakie umiem) miało do rzeczy.

A teraz zastanów się, czy którykolwiek znasz. I czy nie lepiej zająć się realnymi problemami niż dysputami bez celu.

Skończcie offtopować. Na razie jedynie Ravestar i somekind wpadli na pomysł, że można nie offtopować.

A zajmować się będę tym, co mi się spodoba.

int suma=0;

int size = A.size();

for (int i=0; i < size; ++i)

suma += A[i];

===

for(int i=0,s=0;i

Nie jest tak źle, weź też pod uwagę, że dłuższe / bardziej rozbudowane funkcje w c++ bd krótsze.

A jeśli nadal nie wierzysz, to przejrzyj sobie posty [alex]'a pisane w c++. I spróbuj napisać je krócej :))

Niestety temat zszedł trochę na dysputy bez celu. Dzięki przykładom kolegi @RaveStar trochę załapałem o co chodzi w tym temacie jednak dalej nie widzę jego przydatności życiowej.

Szukasz języka który w krótki sposób zapisuje pewne operacje, jak w podanych przykładach:

+/A sumuje elementy tablicy.

Kontrprzykłady dla tego rozumowania:

  1. Tak zapisane metody (przy pomocy znaków specjalnych) mogą odnosić się tylko dla prymitywnych operacji - znanych kompilatorowi (tu mały margines ale pominę tutaj).

  2. Przykład dla języka C# M.s(A) <=> taki zapis może wykonywać to samo co podany powyżej, jeśli M będzie klasą ze statyczną metodą s sumującą wszystkie elementy podanej tablicy A. tylko 2 znaki więcej. Warunek: wcześniejsza implementacja biblioteki zawierającej taką metodę.

Tutaj przechodzimy do sedna sprawy (przynajmniej moim zdaniem). Biblioteki. Ja pisałem w wielu językach, i zawsze stosowałem metodę język per problem. Czyli jak mniej policzyć współczynnik przy n tej potędze funkcji tworzącej używałem języka Mathematica (btw polecam się zapoznać, chociaż oprogramowanie jest strasznie drogie i ja miałem przyjemność pracować dzięki uczelni inaczej to wiecie…)

Operacje macierzowe - Matlab.

Liczby permutacji - Mathematica.

Liczba permutacji przy danych założeniach (constraint) - Prolog

User Friendly interfejs do przedstawienia jakiś danych z pliku - C# WinForms.

Jeszcze raz dodam - były to zastosowania rozwiązujący jakiś problem i zazwyczaj nie zawierały więcej niż 40 linijek.

Dodam tu jeszcze język Go (nie widziałem w poprzednich postach), nie znam ale pamiętam że był reklamowany jako język o zwięzłej strukturze - może przypadnie ci do gustu.

Chyba Javy nie widziałeś, C# jest od niej jakieś 2-3 razy zwięźlejszy. Z kolei od C# bardziej zwięzłe są np. F# i Scala.

Tyle wiem, o językach ogólnego przeznaczenia, bo język specyficzny dla zadania zawsze będzie zwięźlejszy w ramach problemu ze swojej dziedziny.